[{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/categories/ai/","section":"Categories","summary":"","title":"AI","type":"categories"},{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/categories/azure/","section":"Categories","summary":"","title":"Azure","type":"categories"},{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/","section":"Azure Greg","summary":"","title":"Azure Greg","type":"page"},{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"I don\u0026rsquo;t get genuinely excited about a learning platform very often. But the Frontier Transformation Engineer Learning Journey on Level Up has done exactly that, and I\u0026rsquo;ve been chipping away at it for a short period now, so I wanted to write about it properly.\nWhat Frontier actually is # If you haven\u0026rsquo;t come across Level Up yet, it\u0026rsquo;s a Microsoft-sponsored skilling platform, and Frontier is its flagship journey - built specifically for people like us who design, build and deploy AI-powered solutions on Microsoft\u0026rsquo;s stack day to day. Solution engineers, AI engineers, cloud engineers, architects, technical consultants - if that\u0026rsquo;s your world, this is built for you.\nIt\u0026rsquo;s a big journey. Around 86 hours of content across three phases:\nCertifications - six of them, including GH-300 (GitHub Copilot), AI-103 (building Azure AI apps and agents), and AB-100 (Agentic AI Business Solutions Architect), alongside three more. Project-Ready Learning + Assessments - ten modules covering Microsoft IQ, Work IQ, Copilot, Agentic AI, Fabric IQ and Agent 365, every one of them backed by hands-on labs rather than just slides and video. Frontier CoE \u0026amp; Hypervelocity Engineering - the advanced end of the journey, focused on building AI Centres of Excellence and industry-specific implementation patterns. Everything is self-paced, which matters a lot when you\u0026rsquo;re trying to fit this in around a day job and everything else. There are optional prep courses, required assessments (you need 80% to pass), and proper hands-on labs throughout - not just multiple choice questions designed to tick a box.\nWhy it\u0026rsquo;s landed at exactly the right time for me # Anyone who reads this blog regularly will know the last year has been all about AI for me - building apps with Copilot and Copilot CLI, writing up Build and Ignite takeaways, trying to keep pace with how fast the Azure AI stack is moving. The problem I kept running into is that most of what I was learning was self-directed and a bit scattered - a module here, a blog post there, a YouTube video when I had a spare hour.\nFrontier is the first thing I\u0026rsquo;ve found that pulls all of that into one coherent, structured path. Instead of picking up fragments of Copilot, agentic AI, and Fabric separately, you work through them as a connected journey that\u0026rsquo;s clearly been designed by people who understand how these pieces actually fit together in real projects. It\u0026rsquo;s project-ready learning in the genuine sense - the labs feel like the kind of thing you\u0026rsquo;d actually be asked to build for a customer, not a sanitised training exercise.\nHow I\u0026rsquo;m getting on # I started on the Certifications phase, working through GH-300 first since Copilot is where I\u0026rsquo;ve already got the most hands-on experience, and it was a good confidence builder before moving into less familiar territory. I\u0026rsquo;m now making my way through the Project-Ready Learning modules, and Agentic AI and Agent 365 in particular have already changed how I\u0026rsquo;m thinking about a couple of things I\u0026rsquo;m building right now. I\u0026rsquo;m nowhere near the CoE and Hypervelocity Engineering content yet, but that\u0026rsquo;s the part I\u0026rsquo;m most looking forward to once I get there.\nThe self-paced format is genuinely working for me. I\u0026rsquo;m doing it in chunks - a couple of hours a fortnight - and the progress tracking means I\u0026rsquo;m not losing my place every time I have to stop and come back to it.\nGo and do this # If you\u0026rsquo;re already active in the Microsoft AI Cloud Partner Program, or your organisation is, get in touch with your Partner Administrator and get set up. It\u0026rsquo;s a bit of admin up front - a Level Up account on your company email, an MS Learn profile matching it, and linking both to Partner Center - but it\u0026rsquo;s a five minute job and worth doing properly so your progress actually counts.\nOnce you\u0026rsquo;re in, don\u0026rsquo;t try to do it all in one sitting. Pick a phase, work through it properly, use the labs rather than skipping to the assessment. The badge at the end is nice, but it\u0026rsquo;s genuinely the least interesting part of this - the reason to do Frontier is that the content is some of the best structured AI upskilling I\u0026rsquo;ve come across from Microsoft in a long time.\nI\u0026rsquo;ll keep posting updates here as I move through the rest of the journey. If you\u0026rsquo;re doing it too, or you start after reading this, let me know - I\u0026rsquo;d love to compare notes.\n","date":"18 July 2026","externalUrl":null,"permalink":"/2026/07/18/why-im-working-through-level-ups-frontier-learning-journey/","section":"Posts","summary":"","title":"Why I'm Working Through Level Up's Frontier Learning Journey (And You Should Too)","type":"posts"},{"content":"","date":"18 July 2026","externalUrl":null,"permalink":"/categories/mvp/","section":"Categories","summary":"","title":"MVP","type":"categories"},{"content":"I got the email a short while back and I still get a little buzz reading it every single time - I\u0026rsquo;ve been renewed as a Microsoft MVP for Azure, for the 2026-2027 award period. This makes eight years running now since that first award back in August 2019, and I don\u0026rsquo;t take a single one of them for granted.\nEvery year I say the same thing to anyone who\u0026rsquo;ll listen: the MVP award isn\u0026rsquo;t given for what you know, it\u0026rsquo;s given for what you share. So before anything else - thank you to the community. The people who show up to the Glasgow Azure User Group on a weeknight, the folks who come through the doors at DDD Scotland and Scottish Summit, everyone who comments on a blog post, corrects me when I\u0026rsquo;ve got something wrong, or drops a message on YouTube saying a video helped them get unstuck. None of this happens without you.\nWhat the last year looked like # This MVP year has probably been the most different one yet, because so much of it wasn\u0026rsquo;t really about Azure in isolation anymore - it was about Azure and AI colliding, and how quickly that\u0026rsquo;s changing the way we build things.\nA few things stand out when I look back:\nBuilding with AI, properly. I spent a lot of this year pairing with GitHub Copilot and Copilot CLI to build real things end to end rather than just autocompleting a function here and there - an Azure governance web app that scores maturity, an AppInsights analyser Blazor dashboard, even a golf scoring app just for fun. Writing those posts up taught me as much as building them did. Conference season. Microsoft Build and Microsoft Ignite both gave me plenty to write about this year, and getting to attend, absorb it all, and translate it into something practical for the community is one of my favourite parts of being an MVP. Keeping the user group going. Glasgow Azure User Group kept running every couple of months. Small, consistent, in-person meetups still matter, even in a world of infinite online content. Writing through the platform shift. I wrote a fair bit this year about the move from Azure DevOps to GitHub Enterprise, which felt like the right moment to have that conversation properly rather than just watching it happen from the sidelines. Still learning. Still sitting exams, still going through Microsoft Learn modules, still trying to stay a couple of steps ahead so I\u0026rsquo;ve got something useful to pass on. None of that is a huge, flashy list. It\u0026rsquo;s mostly just showing up, consistently, and writing down what I learn along the way so someone else doesn\u0026rsquo;t have to figure it out from scratch.\nWhy I still do this # I get asked fairly often why I keep blogging, keep running the user group, keep putting talks together, especially now there\u0026rsquo;s a day job, a family, and about a hundred other things competing for the same hours. The honest answer is that I remember exactly what it was like starting out with zero Azure knowledge, and how much difference it made having other people share what they knew for free. Paying that forward is the whole point for me. The MVP award is a nice recognition of it, but it was never really the goal - it\u0026rsquo;s a by-product of just trying to be useful to people.\nIf you\u0026rsquo;re on that same path right now - learning Azure, wondering whether your blog posts or talks or GitHub repos matter to anyone - they do. Keep going. I wrote a post a few years back on how the MVP nomination process actually works if you want the mechanics of it, but the short version hasn\u0026rsquo;t changed: help people first, and the recognition tends to follow.\nWhat\u0026rsquo;s next # More of the same, really, just aimed at wherever the platform goes next. I expect this coming year leans even further into AI-assisted development on Azure - agents, Copilot, and the tooling around them are moving fast enough that keeping up is a full-time hobby on its own. I\u0026rsquo;ll keep writing it up here as I go and hopefully bump into you in the coming 12 months.\nHere\u0026rsquo;s to year eight.\n","date":"18 July 2026","externalUrl":null,"permalink":"/2026/07/18/renewed-as-a-microsoft-mvp-for-2026-2027/","section":"Posts","summary":"","title":"Renewed as a Microsoft MVP for 2026-2027","type":"posts"},{"content":"I have to start this blog post by saying I am an Azure DevOps fanboy and always will be. I\u0026rsquo;ve used it since day one. I\u0026rsquo;ve worked on a lot of projects over the years, using repos, building pipelines, and using Azure Boards throughout. Let get into this subject further.\nFor years, Azure DevOps has been the default choice for enterprise software teams. It has served organisations well, managing source code, running build pipelines, tracking work, and housing artefacts under one roof. It does the job.\nGitHub Enterprise is something different though. Not just a nicer place to host code. It\u0026rsquo;s a platform built around developers rather than process governance, and the AI sitting on top of it has gotten good enough that it genuinely changes how code gets written. That last part is what shifted my thinking.\nIf your company is still on Azure DevOps, here\u0026rsquo;s the honest case for moving.\nA Platform Built for Developers # Azure DevOps grew out of Team Foundation Server. Its DNA is project management and governance - that\u0026rsquo;s what TFS was for, and you can still feel it in the bones of the product. GitHub started somewhere completely different: as a place developers actually wanted to be.\nThe pull request flow, the way repos are structured, the automation model, the tone of the whole platform - it all points in the same direction. Developers like spending time there. That sounds soft until you try to hire engineers and realise they already have GitHub profiles. Their open-source work lives there. The libraries they pull into your codebase live there. Over 180 million developers, depending on which GitHub statistic you read. Moving onto GitHub Enterprise means your team is on the same platform they already use for everything else.\nMigrating Is Easier Than You Think # he fear of migration is what kills most of these conversations before they start. In practice it\u0026rsquo;s not that bad - Microsoft and GitHub have put real engineering effort into making this work.\nThe GitHub Enterprise Importer (GEI) is the official CLI for moving from Azure DevOps. It carries over Git history, pull request history, repo settings, metadata. For a Git repo, it\u0026rsquo;s literally one command:\ngh gei migrate-repo \u0026ndash;github-target-org \u0026ldquo;my-org\u0026rdquo; \u0026ndash;target-repo \u0026ldquo;my-repo\u0026rdquo; \u0026ndash;ado-source-org \u0026ldquo;my-ado-org\u0026rdquo; \u0026ndash;ado-source-team-project \u0026ldquo;MyProject\u0026rdquo; \u0026ndash;ado-source-repo \u0026ldquo;MyRepo\u0026rdquo;\nFor shops with hundreds of repos, GEI supports bulk scripts so you can queue and sequence the work. If you\u0026rsquo;re still on TFVC, you\u0026rsquo;ve got an extra hop - either git-tfs or Azure DevOps\u0026rsquo;s built-in TFVC-to-Git conversion - before you can run the importer. Annoying, but doable.\nI\u0026rsquo;d recommend migrating in waves. Start with the repos no one will cry over if something goes sideways. Validate. Update integrations. Move to the important stuff once you trust the process. Once a repo lands on GitHub, branch protection, CODEOWNERS files and repo templates are sitting right there, and you\u0026rsquo;ll likely have better governance on day one than you had in Azure DevOps.\nActions vs Pipelines\nIf repo migration is the visible part, pipeline migration is where the actual work is. Azure Pipelines and GitHub Actions both run on YAML and look superficially similar, but the differences are real and you can\u0026rsquo;t just copy-paste your YAML across. Plan for some rewriting.\nWhat you get for the effort is worth it though. Actions has a marketplace stuffed with pre-built actions - deployments to Azure, AWS and GCP, container builds, security scanning, the lot. And almost any event in GitHub can trigger a workflow. Not just pushes and PRs but releases, issue comments, schedules, manual dispatches. Once you start thinking event-first, it\u0026rsquo;s hard to go back.\nFor Azure deployments, ditch service principal secrets and use OIDC. Azure trusts GitHub\u0026rsquo;s identity provider, short-lived tokens get issued at runtime, and there\u0026rsquo;s nothing sitting in a vault waiting to leak:\nname: Azure Login (OIDC) uses: azure/login@v2 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} Multi-stage deployments translate cleanly. Build, dev, staging with approval gates, production - environment protection rules cover all of it. And reusable workflows are the equivalent of Azure Pipelines templates, so your DRY pipeline code lives in a central .github repo and gets pulled in by everything else.\nSecurity stops being someone else\u0026rsquo;s problem # In most Azure DevOps shops, security still works the old way: a scan before release, a pen test before go-live, findings dumped on developers weeks after the code was written. By the time someone\u0026rsquo;s looking at the finding, they\u0026rsquo;ve forgotten what they were trying to do when they wrote it.\nGitHub Advanced Security pulls security into the pull request itself. Findings show up where the code is being reviewed, not in a separate report you\u0026rsquo;ll get to next sprint.\nThree things drive this:\nCodeQL. GitHub\u0026rsquo;s semantic scanner. Treats your code as a database you can query and goes after the obvious stuff - injection, XSS, insecure deserialisation, dodgy crypto, broken auth. Findings appear as inline annotations on the PR diff, and branch protection can stop the merge until they\u0026rsquo;re fixed. If you\u0026rsquo;ve already paid for Semgrep, Snyk, Sonar or Checkmarx, they all speak SARIF and feed into the same view.\nSecret scanning with push protection. The bit everyone forgets about is the second half - push protection. Instead of catching secrets after they\u0026rsquo;re committed (too late, go rotate everything), it blocks the git push itself when it spots one of 200+ known credential patterns. The developer gets the error before the secret ever hits the repo. For partnered providers - AWS, Azure, Stripe, others - GitHub also pings the provider so they can revoke the token automatically.\nDependabot. Watches the dependency graph, raises alerts on known CVEs, and opens PRs to bump vulnerable packages to patched versions. The dependency review action blocks PRs introducing new vulnerable or licence-incompatible dependencies at merge time.\nNone of this needs third-party integrations or custom pipeline plumbing. It\u0026rsquo;s just there.\nThe Copilot question # Everything above is a real step forward. Better repos, better pipelines, security that actually works in the developer loop. But honestly - the thing pushing organisations to move now is AI.\nGitHub Copilot is the most adopted AI coding assistant in the world, and unlike a lot of AI tooling that bolts onto the side of your workflow, Copilot is properly woven in. IDE, pull requests, GitHub.com, and increasingly an autonomous agent that can implement whole features.\nIn the editor it does what most people have seen by now: real-time completions, single-line through to whole functions. In the Enterprise tier it\u0026rsquo;s also indexed against your own codebase, so it learns your libraries, your naming, your error handling, your internal APIs. That\u0026rsquo;s the bit that makes it feel different from generic Copilot - it stops suggesting plausible-but-wrong patterns and starts suggesting your team\u0026rsquo;s patterns.\nCopilot Chat lives in the IDE and on GitHub.com. Ask it about unfamiliar code, request a refactor, debug a failing test, get it to write a workflow file from a description. Copilot Code Review does a first-pass review on every PR with inline suggestions, which doesn\u0026rsquo;t replace human review but does mean your reviewers spend their time on the things that matter rather than the obvious stuff.\nThe piece I\u0026rsquo;m watching most closely is Copilot Workspace. You describe a task, Copilot reads the relevant code, proposes a plan across files, makes the changes, writes the tests, drafts the PR description. The developer reviews everything before anything\u0026rsquo;s committed. It\u0026rsquo;s not replacing engineers - it\u0026rsquo;s collapsing the boring middle of the work.\nThe productivity numbers are healthy if you take vendor stats with the appropriate amount of salt. Around 55% faster on controlled tasks, ~30% suggestion acceptance rate, higher on boilerplate-heavy work. Your mileage will vary. But ask any engineer who\u0026rsquo;s been using it daily for six months whether they\u0026rsquo;d give it back, and you\u0026rsquo;ll get your answer.\nAzure DevOps doesn\u0026rsquo;t really have an answer here. Microsoft has bolted some Copilot features onto it - work item summaries, basic PR descriptions - but it\u0026rsquo;s surface-level. Copilot has been native to GitHub since 2021, and every feature is built around the developer loop. This is where Microsoft\u0026rsquo;s AI investment in dev tooling is going. The gap is going to keep growing.\nDon\u0026rsquo;t drag it out # The migration is well-tuned, well-documented, and, at this point, well-trodden by organisations that have already been through it. The ROI shows up in security posture, pipeline performance, developer experience, and the productivity gains from Copilot.\nThere\u0026rsquo;s also a cost to sitting on Azure DevOps that\u0026rsquo;s easy to wave away - not just the features you\u0026rsquo;re not getting, but the slowly widening gap between how your team works and how the engineering organisations you\u0026rsquo;d benchmark yourselves against work. Each month, that gap gets a bit wider.\nThe real question isn\u0026rsquo;t whether to move. It\u0026rsquo;s when to start. And there\u0026rsquo;s no good reason for it not to be now.\n","date":"4 May 2026","externalUrl":null,"permalink":"/2026/05/04/from-azure-devops-to-github-enterprise-why-now-is-the-right-time-to-make-the-move/","section":"Posts","summary":"","title":"From Azure DevOps to GitHub Enterprise: Why Now Is the Right Time to Make the Move","type":"posts"},{"content":"","date":"4 May 2026","externalUrl":null,"permalink":"/categories/github/","section":"Categories","summary":"","title":"GitHub","type":"categories"},{"content":"I\u0026rsquo;m using the GitHub Copilot CLI on a day to day basis but I have been away for a few weeks and a lot has changed, in order to keep up to date with all of the changes I created a very simple web app that tracks the latest realses to the GitHub Copilot CLI.\nYou can find the repository on GitHub https://github.com/gsuttie/GitHubCoPilotReleaseNotes\nI am using the GitHub Copilot CLI to build useful apps for my day-to-day use, and it helps me keep track of the most recent changes.\n","date":"21 April 2026","externalUrl":null,"permalink":"/2026/04/21/creating-a-github-copilot-cli-release-tracker/","section":"Posts","summary":"","title":"Creating a GitHub Copilot CLI Release Tracker","type":"posts"},{"content":"If you\u0026rsquo;ve ever had to jump between multiple Azure subscriptions in the portal just to check on the health of your applications, you\u0026rsquo;ll know how frustrating it can be. The Azure portal is powerful, but it isn\u0026rsquo;t always the fastest way to get a quick read on what\u0026rsquo;s happening across your Application Insights instances. That\u0026rsquo;s the problem I set out to solve with AppInsights Analyser.\nWhat Is It?\nAppInsights Analyser is a .NET 10 Blazor Server application that connects directly to your Azure Application Insights resources and presents all the key telemetry data in a clean, fast dashboard — without you ever having to leave the app. You pick your subscription, select an Application Insights instance, and immediately get access to ten different analytics views:\nRequests Dependencies Exceptions Page Views Page Speed, Availability Traces Top Failures Performance Overview summary. Everything is driven by KQL (Kusto Query Language) queries running against the Azure Monitor Logs API, so the data is always live and accurate.\nHow I Built It\nThe tech stack is deliberately straightforward. I used .NET 10 Blazor Server for the application framework — Blazor Server made sense here because all the Azure SDK calls happen server-side anyway, and there\u0026rsquo;s no need to expose credentials to the browser. For the UI I reached for MudBlazor, which gave me a polished Material Design component library including drawers, tables, chips, and dialogs with minimal effort.\nFor charts I used Blazor-ApexCharts, which made it easy to render grouped bar charts for the Page Speed comparison feature — showing today\u0026rsquo;s page load times versus yesterday\u0026rsquo;s side by side, with percentage change calculated automatically.\nAuthentication was one of the more interesting design decisions. Rather than storing connection strings or API keys anywhere, the app uses ChainedTokenCredential from the Azure.Identity SDK. It tries your active az login session first, then falls back to DefaultAzureCredential for environments like Managed Identity or Visual Studio. This means you can run it locally with a quick az login \u0026ndash;tenant and it just works.\nThe Azure resource discovery uses the Azure Resource Manager SDK to enumerate subscriptions and Application Insights instances dynamically — so there\u0026rsquo;s nothing to configure. If you have access to it in Azure, it shows up in the app.\nFeatures\nA few things came together particularly well. The drilldown panels let you click a failed request count and instantly see the individual failed requests inline — no navigation away from the page. The same pattern works for exception details, top failure occurrences, and performance percentile breakdowns (P50 through P99).\nThe left-hand sidebar navigation keeps all ten sections just one click away, with the active section highlighted and the main content area updating without a full page reload.\nAll tables are fully sortable — click any column header and the data reorders instantly client-side.\nTry It Yourself\nThe project is open source and available on GitHub. All you need is the .NET 10 SDK, the Azure CLI, and read access to an Azure subscription. Clone the repo, run az login \u0026ndash;tenant , then dotnet run — and you\u0026rsquo;re in.\nhttps://github.com/gsuttie/AppInsightsAnalyser\n","date":"18 April 2026","externalUrl":null,"permalink":"/2026/04/18/building-appinsights-analyser-a-blazor-dashboard-for-azure-application-insights/","section":"Posts","summary":"","title":"Building AppInsights Analyser: A Blazor Dashboard for Azure Application Insights","type":"posts"},{"content":"When you\u0026rsquo;re part of an agile team, sometimes it feels like you\u0026rsquo;re orchestrating a heist. You\u0026rsquo;ve got a tight deadline, a complex target, and a crew of specialists, each with their own quirks and talents. That\u0026rsquo;s exactly how it felt when I set out to build a live .NET 10 Blazor Server sprint review dashboard for the team I work in at Intercept. But this time, my crew wasn\u0026rsquo;t just my colleague; it was a team of AI agents assembled using GitHub Copilot\u0026rsquo;s Squad system, and each one had a name straight out of Ocean\u0026rsquo;s Eleven.\nLet me set the scene: Squad is a GitHub project that lets you assemble a named team of AI agents, each with a persistent identity. For this job, I picked Ocean\u0026rsquo;s Eleven as my universe. The coordinator, Squad itself, was my Rusty Ryan, keeping everyone in sync. My main developer agent? Livingston is named after Livingston Dell, the tech wizard who hacks into the casino\u0026rsquo;s systems. The parallel was intentional and, honestly, delightful. Just like Danny Ocean briefs his crew for a big job, I was Danny, briefing Livingston and the rest of the Squad for our sprint review dashboard caper.\nFeatures I added include\nMain Dashboard as shown above Issues - show you a list of issues, sortable, filterbale and searchable for the previous, current and next sprint. Team Workload looks at how much work each team member has and shows you the % of open and closed tasks. Risks - this will highlight potential risks with the current workload / issue status' Members - shows you a view of each team memberm theire issues in previous, current and next sprint. Sprint Health - highlights serial carryover in issues, carried-over issues with no updates, and anything added mid-sprint. The target: Project #134 for Team 503. The plan? Pull real data from the GitHub Projects API across three sprints, previous (2026-4), current (2026-5), and next (2026-6). We needed an Issues page with a sortable, searchable table, complete with GitHub issue links that open in a new tab. The Risks page would serve as our risk register, with linked issue-number badges. The Team Workload page would show who\u0026rsquo;s carrying what, and the Members page would break down stats for each of our team members, and the Sprint Health page would flag serial carry-overs (red), no-update carry-overs (yellow), and mid-sprint additions (teal) so we could spot problems before they snowballed.\nHere\u0026rsquo;s where the magic happened. Instead of slogging through days of solo development, I described the \u0026ldquo;job\u0026rdquo; to Livingston. Features that would normally take hours, sometimes days, were done in minutes. Livingston even caught a subtle Blazor gotcha with @rendermode InteractiveServer, making sure all filtering and searching was truly interactive. The Squad coordinator orchestrated the operation, keeping everything on track.\nBut the real joy was in the pair programming experience. Instead of talking to a generic \u0026ldquo;AI assistant,\u0026rdquo; I was briefing my crew. Livingston wasn\u0026rsquo;t just a bot, he was the tech guy, always ready to hack the next piece of the dashboard into existence. The agent names made the whole process feel collaborative and fun, like we were all in on the heist together.\nLooking back, this is how dev teams should work. Assemble your crew, brief them on the job, and let each specialist shine. With Copilot Squad, the line between human and AI collaboration blurs in the best way. If you want to pull off your own perfect sprint review heist, don\u0026rsquo;t just hire an assistant. Build a crew.\nIf you are interested this is how I went about it - I used https://bradygaster.github.io/squad and I cannot tell you just how impressive this is to use.\nThis application was built from scratch in a little over 30 minutes.\n","date":"8 March 2026","externalUrl":null,"permalink":"/2026/03/08/pulling-off-the-perfect-sprint-review-heist-with-copilot-squad-and-oceans-eleven/","section":"Posts","summary":"","title":"Pulling Off the Perfect Sprint Review Heist with Copilot,  Squad and Oceans Eleven","type":"posts"},{"content":"This article is my entry into this year\u0026rsquo;s Azure Spring Clean 2026 event. Huge thanks to the organisers!\nA customer asked me how to interpret Azure Application Insights and whether it would be possible to build a web app to help them understand what Application Insights was reporting about app performance.\nThe prompt I used was as follows:-\nTo run this, I went into GitHub Copilot CLI and then used/plan and then type the prompt\nI need a website to look at my production application insights and help me figure out the good and the bad within it - the resource is called appinsights-customername-prod, in the resource group called rg-app-insights-prod within the subscription - do this using the latest version of C #.\nThat\u0026rsquo;s it, the full prompt, start small, build onto itas you go. As you may guess, this is quite a vague prompt, but enough to get started with.\nThe plan it comes back looked like so:-\nPlan: Application Insights Health Dashboard (Blazor Server, .NET 9) # A Blazor Server web application that queries the production Application Insights resource using the Azure Monitor Query SDK and DefaultAzureCredential, presenting a real-time dashboard split into \u0026ldquo;green\u0026rdquo; (healthy signals) and \u0026ldquo;red\u0026rdquo; (problems) sections with a user-selectable time range.\nProject Layout\nAll files created inside a new c:\\personal\\code\\phillip\\AppInsightsDashboard\\ folder:\nSteps\nCreate the project — dotnet new blazorserver targeting net9.0 at c:\\personal\\code\\gregor\\AppInsightsDashboard Add NuGet packages to the .csproj: Azure.Monitor.Query — logs (KQL) and metrics queries Azure.Identity — DefaultAzureCredential for auth (uses az login locally) Configure appsettings.json — store only the non-secret App Insights resource ID: Resource ID: /subscriptions//resourceGroups/***rg-app-insights-prod ***/providers/microsoft.insights/components/appinsights-customername-prod No connection strings or secrets in config Program.cs — register LogsQueryClient and MetricsQueryClient as singletons using DefaultAzureCredential, register AppInsightsQueryService as scoped AppInsightsQueryService.cs — wraps LogsQueryClient.QueryResourceAsync(resourceId, kql, timeRange) and exposes typed async methods for each dashboard section: GetSummaryAsync(TimeRange) → total requests, success %, avg duration, exception count GetSlowestEndpointsAsync(TimeRange) → p50/p95/p99 by operation name GetExceptionSummaryAsync(TimeRange) → exception type, count, last seen GetDependencyHealthAsync(TimeRange) → name, success rate, avg duration GetFailedRequestsAsync(TimeRange) → recent failed requests with details GetRecentExceptionsAsync(TimeRange) → raw exception feed KQL queries used (all target the App Insights classic tables via QueryResourceAsync): requests | where timestamp \u0026gt; ago(Xh) | summarize \u0026hellip; exceptions | where timestamp \u0026gt; ago(Xh) | summarize count() by type | order by count_ desc dependencies | where timestamp \u0026gt; ago(Xh) | summarize \u0026hellip; Performance percentiles via percentiles(duration, 50, 95, 99) Dashboard.razor — the main page with: Time range selector (dropdown: 1h / 6h / 24h / 7d) that triggers re-query Summary cards row: total requests, success rate (colour-coded), avg duration, exception count \u0026ldquo;The Good\u0026rdquo; section: top performing endpoints, successful dependency calls \u0026ldquo;The Bad\u0026rdquo; section: failed requests, top exceptions, slow dependencies Loading spinner while queries run; error boundary for query failures Performance.razor — sortable table of all endpoints with p50/p95/p99 duration, request volume, failure rate Exceptions.razor — exception type breakdown bar chart (using inline SVG or a lightweight JS chart interop) + scrollable raw exception feed with stack trace expansion Dependencies.razor — dependency type (SQL, HTTP, etc.) success/failure rates and avg duration, colour-coded rows (red if success rate MainLayout.razor** — simple nav sidebar linking to the four pages, shows the App Insights resource name in the header Authentication note\nLocally, DefaultAzureCredential picks up az login credentials automatically. The signed-in account needs at least Reader on rg-enogrp-point-prd-workload and Log Analytics Reader on the linked workspace (or Monitoring Reader at the resource group level).\nVerification\ndotnet run → opens http://localhost:5000, dashboard loads with real data Time range dropdown changes refresh all cards without page reload Red/amber/green thresholds visible: success rate 500ms = amber Navigate to each sub-page and confirm tables populate Decisions\nQueryResourceAsync used over QueryWorkspaceAsync — no need to look up the linked workspace ID separately; App Insights resource ID is sufficient for all requests/exceptions/dependencies/traces tables Blazor Server chosen over WASM — avoids CORS concerns with Azure SDK calls from browser, keeps credentials server-side DefaultAzureCredential — zero-config for local az login use, Managed Identity ready if later deployed to Azure Confirm this plan and I can hand it off to an implementation agent, or let me know if you\u0026rsquo;d like any adjustments (e.g. add a specific custom event table, change colour thresholds, add charts library, etc.).\nI then confirm the plan and this was the end result.\nSo, from a single prompt, I have a new Blazor website with an overview page, a performance page, an exceptions page, and a dependencies page. Now I can go back, style it, change it, add to it, do whatever I want.\nI have no dependencies on other tools, I don\u0026rsquo;t need to version it, and tell people there is an update available, there is nothing to download and install - I am using AI to do the job for me.\nPro tip: Once you\u0026rsquo;re happy with changes, ask AI to code review, ask it how I can make it even better, more secure, etc., and then and only then create a PR and check it in after it\u0026rsquo;s been reviewed.\nThis is just how easy it is to create a web app that you can use, run locally, and build all sorts of useful tools.\nHere are further blog posts on this topic. If you want to see examples of how to look after your Azure Environment, check out the article - https://gregorsuttie.com/2026/02/19/how-i-used-github-copilot-cli-to-build-an-azure-governance-web-app-from-zero-to-maturity-score-in-one-weekend/\nhttps://gregorsuttie.com/2026/02/23/i-used-ai-to-build-a-full-golf-scoring-web-app-heres-what-happened/\nhttps://gregorsuttie.com/2026/02/19/how-i-used-github-copilot-cli-to-build-an-azure-governance-web-app-from-zero-to-maturity-score-in-one-weekend/\nhttps://gregorsuttie.com/2026/02/14/shipping-features-faster-with-copilot-cli/\n","date":"2 March 2026","externalUrl":null,"permalink":"/2026/03/02/how-i-built-an-app-to-manage-azure-using-ai/","section":"Posts","summary":"","title":"How I built an app to manage Azure using AI","type":"posts"},{"content":"I\u0026rsquo;m a golfer who wanted a better way to track my rounds. So I did what a growing number of people are doing in 2026: I sat down with an AI assistant and built the thing myself.\nThe result is GolfScorer, a full-featured Blazor Server application that lets me record rounds hole by hole, manage courses, and dig into my performance stats. It has user authentication, a SQL database, Azure cloud deployment, and a dark luxury UI theme inspired by Augusta National.\nWhy I Built It # There are golf tracking apps out there. Plenty of them. But they all come with compromises, monthly subscriptions, clunky interfaces, features I don\u0026rsquo;t need, or missing the specific stats I care about. I wanted something tailored to me: a clean dashboard that shows my putting percentages, green-in-regulation trends, a handicap index, and a hole difficulty ranking so I can see exactly where my game falls apart.\nMore than anything, I wanted to understand how the thing worked. Not just use someone else\u0026rsquo;s black box, but own every piece of it.\nThe Process # I started by describing what I wanted in plain English. A golf app. Hole-by-hole scoring. Courses with 18 holes of par data. Statistics that actually tell me something useful. From there, the AI and I went back and forth, shaping the data model, building out the UI, debugging migrations, and refining features.\nThe stack we landed on is .NET 10 with Blazor Server, Entity Framework Core, ASP.NET Core Identity for authentication, and SQL Server for persistence. If you\u0026rsquo;d asked me a year ago to pick a tech stack, I would have stared at you blankly. But through the process of building this, I started to understand why each piece exists and what it does.\nSome of the features I\u0026rsquo;m proudest of came from iterating with the AI. The statistics dashboard, for example, breaks down my scoring into eagles, birdies, pars, bogeys, and worse. It shows per-hole analysis so I can see that I consistently blow up on hole 14 but quietly birdie hole 7 more often than I\u0026rsquo;d expect. That kind of insight is exactly why I wanted to build this.\nThe UI went through a major redesign too. We ended up with what I call the \u0026ldquo;Augusta Dark\u0026rdquo; theme, deep forest greens, gold accents, elegant serif headings using Playfair Display, and a monospaced font for scores so everything lines up cleanly. It looks and feels like a premium product, which still surprises me every time I open it. The theme came from the aigent skill called frontend-design.\nWhat I Learned # Building with AI isn\u0026rsquo;t pressing a button and getting a finished app. It\u0026rsquo;s a collaboration. I had to make decisions constantly; how should the data model work? Should rounds store denormalized totals for performance, or calculate everything on the fly? Do I want fairway tracking on par 3s? (No there\u0026rsquo;s no fairway to hit.) These are domain decisions that the AI can\u0026rsquo;t make for you. You bring the knowledge of what matters, and the AI brings the ability to turn that into working code.\nI also got AI to write the entire deployment to Azure, I plan the feature and it implemented the Bicep code, PowerShell deployment script and even how to update the app after each release.\nThe biggest lesson? You don\u0026rsquo;t need to be a developer to build software anymore, but you do need to be willing to think like one. You need patience, curiosity, and the willingness to read an error message and try to understand it before asking for help.\nWhat\u0026rsquo;s Next # I\u0026rsquo;m using GolfScorer for every round now. I have plans to add trend charts, a round comparison feature, and maybe a mobile-friendly layout for entering scores on the course. The codebase has unit tests for the core services, so I can keep building with confidence that I\u0026rsquo;m not breaking things.\nIf you\u0026rsquo;ve been sitting on an idea for a tool that would make your life better, something specific to your hobby, your job, your weird niche interest, I\u0026rsquo;d encourage you to try building it with AI. You might be surprised by what you\u0026rsquo;re capable of.\nNow if you\u0026rsquo;ll excuse me, I need to go work on that hole 14 problem.\nIf your interested in checking out a tiny little side hobby - here you go https://golfscoreapp-app.azurewebsites.net\nAnd yes full source code is available- https://github.com/gsuttie/golfscoreapp\n","date":"23 February 2026","externalUrl":null,"permalink":"/2026/02/23/i-used-ai-to-build-a-full-golf-scoring-web-app-heres-what-happened/","section":"Posts","summary":"","title":"I Used AI to Build a Full Golf Scoring Web App - Here's What Happened.","type":"posts"},{"content":"If you told me a year ago that I\u0026rsquo;d build a fully functioning Azure cost management and governance web application in a single weekend, without leaving my terminal I\u0026rsquo;d have laughed. But that\u0026rsquo;s exactly what happened when I sat down with GitHub Copilot CLI and a clear goal: build a web app that gives me a single-pane-of-glass view into Azure Budgets, Cost Management, Tagging, Policies, Advisor Recommendations, Orphaned Resources, Security, Service Retirements, Logging Costs, Right Sizing, and a Maturity Score Report.\nHere\u0026rsquo;s how it went, what I learned, and why I believe Copilot CLI is a game-changer for anyone building cloud tooling.\nWhat Is GitHub Copilot CLI?\nFor those who haven\u0026rsquo;t tried it yet, GitHub Copilot CLI is the new agentic coding assistant that lives entirely in your terminal. It replaced the older gh copilot extension (deprecated October 2025) and brings the full power of the Copilot coding agent to your command line. You install it, authenticate with your GitHub account, type copilot, and start building.\nWhat makes it different from other AI coding tools? A few things stood out to me during this project. It defaults to Claude Sonnet 4.5 but lets you swap models mid-session with the /model command. It supports Plan Mode (Shift+Tab), which lets you collaborate on an implementation plan before any code gets written. It has deep GitHub integration issues, PRs, repos all accessible through natural language. And critically for this project, it supports MCP (Model Context Protocol) servers, which meant I could extend it with the Azure MCP Server and have Copilot understand my Azure environment natively.\nThe Problem: Azure Governance Is Scattered\nAnyone managing Azure subscriptions at scale knows the pain. Budgets live in Cost Management. Tagging compliance is a separate report. Advisor recommendations are in their own blade. Orphaned resources require custom queries. Security findings are in Defender for Cloud. Service retirement notices come via email. And tying all of this together into a \u0026ldquo;how mature is our Azure governance?\u0026rdquo; score? That\u0026rsquo;s a spreadsheet exercise most teams dread.\nI wanted a single web application that pulls all of this together and gives me an actionable maturity score.\nSetting Up Copilot CLI for the Project\nGetting started was straightforward. I installed Copilot CLI via winget, authenticated, and navigated to my empty project directory.\nterminal\n**winget install GitHub.Copilot **\nThe first thing Copilot asked was whether I trusted the files in this directory. Since it was empty, I selected \u0026ldquo;Yes, and remember this folder for future sessions.\u0026rdquo; From there, I was in an interactive session.\nConnecting the Azure MCP Server\nThis was the key enabler for the entire project. The Azure MCP Server gives Copilot the ability to interact with Azure services, Azure Resource Graph, and perform tasks on your behalf. I configured the Azure MCP Server following Microsoft\u0026rsquo;s documentation and the azd coding-agent config flow. Once connected, Copilot could query my Azure subscriptions, understand my resource landscape, and generate code that used the correct Azure SDK patterns for my environment.\nUsing Plan Mode\nBefore writing a single line of code, I switched to Plan Mode with Shift+Tab and described what I wanted:\n\u0026ldquo;I want to build a web application using React for the frontend and Node.js for the backend that connects to Azure and provides dashboards for: Budget tracking and alerts, Cost analysis and trends, Tag compliance auditing, Azure Policy compliance, Advisor recommendations, Orphaned resource detection, Security posture from Defender, Service retirement tracking, Log Analytics cost monitoring, Right-sizing recommendations, and an overall Maturity Score. Use the Azure SDK for JavaScript and Azure Resource Graph queries where appropriate.\u0026rdquo;\nCopilot asked clarifying questions: Did I want multi-subscription support? (Yes.) Should the maturity score be configurable with weighted categories? (Yes.) Did I want role-based access? (Not yet, keep it simple.) After a few rounds, it produced a structured implementation plan that I reviewed and approved.\nBuilding the App: Module by Module\nAzure Budgets I prompted Copilot to scaffold the budget tracking module first. It generated API routes that use the @azure/arm-consumption SDK to pull budget data, current spend versus budget thresholds, and forecast projections. The frontend component rendered a clean dashboard with progress bars showing spend-to-budget ratios and colour-coded alerts for budgets approaching their thresholds.\nWhat impressed me was how Copilot handled the Azure authentication flow. It set up DefaultAzureCredential from @azure/identity and structured the code so the same credential chain worked locally (via Azure CLI auth) and in production (via managed identity).\nCost Management For cost analysis, Copilot generated Azure Resource Graph queries to pull cost data by resource group, service, and tag. It created time-series charts showing daily and monthly cost trends, and added a comparison view that overlays the current month against the previous month. I steered it to include anomaly highlighting any day where spend exceeded the 30-day rolling average by more than 20% gets flagged.\nTagging Compliance This module was where Copilot\u0026rsquo;s plan mode really shone. I described our tagging policy (required tags: Environment, CostCenter, Owner, Project) and Copilot generated Azure Resource Graph queries that audit every resource across subscriptions, calculate compliance percentages, and produce drill-down views by resource group and resource type. It even generated a remediation helper that outputs Azure CLI commands to apply missing tags.\nAzure Policy Compliance Copilot scaffolded an integration with the @azure/arm-policy SDK that pulls policy assignment compliance states. The dashboard shows compliant versus non-compliant resource counts per policy initiative, with the ability to drill into specific non-compliant resources. It used the policy compliance API correctly on the first pass, which saved me significant time versus reading the SDK documentation myself.\nAdvisor Recommendations The Advisor module pulls recommendations across all five categories (Cost, Security, Reliability, Operational Excellence, Performance) using the @azure/arm-advisor SDK. Copilot organized these into a prioritized list with estimated savings for cost recommendations and severity ratings for the rest. It also generated a \u0026ldquo;quick wins\u0026rdquo; view that filters for high-impact, low-effort recommendations.\nOrphaned Resources This was one of the trickiest modules. Orphaned resources unattached disks, unused public IPs, empty network security groups, NICs not attached to VMs don\u0026rsquo;t have a single API. Copilot generated a suite of Azure Resource Graph queries to detect each type, estimated the monthly cost of each orphaned resource, and created a cleanup view with one-click remediation scripts (outputting the az commands, not executing them directly for safety).\nSecurity Posture For security, Copilot integrated with the Microsoft Defender for Cloud APIs to pull the Secure Score, security recommendations, and alerts. The dashboard shows the overall secure score as a gauge, breaks down recommendations by severity, and highlights resources with active security alerts. It used the @azure/arm-security SDK and handled the different API versions gracefully.\nService Retirements Service retirements were interesting because there isn\u0026rsquo;t a single clean API for them. Copilot generated code that pulls service health advisories from the Azure Service Health API and filters for retirement-type events. It then cross-references your deployed resources against the affected services to produce a personalized retirement risk report showing which of your resources are impacted by upcoming retirements.\nLogging Costs Log Analytics can become a significant cost driver if not managed carefully. Copilot built a module that queries the Log Analytics workspace usage API, breaks down ingestion by data type (table), shows daily ingestion trends, and flags tables with unusually high or growing ingestion rates. It also added a \u0026ldquo;noisy tables\u0026rdquo; detector that identifies tables contributing disproportionately to costs.\nRight-Sizing Right-sizing recommendations came from two sources: Azure Advisor (which Copilot already integrated) and custom analysis using Azure Monitor metrics. Copilot generated code that pulls CPU and memory utilization metrics for VMs over the past 30 days, identifies consistently underutilized resources (average utilization below 20%), and recommends appropriate SKU downgrades with estimated savings.\nThe Maturity Score This was the capstone. I described the maturity scoring model I wanted: each of the ten areas above gets a score from 0 to 100 based on configurable thresholds, each area has a configurable weight, and the overall maturity score is a weighted average.\nCopilot generated the scoring engine with sensible defaults: Budget coverage over 80% of subscriptions scores high. Tag compliance above 90% scores high. Less than 5% non-compliant policy resources scores high. And so on for each category. The frontend renders a radar chart showing scores across all dimensions, plus an overall maturity grade (A through F) with specific recommendations for improving each area.\nFeatures That Made the Difference\nMCP Server Integration\nThe Azure MCP Server was transformative. Instead of me describing Azure APIs in my prompts, Copilot could query my actual Azure environment and generate code tailored to my subscription structure, resource types, and existing configurations. This dramatically reduced the back-and-forth that would have been required otherwise.\nPlan Mode\nBuilding a ten-module application in a single weekend would have been chaotic without Plan Mode. Being able to describe the full scope, get a structured plan, and then execute module by module kept the project organized. I used /clear between major modules to reset context and keep responses sharp a tip from the official best practices documentation.\nModel Switching\nFor the straightforward CRUD operations and API integrations, I stuck with Claude Sonnet 4.5 (the default). For the more complex maturity scoring logic and the multi-subscription aggregation patterns, I switched to Opus 4.5 with /model. The ability to choose the right model for the complexity of the task was genuinely useful.\nAutopilot Mode\nFor the repetitive scaffolding tasks setting up API routes, creating React components for each dashboard module I used Autopilot mode (Shift+Tab to cycle to it), which lets the agent keep working until a task is complete. This meant I could describe what I wanted and let Copilot build out entire feature modules while I reviewed the output.\nCustom Instructions\nI created a .github/copilot-instructions.md file in my repo with project conventions: use TypeScript everywhere, follow a specific project structure, always use DefaultAzureCredential, use Recharts for data visualization, and follow our Azure Resource Graph query patterns. Copilot respected these throughout the entire build, which meant consistent code across all modules.\nLessons Learned\nStart with Plan Mode for complex projects. The temptation is to just start prompting, but for anything with more than a couple of modules, the plan-first approach saves enormous time.\nUse /clear between unrelated tasks. Context pollution is real. When I moved from the Security module to the Logging module, clearing the context gave me noticeably better results.\nThe Azure MCP Server is essential for Azure projects. Without it, you\u0026rsquo;re manually describing your Azure environment in every prompt. With it, Copilot understands your subscriptions, resource groups, and deployed services.\nReview everything. Copilot generated excellent Azure Resource Graph queries, but I caught a few edge cases like queries that didn\u0026rsquo;t handle the pagination token for large result sets. The human review step is non-negotiable.\nIterate with specificity. When Copilot\u0026rsquo;s first pass wasn\u0026rsquo;t quite right, specific feedback worked much better than vague feedback. \u0026ldquo;The cost trend chart should use a stacked area chart instead of a line chart, grouped by service category\u0026rdquo; worked much better than \u0026ldquo;make the chart better.\u0026rdquo;\nThe Result\nIn one weekend, I had a working web application with eleven interconnected modules, a configurable maturity scoring engine, multi-subscription support, and dashboards that would have taken weeks to build manually. The codebase was consistent, well-structured, and followed the conventions I specified.\nIs it production-ready? Yes, it has validation, authentication and proper error handling. It\u0026rsquo;s exactly what I needed, built in a fraction of the time.\nGitHub Copilot CLI didn\u0026rsquo;t just help me write code faster. It helped me think through the architecture, plan the implementation, and execute systematically. For anyone building Azure tooling, governance dashboards, or FinOps solutions, I can\u0026rsquo;t recommend it enough.\nResources\nGitHub Copilot CLI: github.com/features/copilot/cli Copilot CLI Repository: github.com/github/copilot-cli Azure MCP Server: learn.microsoft.com Copilot CLI Best Practices: docs.github.com Awesome Copilot (Custom Agents \u0026amp; Skills): github.com/github/awesome-copilot\n","date":"19 February 2026","externalUrl":null,"permalink":"/2026/02/19/how-i-used-github-copilot-cli-to-build-an-azure-governance-web-app-from-zero-to-maturity-score-in-one-weekend/","section":"Posts","summary":"","title":"How I Used GitHub Copilot CLI to Build an Azure Governance Web App: From Zero to Maturity Score in One Weekend","type":"posts"},{"content":" Ship faster # As developers, we\u0026rsquo;re always looking for ways to ship faster without sacrificing quality. The constant pressure to deliver new features while maintaining clean, maintainable code can feel like an impossible balance. But what if I told you that the latest wave of AI tooling is actually living up to the hype?\nEnter GitHub Copilot CLI, a game-changer that\u0026rsquo;s fundamentally changing how I approach building applications on Azure. This isn\u0026rsquo;t just autocomplete on steroids. It\u0026rsquo;s a genuine productivity multiplier that\u0026rsquo;s helping teams ship features at a pace we couldn\u0026rsquo;t have imagined just a year ago, maybe even a few months ago.\nWhat Makes Copilot CLI Different # You\u0026rsquo;re probably familiar with GitHub Copilot in your IDE, suggesting code as you type. Copilot CLI takes a different approach. It lives in your terminal, where you spend a huge chunk of your day running commands, deploying code, and managing infrastructure.\nThe beauty of Copilot CLI is its understanding of context. It knows you\u0026rsquo;re working in Azure. It understands your project structure. It can suggest complete command sequences that would normally require you to dig through documentation.\nReal-World Impact on Development Speed # Let me give you a concrete example. Last week, I needed to set up a new Azure Function with blob storage triggers, configure monitoring, and deploy it to a staging environment. Traditionally, this would involve:\nLooking up the Azure CLI syntax for creating function apps Remembering the right flags for runtime and region Setting up storage account connections Configuring Application Insights Writing deployment scripts Testing everything locally first With Copilot CLI, I described what I needed in plain English. It generated the exact command sequence, including error handling and best practices I might have overlooked. What would have taken an hour or two took maybe 15 minutes.\nNatural Language to Complex Commands # The real power comes from turning intent into action. Instead of memorizing complex Azure CLI syntax, you can ask questions like:\n\u0026ldquo;Create a container app with autoscaling and connect it to my existing PostgreSQL database\u0026rdquo;\n\u0026ldquo;Deploy this app to three regions with traffic manager for load balancing\u0026rdquo;\n\u0026ldquo;Set up monitoring alerts for when my function execution time exceeds 5 seconds\u0026rdquo;\nCopilot CLI translates these requests into proper Azure CLI commands, complete with the right parameters and flags. It\u0026rsquo;s like having a senior Azure architect sitting next to you.\nFaster Iteration Cycles # Where this really shines is during rapid prototyping and feature development. When you\u0026rsquo;re exploring a new Azure service or trying to implement a feature quickly, the feedback loop is everything.\nInstead of context-switching between your editor, browser, and documentation, you stay in the flow. Need to check your current resource groups? Ask. Want to deploy a quick test? Describe it. Need to roll back a change? Just say so.\nThis compressed feedback loop means you can iterate on features multiple times in the span it would have previously taken to do it once.\nBeyond Simple Commands # Copilot CLI isn\u0026rsquo;t just about generating single commands. It helps with entire workflows. Setting up CI/CD pipelines, configuring networking rules, managing secrets and certificates - these multi-step processes become conversations rather than chores.\nI\u0026rsquo;ve seen team members who were less familiar with Azure infrastructure become significantly more productive. The learning curve flattens because they\u0026rsquo;re learning by doing, with AI assistance that explains what each command does and why.\nIntegration with Your Development Workflow # What I appreciate most is how Copilot CLI fits into existing workflows without forcing you to change how you work. It enhances your terminal experience rather than replacing it. You can review suggested commands before running them, modify them as needed, and build up your own understanding over time.\nFor Azure-specific development, this means you can focus on solving business problems rather than fighting with infrastructure syntax. Your cognitive load drops dramatically when you\u0026rsquo;re not constantly switching between writing application code and remembering the exact flags for Azure CLI commands.\nThe Compound Effect # Here\u0026rsquo;s what I\u0026rsquo;ve noticed after a few days of using Copilot CLI daily: the time savings compound. Every command you don\u0026rsquo;t have to look up, every deployment script you don\u0026rsquo;t have to debug, every configuration you get right the first time - it all adds up.\nFeatures that used to take a sprint now take days. Proof of concepts that took days now take hours. The velocity increase isn\u0026rsquo;t linear, it\u0026rsquo;s exponential.\nGetting Started # If you\u0026rsquo;re building on Azure and haven\u0026rsquo;t tried Copilot CLI yet, I\u0026rsquo;d strongly encourage giving it a shot. The setup is straightforward, and the productivity gains start immediately. You don\u0026rsquo;t need to be an AI expert or change your entire workflow.\nStart with simple commands and gradually build up to more complex operations. Let it suggest, review what it generates, and learn from the patterns. Before long, you\u0026rsquo;ll wonder how you ever managed without it.\nThe Future of Development # This feels like a glimpse into where software development is heading. We\u0026rsquo;re moving from memorizing syntax to expressing intent. From fighting tools to collaborating with them. From spending time on mechanical tasks to focusing on creative problem-solving.\nFor those of us building on Azure, Copilot CLI represents a significant step forward in how quickly we can move from idea to deployed feature. And in today\u0026rsquo;s competitive landscape, that speed matters more than ever.\nThe tools are here. The technology works. The only question is: how much faster could your team ship if you started using them today?\nReady to get started - https://github.com/features/copilot/cli\n.\n","date":"14 February 2026","externalUrl":null,"permalink":"/2026/02/14/shipping-features-faster-with-copilot-cli/","section":"Posts","summary":"","title":"Shipping Features Faster with Copilot CLI","type":"posts"},{"content":"","date":"14 February 2026","externalUrl":null,"permalink":"/categories/uncategorized/","section":"Categories","summary":"","title":"Uncategorized","type":"categories"},{"content":"","date":"31 December 2025","externalUrl":null,"permalink":"/tags/azure/","section":"Tags","summary":"","title":"Azure","type":"tags"},{"content":" Stuff I learned from Ignite 2025 # Azure Web Apps (part of Azure App Service) remains one of the most effective platforms for hosting production AI-enabled applications on Azure. With first-class support for managed identities, private networking, and native integration with Azure AI services, it provides a strong balance between operational simplicity and enterprise-grade security.\nThis article walks through a reference architecture for deploying AI applications to Azure Web Apps, grounded in current guidance and capabilities as of Microsoft Ignite 2025. The focus is on real-world concerns: identity, networking, configuration, and infrastructure as code.\nWhy Azure Web Apps for AI Workloads # Azure Web Apps is well-suited for AI-powered APIs and frontends that act as orchestrators rather than model hosts. In this pattern:\nModels are hosted in managed services such as Azure OpenAI Service The Web App handles request validation, prompt construction, tool calling, and post-processing Stateful data is stored externally (e.g., databases or caches) Key benefits include:\nBuilt-in autoscaling and OS patching Native support for managed identities Tight integration with Azure networking and security controls Straightforward CI/CD and infrastructure-as-code support Reference Architecture Overview # Conceptual architecture showing Azure Web App securely accessing Azure OpenAI via private endpoints.\nAt a high level, the architecture looks like this:\nClient calls the AI application hosted on Azure Web Apps Azure Web App authenticates using a managed identity Requests are sent to Azure OpenAI Service over a private endpoint Secrets and configuration are resolved from Azure Key Vault Observability data flows to Azure Monitor and Application Insights This design avoids API keys in code, minimizes public exposure, and supports enterprise networking requirements.\nApplication Design Considerations for AI Apps # Stateless by Default # Azure Web Apps scale horizontally. Your AI application should:\nTreat each request independently Store conversation state externally (e.g., Redis or Cosmos DB) Avoid in-memory session affinity for chat history This aligns naturally with AI inference patterns, where each request sends the full prompt or context.\nLatency and Token Costs # When calling large language models:\nBatch or compress prompts where possible Avoid unnecessary system messages Cache deterministic responses when feasible These optimizations are application-level but directly affect infrastructure cost and scale behavior.\nIdentity and Security with Managed Identities # One of the most important design decisions is how the Web App authenticates to AI services.\nAzure Web Apps support system-assigned managed identities, which should be preferred over API keys.\nBenefits:\nNo secrets in configuration Automatic credential rotation Centralized access control via Azure RBAC For example, the Web App’s managed identity can be granted the Cognitive Services OpenAI User role on the Azure OpenAI resource.\nNetworking: Public vs Private Access # For development or low-risk workloads, public endpoints may be acceptable. For production and regulated environments, private networking is strongly recommended.\nPrivate endpoint architecture eliminating public exposure of AI services.\nKey components:\nVNet-integrated Azure Web App Private Endpoint for Azure OpenAI Service Private DNS zone resolution This ensures that AI traffic never traverses the public internet.\nSecure Configuration with Azure Key Vault # Application configuration typically includes:\nModel deployment names Token limits Feature flags Non-secret operational settings Secrets (if any remain) should live in Azure Key Vault, accessed using the Web App’s managed identity. Azure Web Apps natively support Key Vault references in app settings, eliminating the need for runtime SDK calls in many cases.\nInfrastructure as Code: Bicep Example # Below is a simplified Bicep example deploying:\nAn Azure Web App A system-assigned managed identity Secure app settings resource appService \u0026lsquo;Microsoft.Web/sites@2023-01-01\u0026rsquo; = { name: \u0026lsquo;ai-webapp-prod\u0026rsquo; location: resourceGroup().location identity: { type: \u0026lsquo;SystemAssigned\u0026rsquo; } properties: { serverFarmId: appServicePlan.id siteConfig: { appSettings: [ { name: \u0026lsquo;AZURE_OPENAI_ENDPOINT\u0026rsquo; value: \u0026lsquo;https://my-openai-resource.openai.azure.com/\u0026rsquo; } { name: \u0026lsquo;APPLICATIONINSIGHTS_CONNECTION_STRING\u0026rsquo; value: appInsights.properties.ConnectionString } ] } } }\nThis approach keeps infrastructure declarative and auditable, while relying on Azure-native identity instead of secrets.\nTerraform vs Bicep for AI Web Apps # AspectBicepTerraformAzure-native supportExcellentVery goodMulti-cloudNoYesLearning curveLower for Azure teamsHigherAzure feature parityImmediateSometimes delayed\nFor Azure-only AI workloads, Bicep offers tighter alignment with new App Service and Azure AI features. Terraform remains valuable in multi-cloud or heavily standardized environments.\nObservability and Monitoring # AI applications require more than standard HTTP metrics. At minimum, you should capture:\nRequest latency (end-to-end) Token usage (where available) Model error rates Throttling or quota-related failures Azure Web Apps integrates natively with Application Insights, enabling correlation between HTTP requests and outbound AI calls when instrumented correctly.\nDeployment Checklist # Azure Web App deployed with managed identity Azure OpenAI access granted via RBAC Private endpoints enabled for production Secrets removed from code and configuration Application Insights enabled and validated Prompt and token usage reviewed for cost efficiency Further Reading # Azure Web Apps overview – Microsoft Learn Azure OpenAI Service security and networking Managed identities for Azure resources Private endpoints and App Service VNet integration Infrastructure as Code with Bicep Deploying AI applications to Azure Web Apps is less about model hosting and more about secure orchestration. By combining managed identities, private networking, and infrastructure as code, you can build AI-powered systems that are scalable, auditable, and production-ready without unnecessary complexity.\nI hope you found this article useful.\n","date":"31 December 2025","externalUrl":null,"permalink":"/2025/12/31/deploying-ai-applications-to-azure-web-apps-a-practical-architecture-guide/","section":"Posts","summary":"","title":"Deploying AI Applications to Azure Web Apps: A Practical Architecture Guide","type":"posts"},{"content":"","date":"31 December 2025","externalUrl":null,"permalink":"/categories/ignite/","section":"Categories","summary":"","title":"Ignite","type":"categories"},{"content":"","date":"31 December 2025","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"Microsoft Ignite 2025 reaffirmed that AI is now a first-class development model across the Azure platform, not just an optional add-on. Among the many announcements at Ignite, updates to Azure App Service (Web Apps) and the broader Azure AI ecosystem directly affect how developers build intelligent, cloud-native applications — including web apps augmented with AI capabilities, semantic search, and agentic workflows.\nThis article walks through:\nKey App Service / Web Apps announcements The AI platform enhancements that Web Apps can leverage Architectural patterns for integrating AI into web workloads Infrastructure automation with Terraform and secure deployment patterns What’s New in Azure App Service at Ignite 2025 # At Ignite 2025, the Azure App Service team announced a set of updates focused on modernization, developer productivity, and AI integration readiness:\n1. Managed Instance on Azure App Service (Public Preview) # A major new capability — Managed Instance on Azure App Service — entered public preview. It is designed to simplify migration of legacy web applications (especially classic ASP.NET and .NET apps with Windows dependencies) to a managed PaaS runtime with minimal code changes.\nKey benefits:\nRun legacy Windows web apps with Hyper-V nested virtualization. Use configuration and installation scripts for dependencies rather than rewriting code. Maintain automatic OS and .NET patching and updates. Direct RDP access to instances for troubleshooting in complex migration scenarios. This matters for AI because modernization often precedes adding AI-driven features — a classic app first needs to run reliably on App Service before layering in services like semantic search, chat UI APIs, or automated content enrichment workflows.\n2. Enhanced Runtime and Language Support # Alongside the Managed Instance preview, App Service continues to expand support for modern runtimes, frameworks, and developer experiences. While not AI-specific, these enhancements make it easier to host intelligent applications built with:\n.NET 8/9 and ASP.NET Core Node.js 20+ Java 25 and beyond Containers on App Service (Linux) with improved tooling These runtimes interoperate cleanly with Azure AI APIs and SDKs. For example, a Node.js web app can call Azure AI Search or an LLM API directly via SDK or REST.\nAzure AI Platform Enhancements from Ignite 2025 # Ignite 2025 made clear that the foundation for AI-driven web apps is not just the compute layer, but platform services that encapsulate semantic understanding, retrieval-augmented generation (RAG), and agentic workflows.\n1. Microsoft Foundry — Unified AI Agent Platform # At Ignite, Azure AI Foundry was rebranded and enhanced as “Microsoft Foundry”, a unified platform for building, deploying, and governing enterprise-grade AI agents across workloads. Foundry now supports:\nMulti-agent orchestration Open standards for models (including Anthropic Claude and OpenAI models) Seamless integration with enterprise data and APIs Foundry is not App Service, but it is the AI backbone you are likely to call from web apps for:\nConversational AI interfaces Workflow automation (e.g., ticket triaging, contextual assistants) Long-running agentic tasks tied to user sessions or backend triggers More on Foundry’s updates are in the Microsoft documentation. TECHCOMMUNITY.MICROSOFT.COM+1\n2. Semantic Retrieval and AI Search # Azure AI Search (formerly Cognitive Search) continues to evolve with RAG-friendly patterns that integrate vector search, semantic ranking, and LLMs. This makes it much easier to add “chat with your data” experiences into web UIs.\nAzure AI Search documentation is here: 🔗 https://learn.microsoft.com/azure/search/what-is-azure-ai-search\nTypical patterns for Web Apps include:\nDocument ingestion pipelines (Azure Blob, OneLake, Cosmos DB) Indexer + semantic search for natural language queries LLM integration to summarize and respond conversationally Patterns for Integrating AI into Azure Web Apps # Below are architectural patterns you might adopt when extending web apps with AI capabilities following Ignite 2025.\nPattern 1 — RAG-Driven Conversational UI # Web App Frontend on App Service (e.g., React, Blazor). API Layer in Azure Functions or .NET backend to handle requests. Azure AI Search + vector store for semantic retrieval. OpenAI or Foundry Models for response generation. Flow:\nUser asks a question in web UI. Backend calls Azure AI Search to retrieve relevant documents. Retrieved context is sent to a generative model. Model output is returned to the UI. var client = new Azure.AI.OpenAI.OpenAIClient(new Uri(endpoint), new DefaultAzureCredential()); var response = await client.GetCompletionsAsync( deploymentOrModelName: \u0026ldquo;gpt-4.1-enterprise\u0026rdquo;, new Azure.AI.OpenAI.CompletionsOptions { Prompts = { \u0026ldquo;Summarize these docs for a tech user: \u0026hellip;\u0026rdquo; } });\nPattern 2 — Agentic Backend Workflows # If your web app needs to trigger longer-running workflows (e.g., order fulfillment automation, customer support routing), you can:\nExpose an HTTP trigger from your Web App or Azure Function. Hand off processing to a Foundry agent (via API) that orchestrates multi-step logic. Use Queues (Service Bus, Storage Queues) for reliable message passing. This pattern decouples UI from backend processing, letting agents execute tasks with traceability and governance — critical for compliance.\nInfrastructure as Code — Terraform \u0026amp; Bicep # Automation and repeatability are essential. Below is a sample Terraform snippet to provision an App Service with a Managed Identity (for secure calls to Azure AI).\nNotes:\nprovider \u0026ldquo;azurerm\u0026rdquo; { features {} }\nresource \u0026ldquo;azurerm_resource_group\u0026rdquo; \u0026ldquo;rg\u0026rdquo; { name = \u0026ldquo;rg-webapp-ai\u0026rdquo; location = \u0026ldquo;WestEurope\u0026rdquo; }\nresource \u0026ldquo;azurerm_app_service_plan\u0026rdquo; \u0026ldquo;plan\u0026rdquo; { name = \u0026ldquo;asp-webai\u0026rdquo; resource_group_name = azurerm_resource_group.rg.name sku { tier = \u0026ldquo;PremiumV4\u0026rdquo; size = \u0026ldquo;P1v4\u0026rdquo; } }\nresource \u0026ldquo;azurerm_app_service\u0026rdquo; \u0026ldquo;webapp\u0026rdquo; { name = \u0026ldquo;webapp-ai\u0026rdquo; resource_group_name = azurerm_resource_group.rg.name location = azurerm_resource_group.rg.location app_service_plan_id = azurerm_app_service_plan.plan.id\nidentity { type = \u0026ldquo;SystemAssigned\u0026rdquo; }\nsite_config { dotnet_framework_version = \u0026ldquo;v6.0\u0026rdquo; }\napp_settings = { \u0026ldquo;WEBSITE_RUN_FROM_PACKAGE\u0026rdquo; = \u0026ldquo;1\u0026rdquo; \u0026ldquo;AZURE_OPENAI_ENDPOINT\u0026rdquo; = var.openai_endpoint \u0026ldquo;AZURE_OPENAI_MODEL\u0026rdquo; = var.openai_model } }\nUse managed identities to authenticate to Azure AI services instead of static keys. You can extend this snippet with Private Endpoints, Key Vault references, and app settings for AI service integration. Terraform vs Bicep vs ARM:\nTerraform excels with multi-cloud teams and state management. Bicep/ARM provide first-class Azure tooling and tighter integration with Azure RBAC. Choose based on team skills and governance requirements. Security, Governance, and Identity # Ignite announcements highlighted enterprise-grade security for AI agents and services, including identity integration and access policies. For Web Apps calling AI APIs:\nUse Managed Identity and Azure RBAC instead of connection strings. Store secrets (if needed) in Azure Key Vault with MSI access. Secure backend APIs with Azure AD tokens. Summary # Ignite 2025 reinforced that AI is deeply woven into the future of Azure compute and application platforms:\nAzure App Service continues to modernize with managed instances, enhanced runtimes, and improved migration tooling. The Azure AI ecosystem — especially Microsoft Foundry and Azure AI Search — enables developers to add semantic, conversational, and agentic capabilities to web apps. Architectural patterns (RAG, agent workflows) and secure automation (Terraform, managed identity) help deliver production-grade intelligent applications. As you plan your next wave of web apps, consider AI as a core design axis, not an afterthought.\nFurther Reading # Azure App Service documentation — https://learn.microsoft.com/azure/app-service/ Azure AI services overview — https://learn.microsoft.com/azure/ai-services/what-are-ai-services Azure AI Search documentation — https://learn.microsoft.com/azure/search/what-is-azure-ai-search Microsoft Foundry docs — https://learn.microsoft.com/azure/ai-foundry/overview ","date":"30 December 2025","externalUrl":null,"permalink":"/2025/12/30/azure-web-apps-and-ai-whats-new-from-microsoft-ignite-2025/","section":"Posts","summary":"","title":"Azure Web Apps and AI — What’s New from Microsoft Ignite 2025","type":"posts"},{"content":"This is my entry for this year\u0026rsquo;s Azure Back To School. Massive shout-out to Dwayne Natwick for organising this every year!\nIf you’re building on Azure, integrating GitHub Copilot into your workflow can save time, reduce friction, and help with infrastructure, deployment, and debugging, not just writing business logic.\nBelow is an explanation of how to use it, what works well, and what to be aware of.\nWhat \u0026ldquo;Copilot + Azure\u0026rdquo; means today\nHere’s how the two worlds overlap currently:\nGitHub Copilot for Azure: a VS Code extension that lets you ask about Azure, manage resources, deploy, and diagnose, all from the Copilot chat interface.\nCopilot + Azure DevOps / Azure Repos: You can use Copilot with Azure Repos for suggestions, commit messages, and PR descriptions.\nAgentic DevOps vision: Copilot is evolving into autonomous “agents” that can perform multi-step tasks, such as refactoring, testing, and fixing bugs. Azure pipelines, boards, and resource operations may tie into that.\nInner sourcing/knowledge reuse via MCP server: You can integrate Azure DevOps/Azure MCP server with Copilot, allowing it to suggest content from your organisation’s own modules or documentation.\nAzure Boards integration: you can assign work items from Azure Boards to a Copilot coding agent, and track progress.\nSo it’s not just “autocomplete in VS Code + Azure SDK”, Copilot is pushing into infrastructure, operations, and agentic automation.\nHow to get started (practical steps)\nInstall Copilot and the Azure extension In VS Code, get the GitHub Copilot for Azure extension.\nYou need a Copilot license (Pro, Business, etc.) Use @azure prompts in Copilot Chat\nOnce the extension is active, you can prefix prompts with @azure to query Azure resource info, diagnose, or even do operations. Examples:\n@azure Deploy an Azure Function HTTP trigger with .NET 8 @azure What are the cost tiers for Azure SQL in West Europe? @azure Diagnose why my webapp is showing 500 errors\nDeploy from within the editor Copilot for Azure can suggest CLI commands, resource templates, or deployment steps without you switching to the Azure Portal.\nUse Copilot in code + infra files\nWhen you edit ARM templates, Bicep, Terraform alongside app code, Copilot can help complete resource definitions, parameter scaffolding, and provide relevant snippets. Explore agentic features\nTry Copilot agents for multi-file changes, code refactors, or cloud migration tasks. (Feature availability depends on your subscription and preview access.) Enable MCP / context servers\nFor tighter integration (e.g. your organization’s code modules, Azure DevOps context), you can configure MCP (Model Context Protocol) servers so Copilot has richer context Benefits you’ll see\nFaster iteration: fewer trips to Azure portal or docs. Context-aware suggestions: Copilot knows your Azure setup or resource naming. Multi-step automation: not just code, but “deploy, test, monitor” flows. Consistency: reuse corporate standards or templates via inner sourcing. Better dev-ops synergy: bridging code and cloud operations in one interface. Example scenario Let’s say you’re building a serverless API on Azure Functions + Cosmos DB.\n@azure Create an Azure Function project with HTTP trigger, .NET 8\nCopilot responds with scaffold commands, project template.\n@azure Provision a Cosmos DB instance with RU/s 400, region North Europe\nNext up try\n@azure Deploy this function and connect to Cosmos DB\nIt issues az commands or points you to CI/CD YAML.\nIf you see any errors after deployment:\n@azure Diagnose 500 error in function logs\nIt helps inspect logs, points you to misconfigurations or missing settings.\nMeanwhile, inside code files, Copilot suggests resource names, configuration keys, and helper snippets.\nFuture direction \u0026amp; what to watch\nMore tasks handed over to the coding agent (not just suggestions). Better integration into Azure services (monitoring, cost, policies). Richer context via MCP so that Copilot is aware of your entire org’s patterns. Tighter link between Azure Boards / Pipelines and Copilot agents. (You already can assign work items to Copilot. Stronger guardrails: security analysis baked into generated infra code. Summary\nI use this GitHub Copilot on a daily basis and I recommend you at least take a look at it, if not use it daily too!\n","date":"27 September 2025","externalUrl":null,"permalink":"/2025/09/27/using-github-copilot-with-azure/","section":"Posts","summary":"","title":"Using GitHub CoPilot with Azure","type":"posts"},{"content":"This blog post is my entry for this year\u0026rsquo;s wedoAI 2025 - shout out to Joe Carlyle and the organisers for organising this event every year - I really enjoy these community events, and contributing to these events is something I love to do.\nIf, like me, you write code of any kind and you are interested in learning about using AI to help you with this then this blog post will help you!\nLately, I have been playing around with GitHub Copilot Chat, which is an extension I use daily within Visual Studio Code. In this post, I will briefly mention how to set up Beast Mode in VS Code, practical tips and some real-world examples.\nTo get this adde to Visual Studio Code, fist make sure you have the latest version.\nSelect the Help menu option and then Check for Updates Then click Install Update Now that we have the latest version, now go ahead and click on the left hand menu and select the extension icon which is the icon in white on the left below, and install GitHub Copilot Chat.\nNow that we have GitHub Copilot installed we can continue. Now, let\u0026rsquo;s first introduce Beast Mode.\nSetting Up VS Code for Beast Mode\nBeast Mode is a custom chat mode which you can add into Visual Studio Code and is written by Burke Holland and you can read about it and install using his instructions -https://burkeholland.github.io/posts/beast-mode-3-1/\nBeast Mode is all about maximizing VS Code\u0026rsquo;s features, extensions, and customizations to create an ultra-efficient learning environment for developers, students, or hobbyists.\nNow I will assume that you have done some reading on this and added it to Visual Studio Code.\nSo what is a custom chat mode?, well I am glad you asked. To learn all about VS Code custom chat modes please check out the article - https://code.visualstudio.com/docs/copilot/chat/chat-modes\nI would summarize custom chat modes as think of a subject you would like some help with and then imagine being able to chat to AI that can help you learn. I stopped short by saying help you learn, but what can you learn, well it depends on what you are insterested in learning.\nPractical Examples and Use Cases\nAt work I write a lot of infrastructure as code and I use Bicep for this, however you can use whatever language you would like for whatever purpose you need.\nLet\u0026rsquo;s try some examples now, to begin with lets download an example architecture diagram from the Microsoft Azure Architecture website - https://learn.microsoft.com/en-us/azure/architecture/browse/\nLet\u0026rsquo;s choose the Basic Web Application - https://learn.microsoft.com/en-us/azure/architecture/web-apps/app-service/architectures/basic-web-app\nI grabbed the image of this architecture and saved it to an emtpy folder which I have now opened up inside VS Code as seen below:\nNow let us use the GitHub Copilot Chat mode feature making use of Beast Mode and lets ask it about this daigram to start off with.\nI\u0026rsquo;ve opened up Chat mode and selected Beast Mode under Agent and asked it the following:\nTell me about this diagram in great detail. The result can be seen below:\nAs you can see in the picture above, you can use Beast Mode to explain the diagram, which in itself is very nice. Now, let\u0026rsquo;s ask the Beast Mode agent something else, let\u0026rsquo;s ask it to generate the Bicep for the Azure resources and make use of the Azure Verified Modules project which is on GitHub.\nAzure Verified Modules\nAzure Verified Modules (AVM) is an initiative to consolidate and set the standards for what a good Infrastructure-as-Code module looks like.Modules will then align to these standards, across languages (Bicep, Terraform etc.) and will then be classified as AVMs and available from their respective language specific registries.AVM is a common code base, a toolkit for our Customers, our Partners, and Microsoft. It’s an official, Microsoft driven initiative, with a devolved ownership approach to develop modules, leveraging internal \u0026amp; external communities.Azure Verified Modules enable and accelerate consistent solution development and delivery of cloud-native or migrated applications and their supporting infrastructure by codifying Microsoft guidance (WAF), with best practice configurations.\nOk, let\u0026rsquo;s see what prompt I use for this and see how it goes\n**Prompt **- \u0026ldquo;Create a main.bicep file to deploy the Azure resources, but also create folders for each Azure resource and give the folders meaningful names. Also, use Azure Verified Modules and use a module and not a reference for each module - also make sure to use the latest version of each Azure module and add documentation to the code.\u0026rdquo;\nPlease note that this is an example prompt and that you may need to tweek it as you see fit, it wont get it right first time around but it will help you if you take some time to learn better prompts and get used to using it.\nLet\u0026rsquo;s now try Beast Mode and write some C# code.\nPrompt - \u0026ldquo;Write me an MVC Web Application using C# and the latest version of .net to display the latest azure updates in the last 2 months.\u0026rdquo;\nIf you run into any issues like unsure how to build the code, restore nuget packages or run it just ask the Beast Mode Agent, examples are like so:-\n\u0026ldquo;show me how to build and run the application\u0026rdquo; \u0026ldquo;help me fix any buid errrors\u0026rdquo; \u0026ldquo;help me add tests to the code\u0026rdquo;\nAs you can see the Beast Mode Chat mode agent can help us with all sorts of issues. Incase you were wondering here is what it produced in lesst than 2 minutes without me writing a single line of code.\nOk, so its not the best looking UI you have ever seen, so let\u0026rsquo;s ask the agent to style it using a popular frontend framework called Bootstrap.\n**Prompt **- \u0026ldquo;Style the output using Bootstrap to make it look a lot nicer visually.\u0026rdquo;\nIn the next example, let\u0026rsquo;s try to learn PowerShell from scratch, can Beast Mode help us with this?\nPrompt - \u0026ldquo;Create a demo.ps1 file and help me learn how PowerShell as an absolute beginner in detail.\u0026rdquo;\nNow Beast Mode goes off and creates a demo.ps1 file and explains the steps it will go through to achieve its goal.\nFirst of all, it\u0026rsquo;s really nice to see the list of tasks the agent is going to perform. At time the agent will even go back and update this nice list of steps.\nOnce it had completed its tasks it asked me if I wanted some more advanced samples, so I said yes, please, then give me deeper explanations of the examples.\nNow you could say ok, but how am I learning this by having AI do the work for me? - great question and you would be right to ask this. I would say use it to read the code, ask questions, prompt it for help if you get stuck, ask it to explain the code, write some code yourself and ask it to verify if it\u0026rsquo;s correct or not.\nWe have reached a point where what you can learn with AI is up to you; you have to learn to prompt it by asking questions, the more you use the agents the better your prompts will be.\nI have written full applications using Visual Studio Code, GitHub Copilot Chat mode with the Beast Mode custom chat modes, and I think it\u0026rsquo;s pretty impressive.\nBonus Content\nIn this article, I showed you how to set up and use Beast Mode, but what if I said that you also have a mentor? You can create a mentor agent that will ask you questions, and you can ask them back, sound cool? - Definitely try this out as it\u0026rsquo;s super sweet to play around with.\nhttps://github.com/PlagueHO/github-copilot-assets-library/blob/main/chatmodes/mentor.chatmode.md\nThe following is a list of invaluable chat mode agents. If you wish to learn more, then please check them out and shout out to the creator of these, Daniel Scott-Raynsford - https://github.com/PlagueHO/github-copilot-assets-library\nSummary In summary, you can use Beast Mode for a vast number of things, such as\nwrite code fix code explain / document code write full applications ask it to help with build errors / compile errors use it as a mentor to learn and many many more things I hope this helps you. Please share in the comments how you are using AI!. Let me know in the comments if you\u0026rsquo;re using AI and how you\u0026rsquo;re using it!\n","date":"25 August 2025","externalUrl":null,"permalink":"/2025/08/25/using-vs-code-beast-mode-to-learn/","section":"Posts","summary":"","title":"Using VS Code Beast Mode to learn","type":"posts"},{"content":"This years Microsoft Build was full of new releases, new services, new ways of doing things, and yep, lots of AI. The following are just some of the areas that grabbed my interest whilst attending the conference, due to working at it, I havent had time to try the demos, check out some of the announcements and get hands on with the tech that has newly been released, but I will in the coming weeks.\nIf like me you havent managed to catchup on the announcements then you can read the book of news for Build 2025.\nIf you are looking to upgrade your existing .net Framework application to .net Core then checkout thiese links:-\nDocs: https://learn.microsoft.com/en-us/dotnet/core/porting/upgrade-assistant-overview Upgrade Extension: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.upgradeassistant\nIf you would like co-pilot to help you upgrade your version of a .net Core application then here are some very useful links.\nUpgrading a .NET 6 repo to .NET 9 with GitHub Copilot - Upgrading a .NET 6 repo to .NET 9 with GitHub Copilot https://devblogs.microsoft.com/dotnet/github-copilot-upgrade-dotnet/ - Accelerate Your .NET Upgrades with GitHub Copilot https://learn.microsoft.com/en-us/dotnet/core/porting/github-copilot-app-modernization-overview - What is GitHub Copilot app modernization - upgrade for .NET? http://aka.ms/ghcp-appmod/dotnet-upgrade-vsix - GitHub Copilot app modernization - upgrade for .NET https://learn.microsoft.com/en-us/dotnet/core/porting/github-copilot-app-modernization-faq - GitHub Copilot app modernization - upgrade for .NET FAQ https://dotnet.microsoft.com/en-us/platform/upgrade - Agent mode in Visual Studio makes .NET upgrades easier than ever There is also some help available if you are just starting out and would like help deploying your application to Azure - Quickstart: Deploy your application to Azure with agent mode in GitHub Copilot for Azure\nIf you are interested in Hosting remote MCP Server\u0026rsquo;s in Azure App Service then this articlae has you covered - https://techcommunity.microsoft.com/blog/appsonazureblog/host-remote-mcp-servers-in-azure-app-service/4405082\nTwo of my favourite annoucements recently were the GitHub CoPilot Coding Agent and the new SRE Agent coming soon (you can sign up for this preview now!) and read more about the SRE agent - https://techcommunity.microsoft.com/blog/azurepaasblog/introducing-azure-sre-agent/4414569\nInterested in some AI Labs then look no further than - https://ai.azure.com/labs\nMaybe you like creating videos and now within Azure you can create high-quality visual content with GPT-Image-1 and Sora on Azure OpenAI—tailored for professional use cases - https://github.com/Azure-Samples/visionary-lab\n","date":"2 June 2025","externalUrl":null,"permalink":"/2025/06/02/microsoft-build-my-takeaways-from-this-years-conference/","section":"Posts","summary":"","title":"Microsoft Build: My Takeaways from this years conference","type":"posts"},{"content":"Microsoft Build is the flagship event for developers, showcasing the latest tools, frameworks, and innovations to empower modern software development. Among the highlights in recent years has been the focus on modernizing .NET applications, particularly through the .NET Upgrade Assistant tools. These tools streamline the transition from legacy .NET Framework to modern .NET (formerly .NET Core) and support upgrades between .NET versions. Additionally, the integration of GitHub Copilot in Visual Studio Code (VS Code) has added an AI-powered dimension to the upgrade process, making it smarter and more efficient. In this blog post, I’ll dive into the .NET Upgrade Assistant for migrating from .NET Framework to .NET Core, explore the .NET Core Upgrade Assistant, and highlight how Copilot in VS Code enhances these processes.\nThe Need for .NET Modernization\nThe .NET ecosystem has evolved significantly since the days of .NET Framework. With the introduction of .NET Core (now simply .NET), Microsoft unified its development platform to support cross-platform applications, improved performance, and modern cloud-native architectures. However, many organizations still rely on .NET Framework applications built years ago, which are tied to Windows and lack the scalability and features of modern .NET. Upgrading to .NET 8 or 9 (the latest Long-Term Support and Standard-Term Support versions as of 2025) unlocks benefits like enhanced performance, new APIs, and better cloud integration.\nThe challenge? Migrating legacy applications can be complex, involving changes to project structures, dependencies, and codebases. This is where the .NET Upgrade Assistant comes in, offering automated tools to simplify the process. At Microsoft Build, these tools have been showcased as critical for developers looking to modernize their applications efficiently.\n.NET Upgrade Assistant: From .NET Framework to .NET Core\nThe .NET Upgrade Assistant is a powerful tool designed to help developers migrate .NET Framework applications to modern .NET. Available as both a Visual Studio extension and a command-line interface (CLI) tool, it automates many manual tasks, such as updating project files, converting to SDK-style projects, and addressing code incompatibilities. Let’s break down its key features and how it was highlighted at Microsoft Build.\nKey Features of the .NET Upgrade Assistant\nProject File Conversion: The .NET Upgrade Assistant converts legacy .NET Framework project files to the modern SDK-style format used by .NET Core and beyond. This is a critical step, as the SDK-style format simplifies project configuration and supports cross-platform development. The tool leverages the try-convert utility to automate this process, reducing the need for manual edits. Code Analysis and Fixes: The assistant includes a robust analysis engine that scans your codebase for incompatibilities, such as deprecated APIs or platform-specific dependencies. It generates a detailed report with status icons (e.g., green checkmarks for successful upgrades, yellow warnings for issues needing attention, or red Xs for failures) and logs actions in the Visual Studio Output window. This helps developers prioritize fixes and ensure a smooth migration. Incremental Upgrades: For complex applications, such as ASP.NET web apps, the tool supports a side-by-side incremental upgrade approach. This creates a new .NET project alongside the existing .NET Framework project, allowing developers to migrate endpoints gradually while keeping the application functional. This is particularly useful for large-scale projects where a full rewrite isn’t feasible. NuGet Package Management: The assistant updates NuGet package references to compatible versions for the target .NET version. Recent updates, as announced at Microsoft Build, also support upgrading to Centralized Package Management (CPM), which simplifies dependency management across multiple projects. Extensibility: The tool supports third-party extensions through package and API mappings, allowing vendors to define how their libraries should be upgraded. This ensures compatibility with external dependencies, a common pain point in migrations. Using the .NET Upgrade Assistant in Visual Studio\nTo use the .NET Upgrade Assistant in Visual Studio:\nInstall the Extension: Available from the Visual Studio Marketplace, the extension integrates seamlessly with Visual Studio 2022 (version 17.1 or newer). You can verify installation by checking for an “Upgrade” option when right-clicking a project in Solution Explorer. Run the Upgrade: Right-click your project, select “Upgrade,” and follow the wizard to choose options like in-place upgrades (modifying the original project) or side-by-side upgrades (creating a copy). Select the target framework (e.g., .NET 8.0 or 9.0) and let the tool handle project file updates and code fixes. Review and Test: After the upgrade, review the generated report for any issues. Thorough testing is crucial, as some manual refactoring may be required, especially for ASP.NET to ASP.NET Core migrations. Microsoft Build sessions have emphasized the tool’s ability to reduce migration time by automating repetitive tasks, with real-world examples showing successful upgrades of complex solutions. However, as noted in Build discussions, manual intervention is often needed for edge cases, such as unsupported APIs or third-party dependencies.\n.NET Core Upgrade Assistant: Moving Between .NET Versions\nFor developers already on .NET Core or earlier .NET versions (e.g., .NET 5 or 6), the .NET Upgrade Assistant also supports upgrades to newer versions, such as .NET 8 or 9. This process is generally simpler than migrating from .NET Framework, as the project structure and APIs are more aligned. Key aspects include:\nTarget Framework Updates: The assistant updates the property in project files (e.g., from net6.0 to net9.0). This is often the only change needed for simple projects, as highlighted in Microsoft Build demos. Dependency Resolution: The tool identifies and updates NuGet packages to versions compatible with the target framework, addressing security vulnerabilities or deprecated packages. Code Assessment: Enhanced in 2024, the assistant’s code assessment features scan for potential issues at the source code level, providing a dashboard with issue severity and remediation effort estimates. This was a major focus at Build, showcasing how developers can pinpoint and resolve issues quickly. For example, a Build session demonstrated upgrading a .NET 6 Razor Pages project to .NET 9, where the assistant updated NuGet packages like Microsoft.EntityFrameworkCore from version 6.0 to 9.0 and flagged a test failure for manual review. The process was completed with minimal manual changes, thanks to the tool’s automation.\nGitHub Copilot in VS Code: Enhancing Upgrades\nAt Microsoft Build 2025, a significant highlight was the integration of GitHub Copilot with the .NET Upgrade Assistant, particularly through the “GitHub Copilot app modernization – Upgrade for .NET” extension. While this extension doesn’t yet support direct .NET Framework to .NET migrations, it excels at modernizing .NET Core projects and enhancing the upgrade experience in VS Code.\nHow Copilot Helps\nAI-Powered Guidance: Copilot analyzes your codebase and generates an upgrade plan, suggesting changes like updating target frameworks or modernizing APIs. It uses natural language prompts, allowing you to ask, “Upgrade my solution to .NET 9,” and it responds with a step-by-step plan. Automated Code Changes: Copilot applies transformations automatically, such as updating NuGet packages or refactoring code to use newer APIs. It commits changes to Git at each step, enabling easy rollbacks if needed. Learning from Manual Fixes: When manual intervention is required, Copilot learns from your changes and applies them to similar issues later, reducing repetitive work. This was showcased at Build with a demo upgrading a .NET 6 MVC project, where Copilot adapted to developer fixes in real time. Integration with VS Code: In VS Code, Copilot’s inline suggestions and chat interface make it easy to interact with the upgrade process. For example, you can enable Agent Mode, select the “Upgrade” tool, and let Copilot guide you through the process. Getting Started in VS Code\nTo use Copilot for .NET upgrades in VS Code:\nInstall Extensions: Ensure the GitHub Copilot and C# Dev Kit extensions are installed. A GitHub Copilot subscription is required. Enable Agent Mode: Go to the Copilot Chat window, select “Agent,” and choose the “Upgrade” tool. Start the Upgrade: Use a prompt like “Upgrade my project to .NET 9.” Copilot will analyze the project, apply changes, and provide a report with Git commit hashes and next steps. Build sessions highlighted Copilot’s ability to reduce upgrade time by automating repetitive tasks and providing intelligent suggestions, though some limitations were noted, such as incomplete support for .NET Framework migrations.\nBest Practices and Considerations\nBackup Your Code: Always back up your project before running upgrades, as both the .NET Upgrade Assistant and Copilot make significant changes. Test Thoroughly: Automated tools handle much of the process, but manual testing is essential to catch runtime issues, especially for complex applications. Check Dependencies: Ensure third-party dependencies support the target .NET version. The assistant’s code assessment helps identify these issues early. Leverage Community Feedback: Microsoft Build emphasized community contributions to the .NET Upgrade Assistant’s GitHub repository, where developers can report issues or suggest features. Summary\nMicrosoft Build has positioned the .NET Upgrade Assistant as a cornerstone for modernizing .NET applications, offering robust tools for transitioning from .NET Framework to .NET Core and upgrading between .NET versions. The integration of GitHub Copilot in VS Code adds an AI-driven layer, making upgrades smarter and more interactive. Whether you’re using Visual Studio for a guided experience or VS Code with Copilot’s AI assistance, these tools empower developers to modernize their applications with confidence. As .NET continues to evolve, leveraging these assistants ensures your applications stay performant, secure, and ready for the future.\nFor more details, check out the .NET Upgrade Assistant on the Visual Studio Marketplace or explore Copilot’s capabilities at Microsoft Learn.\n","date":"2 June 2025","externalUrl":null,"permalink":"/2025/06/02/upgrading-your-net-applications-exploring-net-upgrade-assistants-at-microsoft-build/","section":"Posts","summary":"","title":"Upgrading Your .NET Applications: Exploring .NET Upgrade Assistants at Microsoft Build","type":"posts"},{"content":" Introduction # This blog post is part of this years Azure Spring Clean an event which is ran to promote well managed Azure tenants. To achieve this, they have community driven articles that highlight best-practice, lessons learned, and help with some of the more difficult topics of Azure Management.\nAzure Policy is a powerful governance tool that helps organizations enforce compliance across their Azure environments. By automating the deployment of Azure Policies using Bicep and the Azure Verified Modules (AVM) GitHub repository, you can ensure consistent policy enforcement while leveraging modular, reusable infrastructure as code.\nThis guide assumes you already have your environment set up in VS Code, including Bicep tooling and Azure CLI authentication.\nPrerequisites # Before deploying Azure Policies with Bicep, ensure you have:\nVS Code with the Bicep extension installed. Azure CLI installed and authenticated (az login). Bicep CLI installed (az bicep install if needed). Git installed and cloned the Azure Verified Modules (AVM) repository. Appropriate permissions to create and assign policies in Azure. Deploying Policies to Management Groups and Subscriptions # Deploying policies at the management group level is a best practice for organizations that manage multiple subscriptions under a common governance framework. By applying policies at this higher level, you can ensure:\nConsistency: Enforce compliance standards across all subscriptions within the management group without the need for redundant deployments. Efficiency: Reduce operational overhead by managing policies centrally instead of applying them individually to each subscription. Scalability: As new subscriptions are added to the management group, they automatically inherit the assigned policies, ensuring continuous compliance. To apply policies at different scopes, use the following commands:\nDeploying to a Management Group # $location = \u0026lsquo;West Europe\u0026rsquo; $management-group-id = \u0026lsquo;mg-demo\u0026rsquo;\naz deployment mg create \u0026ndash;management-group-id $management-group-id \u0026ndash;location $location \u0026ndash;template-file main.bicep \u0026ndash;parameters @parameters.json \u0026ndash;name MGPolicyDeployment\nDeploying to a Subscription # az deployment sub create \u0026ndash;location eastus \u0026ndash;template-file main.bicep \u0026ndash;parameters @parameters.json \u0026ndash;name SUBPolicyDeployment\nYou can also check in the Azure Portal under Policy -\u0026gt; Assignments\nLets take a look at some example Azure Policies you may want to add to your management groups. In this example I would add them to a file called** deployPolicyMg.bicep**\ntargetScope = \u0026lsquo;managementGroup\u0026rsquo;\n@description(\u0026lsquo;Policy Assignment Management Group - Allowed Locations\u0026rsquo;) module assignAllowedLocationPolicy \u0026lsquo;policyAssignmentMg.bicep\u0026rsquo; = if (deployAllowedLocations) { name: \u0026lsquo;AllowedLocations\u0026rsquo; params: { name: \u0026lsquo;Allowed Locations\u0026rsquo; displayName: \u0026lsquo;Allowed Locations\u0026rsquo; policyDefinitionId: \u0026lsquo;/providers/Microsoft.Authorization/policyDefinitions/e56962a6-4747-49cd-b67b-bf8b01975c4c\u0026rsquo; location: primaryLocation identity: \u0026lsquo;None\u0026rsquo; parameters:{ listOfAllowedLocations: { value: allowedLocations } } } }\n@description(\u0026lsquo;Policy Assignment Management Group - ISO 27001-2013\u0026rsquo;) module assignIso27001Policy \u0026lsquo;policyAssignmentMg.bicep\u0026rsquo; = if (deployIso27001Policy) { name: \u0026lsquo;Iso27001\u0026rsquo; params: { name: \u0026lsquo;ISO 27001-2013\u0026rsquo; displayName: \u0026lsquo;ISO 27001-2013\u0026rsquo; policyDefinitionId: \u0026lsquo;/providers/Microsoft.Authorization/policySetDefinitions/89c6cddc-1c73-4ac1-b19c-54d1a15a42f2\u0026rsquo; location: primaryLocation identity: \u0026lsquo;SystemAssigned\u0026rsquo; roleDefinitionIds: [] } }\n@description(\u0026lsquo;Policy Assignment Management Group - Azure Security Benchmark\u0026rsquo;) module assignAscPolicy \u0026lsquo;policyAssignmentMg.bicep\u0026rsquo; = if (deployAzureSecurityBenchmark) { name: \u0026lsquo;AzureSecurityBenchmark\u0026rsquo; params: { name: \u0026lsquo;Azure Security Benchmark\u0026rsquo; displayName: \u0026lsquo;Azure Security Benchmark\u0026rsquo; policyDefinitionId: \u0026lsquo;/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8\u0026rsquo; location: primaryLocation identity: \u0026lsquo;None\u0026rsquo; roleDefinitionIds: [] } }\nThe above code example makes use of some variables which I add to a .bicepparameters file which would look like this:-\nusing \u0026lsquo;./deployPolicyMg.bicep\u0026rsquo;\nparam deployAllowedLocations = true param deployIso27001Policy = true param deployAzureSecurityBenchmark = true\nLets take a look at some example Azure Policies you may want to add to a subscription. In this example I would add them to a file called** deployPolicySub.bicep**\ntargetScope = \u0026lsquo;subscription\u0026rsquo;\n@description(\u0026lsquo;Assign Policies to Subscription - Require an Owner tag on resource groups\u0026rsquo;) module assignReguireRgOwnerTagPolicy \u0026lsquo;policyAssignmentSub.bicep\u0026rsquo; = if (tagAtSubscriptionLevel \u0026amp;\u0026amp; ownerTagResourceGroupsPolicy) { name: \u0026lsquo;reguireRgOwnerTagPolicy\u0026rsquo; params: { name: \u0026lsquo;Require an Owner tag on resource groups\u0026rsquo; displayName: \u0026lsquo;Require an Owner tag on resource groups\u0026rsquo; policyDefinitionId: \u0026lsquo;/providers/Microsoft.Authorization/policyDefinitions/96670d01-0a4d-4649-9c89-2d3abc0a5025\u0026rsquo; location: primaryLocation identity: \u0026lsquo;None\u0026rsquo; parameters:{ tagName: { value: ownerTagName } } } }\n@description(\u0026lsquo;Assign Policies to Subscription - Require a DeployedBy tag on resource groups\u0026rsquo;) module assignReguireRgDeployedByTagPolicy \u0026lsquo;policyAssignmentSub.bicep\u0026rsquo; = if (tagAtSubscriptionLevel \u0026amp;\u0026amp; deployedByTagResourceGroupsPolicy) { name: \u0026lsquo;reguireRgDeployedByTagPolicy\u0026rsquo; params: { name: \u0026lsquo;Require a DeployedBy tag on resource groups\u0026rsquo; displayName: \u0026lsquo;Require a DeployedBy tag on resource groups\u0026rsquo; policyDefinitionId: \u0026lsquo;/providers/Microsoft.Authorization/policyDefinitions/96670d01-0a4d-4649-9c89-2d3abc0a5025\u0026rsquo; location: primaryLocation identity: \u0026lsquo;None\u0026rsquo; parameters:{ tagName: { value: deployByTagName } } } }\nThe code above is an example of how you could add Azure Policies into a subscription.\nThe above code example makes use of some variables which I add to a .bicepparameters file which would look like this:-\nusing \u0026lsquo;./deployPolicySub.bicep\u0026rsquo;\nparam tagAtSubscriptionLevel = true param ownerTagResourceGroupsPolicy = true param deployedByTagResourceGroupsPolicy = true\nConclusion # By leveraging Azure Bicep and Azure Verified Modules, you can automate and standardize Azure Policy deployment efficiently. Start using AVM today to maintain governance and compliance effortlessly!\n","date":"28 February 2025","externalUrl":null,"permalink":"/2025/02/28/automating-deployment-of-azure-policies-using-bicep/","section":"Posts","summary":"","title":"Automating Deployment of Azure Policies using Bicep","type":"posts"},{"content":"This year\u0026rsquo;s Festive Tech Calendar videos are available on YouTube with the link to the playlist.\nA huge THANK YOU to everyone who took part, has watched the videos and learned and especially those who also donated to this years charity - thanks from all of us at the Festive Tech Calendar team!\nDay 1 # Day 1 - Yippee-ki-yay! Let\u0026rsquo;s Build a Die Hard Quiz Power App using Copilot - YouTube Day 1 - Keynote☃️ Whispers of Winter: A Festive Poem ✨ - YouTube Day 1 - Christmas planning in Loop: A festive collaboration adventure! 🎅 - YouTube Day 2 # Day 2 - Merry Scripting: Automate Festive Windows Wallpapers with PowerShell - YouTube Day 3 # Day 3 - Deploying AVD base infrastructure using DevOps pipelines - YouTube Day 3 - Immersive Tour of Christmas Traditions Around the World - YouTube Day 4 # Day 4 - Building Personalised Cloud Year in Review Videos - YouTube Day 4 - AKS cluster mesh in VWAN environment - YouTube Day 4 - No IDE Required: How CLI Tools Unleashed .NET’s Flexibility - YouTube Day 5 # Day 5 - Magic or Ai - YouTube Day 6 # Day 6 - Festive fun with Microsoft Designer - YouTube Day 7 # Day 7 - How to Ace those Azure Exams! - YouTube Day 7 - How to Improve Your Azure Kubernetes Security Posture with Threat Model - YouTube Day 8 # Day 8 - Jingle Bells and AI Spells: Exploring Semantic Kernel with Azure OpenAI - YouTube Day 9 # Day 9 - Let\u0026rsquo;s create a festive greeting card together - YouTube Day 9 - Microsoft Defender Vulnerability Management - YouTube Day 10 # Day 10 - Microsoft 365 Copilot: 8 Ways to Simplify Your Tasks - YouTube Day 10 - Building a Reliable Deployment Pipeline: Don\u0026rsquo;t Let Tests Break Your Pipeline - YouTube Day 11 # Day 11 - Optimising Customer Experience with Dynamics 365 Contact Center: A Festive Approach - YouTube Day 13 # Day 13 - Securing MS Fabric in the traditional way - YouTube Day 14 # Day 14 - Personalized Event Discovery - YouTube Day 15 # Day 15 - So, you think you can agent? - YouTube Day 16 # Day 16 - Ho-Ho-Hold onto Your Hats! Real-Time Data Magic from Santa’s Sleigh - YouTube Day 16 - Transforming Non-Profit with Power Platform - YouTube Day 17 # Day 17 - How to Make My Christmas Snowier with GitHub Copilot Workspaces - YouTube Day 17 - Ho Ho Whoa! 10 Tips for Data Warehousing in the Cloud - YouTube Day 18 # Day 18 - Agentic Azure AI: Dungeons and Dragons at Christmas - YouTube Day 18 - Securing Tomorrow: Cybersecurity Visions for 2025 and Beyond - YouTube Day 19 # Day 19 - Yule Log-in Safely: Entra ID Security overview - YouTube Day 20 # Day 20 - Copilot Studio: Create a Hotel Reservation Assistant - YouTube Day 20 - The power of multimodal models - YouTube Day 21 # Day 21 - AI-POWERED QUANTUM COMPUTING: THE NEW FRONTIER IN PROBLEM-SOLVING - YouTube Day 21 - Santa’s Workshop: Magic with AKS and Bicep! - YouTube Day 21 - How to create an AI Web App with Azure AI Search Vector Embeddings and Fabric Pipelines - YouTube Day 22 # Day 22 - AI Santa’s Workshop: Custom Rhymes and Cards - YouTube Day 22 - The Influence of Generative AI in Festival Season Predictions for the Retail Industry - YouTube Day 22 - Improve Kubernetes with k8sGPT - YouTube Day 22 - Harnessing Simulation and Evaluation in Azure AI Studio - YouTube Day 23 # Day 23 - Santa’s Festive Guide to Entra ID Security Defaults! - YouTube Day 23 - GitHub Copilot Tutorial Automate Coding, Azure, \u0026amp; Infrastructure in Minutes! - YouTube Day 23 - Building a Cyber Risk Management Action Plan to protect Santa Claus vulnerabilities - YouTube Day 25 # Day 25 - 2024 in Cloud Native - A Festive Retrospective - YouTube Day 25 - The Essentials of Azure Storage: Key Concepts and Best Practices - YouTube Day 25 - Getting your hands dirty with SharePoint\u0026rsquo;s Brand new Centre - YouTube Day 26 # Day 26 - #MVPWrapped, #CommunityWrapped and/or #MCTWrapped - YouTube Day 26 - Developing Custom Copilots with Azure AI Studio, PromptFlow and .NET - YouTube Day 26 - Using Purview eDiscovery to retrieve Teams chats for Incident Response! - YouTube Day 26 - Language Detection in Modern Applications with Azure AI - YouTube Day 27 # Day 27 - The ABC\u0026rsquo;s of Christmas Continuity - YouTube Day 27 - Top 10 Ways to Save Money and Manage Cloud Costs on Microsoft Azure - YouTube Day 27 - Extending the PAW mentality to the cloud - YouTube Day 28 # Day 28 - New Year, New Savings: Mastering Azure NetApp Files Cost Optimisation - YouTube Day 29 # Day 29 - Diagram As Code - YouTube Day 29 - Microsoft Copilot Studio and Power platform - YouTube Day 29 - Want to set up your own tech meetup? Start here! - YouTube Day 30 # Day 30 - Cowrie Honeypot Integration with Microsoft Sentinel - YouTube Day 30 - Aspiring .NET with Azure Open AI - YouTube Day 31 # Day 31 - AI in Every City: embrace the magic of the holidays with Copilot! Day 31 - Securing Cloud Applications: Best Practices for Azure Developers and Architects Day 31 - Build a warp speed time-to-market API with DAB and Azure Container Apps. Day 31 - Query Store Advancements Recording This year\u0026rsquo;s Festive Tech Calendar videos are available on YouTube with the link to the playlist.\n","date":"1 January 2025","externalUrl":null,"permalink":"/2025/01/01/festive-tech-calendar-2024-youtube-videos/","section":"Posts","summary":"","title":"Festive Tech Calendar 2024 YouTube Videos","type":"posts"},{"content":"How I Used GitHub Copilot to Write a PowerShell GUI for Azure Tenant ID Lookup\nWhen tasked with creating a PowerShell GUI to retrieve the Azure Tenant ID for any subscription, I decided to rely entirely on GitHub Copilot. Here’s how I did it—without manually writing a single line of code myself. (repo -\u0026gt; https://github.com/gsuttie/getTenantIdFromAzureSubscriptionId)\nSetting Up # Open Visual Studio Code: My preferred development environment. I enabled GitHub Copilot for code suggestions. Define Goals: A user-friendly GUI for inputting an Azure Subscription ID. Backend logic to retrieve the Tenant ID using Azure PowerShell. Automatically generate inline documentation and a comprehensive README file. Prompting GitHub Copilot # I started by creating a new PowerShell file and inputting the following prompt for Copilot:Create a PowerShell script for a GUI that accepts an Azure Subscription ID, retrieves the Tenant ID using Get-AzSubscription, and displays it. Include inline comments and generate a README. I then tweeked the prompt a few times and the end result can be found in the following GitHub repo Documentation and README # I added another comment to the script:\nGenerate a README file explaining the purpose of this script, its usage, prerequisites, and examples.\nCopilot produced a structured README covering:\nPurpose: Explaining the script’s function. Usage: Step-by-step instructions on running the script. Prerequisites: Details about Azure PowerShell modules and authentication requirements. Example: A sample input and output demonstration. Testing and Tweaking # I tested the script on a sample Azure environment. While functional, the GUI layout needed minor adjustments. I prompted Copilot with:\nImprove the alignment and spacing of GUI elements.\nThis fine-tuned the interface, making it visually cleaner.\nFinal Output # With GitHub Copilot, I:\nBuilt a functional PowerShell GUI to retrieve Azure Tenant IDs. Included inline comments and documentation. Generated a detailed README without writing any code manually. Summary # GitHub Copilot significantly accelerated the development process. While it handled 95% of the work, reviewing and testing were key to ensuring functionality and usability. This approach is ideal for tasks where speed and automation are priorities.\n","date":"30 December 2024","externalUrl":null,"permalink":"/2024/12/30/get-tenantid-for-any-azure-subscription/","section":"Posts","summary":"","title":"Get TenantId for any Azure Subscription","type":"posts"},{"content":"This blog is about listing the posts I have that demo using Bicep with code snippets for various different scenarios.\nThe list of snippets below makes use of the Azure Verified Modules GitHub repo from Microsoft.\nDeploy Azure SQL Server, Database and Elastic pool in one go using Bicep! Azure Application Gateway using Azure Verified Modules Understanding and Implementing Privileged Identity Management (PIM) Using BICEP Implementing TDE in Azure SQL with Custom Managed Keys from Azure Key Vault Deploy Azure Azure Web Apps Windows and Linux using Bicep! Azure Firewall Rule Collection Groups: Managing Windows Updates and Time Server Sync with Microsoft’s Verified Modules Implementing Azure SQL Server Firewall Rules with Bicep and Azure Verified Modules Deploying a Log Analytics Workspace Using Azure Verified Modules ","date":"29 November 2024","externalUrl":null,"permalink":"/2024/11/29/bicep-snippets-using-azure-verified-modules/","section":"Posts","summary":"","title":"Bicep snippets using Azure Verified Modules","type":"posts"},{"content":"If you\u0026rsquo;re managing resources in Azure, you\u0026rsquo;ve likely faced challenges around optimizing and securing your cloud environment. Azure Quick Review (azqr), an open-source tool from Microsoft, is a straightforward solution that can help you quickly assess your Azure environment and highlight potential issues. Here’s why azqr is so useful for your day-to-day cloud operations.\nWhat is Azure Quick Review (azqr)?\nAzure Quick Review is a command-line tool designed to simplify the assessment of your Azure subscriptions and resources. It\u0026rsquo;s available on GitHub (https://github.com/Azure/azqr) and provides an automated way to perform a high-level analysis of your Azure infrastructure. The main goal is to offer you insights into security, compliance, performance, and cost-related aspects of your Azure resources, all in a digestible format.\nWhy Use Azure Quick Review?\nManaging Azure resources manually can become cumbersome, especially when your cloud footprint is growing. Azure Quick Review offers several practical benefits:\nAutomated Assessments azqr automates the assessment process for your Azure environment. Instead of manually checking each resource\u0026rsquo;s configuration, you can use azqr to perform comprehensive evaluations in minutes.\nIt covers key Azure resources like virtual machines, SQL databases, storage accounts, and more.\nConsistent, Standardized Reviews One of the main issues with manual audits is inconsistency. Azure Quick Review brings a standardized approach to your resource analysis. It ensures that each assessment follows the same set of guidelines and best practices, which is particularly helpful when working in teams.\nFocus on Security and Compliance Azure Quick Review evaluates the security posture of your resources by flagging configuration issues. It checks for vulnerabilities, like public endpoints where they shouldn\u0026rsquo;t be, or missing network security groups (NSGs).\nYou can use azqr to ensure your deployments comply with organizational policies or regulatory requirements. Its output can be a handy guide to tightening security gaps in your Azure setup.\nCost Optimization Insights As your Azure usage grows, so does the likelihood of mismanagement and unnecessary costs. azqr highlights resources that could be over-provisioned or underutilized, offering you potential cost-saving opportunities.\nThe report can help identify expensive configurations and unused resources that can be scaled back or shut down.\nQuick, Readable Reports Azure Quick Review outputs the analysis in a clear and accessible format. The results include color-coded indications of areas needing attention and a summary that prioritizes key actions.\nReports generated by azqr are ideal for sharing with stakeholders or for keeping as a quick reference.\nEasy to Set Up and Use Installation is simple. You can install azqr via Python\u0026rsquo;s pip, and from there, it\u0026rsquo;s easy to integrate into your existing workflows. If you already use command-line tools for Azure, azqr feels like a natural extension of that.\nHow to Get Started with azqr\nGetting started is straightforward:\nInstallation: First, clone the GitHub repository or install it via pip (pip install azqr). Running the Tool: You can use azqr commands to scan specific subscriptions or resource groups. The CLI provides flexibility to focus on exactly what you need. Reviewing Results: Once complete, you get a summary report highlighting potential security gaps, compliance issues, and opportunities to optimize your resources. For more details, check out the GitHub page: Azure Quick Review on GitHub\nWhen Should You Use azqr?\nAzure Quick Review is particularly useful in several scenarios:\nPeriodic Audits: Use azqr to conduct regular reviews of your Azure environment to ensure compliance and security standards are up to date.\nPre-Deployment Checks: Before making new services live, azqr can be used to review configurations and spot potential issues.\nCost Management Exercises: Regularly run azqr to help with cost audits, identifying waste or unnecessary spending.\nReport\nHere is what the report looks like, you get a list of Recommendations, ImpactedResources, ResourceTypes, Inventory, Advisor, Defender, Costs and Pivot Table tabs.\nSummary\nAzure Quick Review (azqr) is an invaluable tool for Azure users who want to stay on top of resource management without spending hours on manual reviews. It’s straightforward to use, delivers consistent insights, and helps you optimize both costs and security across your cloud environment. By incorporating azqr into your routine, you can gain a clearer understanding of your Azure resources and keep your deployments running efficiently and securely.\n","date":"29 November 2024","externalUrl":null,"permalink":"/2024/11/29/azure-quick-review-azqr-a-practical-overview/","section":"Posts","summary":"","title":"Azure Quick Review (azqr): A Practical Overview","type":"posts"},{"content":"","date":"29 November 2024","externalUrl":null,"permalink":"/categories/bicep/","section":"Categories","summary":"","title":"Bicep","type":"categories"},{"content":"Deploying a Log Analytics Workspace using Azure Verified Modules (AVM) with Bicep is a streamlined process that leverages the standardized practices of the Azure infrastructure-as-code framework. Here\u0026rsquo;s a concise guide on how to set up your workspace using the AVM project on GitHub:\nThe following is example Bicep code, I will let you create the resource group yourself and figure out the tags.\n// Log Analytics Parameters param logAnalyticsSkuName string = \u0026lsquo;PerGB2018\u0026rsquo; var logAnalyticsName = \u0026rsquo;law-demo'\n@description(\u0026lsquo;Log Analytics Daily Quota in GB. Default: 1GB\u0026rsquo;) param logAnalyticsDailyQuotaGb int = 1\n@description(\u0026lsquo;Number of days data will be retained for.\u0026rsquo;) param logAnalyticsDataRetention int = 365\n//MARK: azureLogAnalytics @description(\u0026lsquo;Deploy Azure Log Analytics\u0026rsquo;) module logAnalytics \u0026lsquo;br/public:avm/res/operational-insights/workspace:0.7.0\u0026rsquo; = { scope: resourceGroup(rgLogAnalyticsDemo) name: \u0026rsquo;logAnalyticsDemo\u0026rsquo; params: { name: logAnalyticsName skuName: logAnalyticsSkuName location: location dailyQuotaGb: logAnalyticsDailyQuotaGb dataRetention: logAnalyticsDataRetention tags: tags } }\nThe use of Azure Verified Modules ensures that your infrastructure as code practices align with Microsoft\u0026rsquo;s standards, simplifying maintenance and scalability concerns. This approach not only streamlines the deployment process but also enhances the security and reliability of your Azure resources.\nFor more detailed instructions and to view the exact Bicep configurations, visit the GitHub repository pages for Azure Verified Modules and Bicep Registry Modules. These resources will provide you with up-to-date code examples and further details on customizing your deployment.\n","date":"28 October 2024","externalUrl":null,"permalink":"/2024/10/28/deploying-a-log-analytics-workspace-using-azure-verified-modules/","section":"Posts","summary":"","title":"Deploying a Log Analytics Workspace Using Azure Verified Modules","type":"posts"},{"content":"When managing Azure resources, ensuring your SQL server is secure from unauthorized access is a priority. One way to secure your Azure SQL server is by implementing firewall rules. In this post, I\u0026rsquo;ll guide you through using Bicep and the Azure Verified Modules from GitHub to set up firewall rules for an Azure SQL server.\nExample Bicep: # @description(\u0026lsquo;Deploy Azure SQL Server\u0026rsquo;) module createsqlServer \u0026lsquo;../sql/server/main.bicep\u0026rsquo; = { scope: resourceGroup(rgSQL) name: \u0026lsquo;sqlServer-${environmentName}\u0026rsquo; params: { name: \u0026lsquo;sql-demoserver\u0026rsquo; administratorLogin: administratorLogin administratorLoginPassword: administratorLoginPassword managedIdentities: { systemAssigned: false userAssignedResourceIds: [ createManagedIdentity.outputs.resourceId ] } primaryUserAssignedIdentityId: createManagedIdentity.outputs.resourceId location: location tags: tags databases: [ { name: \u0026lsquo;demidb1\u0026rsquo; skuName: \u0026lsquo;ElasticPool\u0026rsquo; skuTier: \u0026lsquo;GeneralPurpose\u0026rsquo; capacity: 0 maxLogSizeBytes: 34359738368 compatibilityLevel: 120 elasticPoolId: createSqlServerElasticPool.outputs.resourceId } ] firewallRules: [ { name: \u0026rsquo;\u0026rsquo; startIpAddress: \u0026rsquo;enter ip address here\u0026rsquo; endIpAddress: \u0026rsquo;enter ip address here' } { name: \u0026rsquo;' startIpAddress: \u0026rsquo;' endIpAddress: \u0026rsquo;' } ] } }\nThis Bicep file defines 2 simple rule that allows traffic from certain defined IP addresses. Be sure to adjust the startIpAddress and endIpAddress to fit your security requirements. This example doesn\u0026rsquo;t show the code for the creation of the elasticPool or the Managed Identity.\nThis example serves as a foundational guide to get you started with automated deployment of firewall rules using Infrastructure as Code (IaC) practices with Bicep.\n","date":"28 October 2024","externalUrl":null,"permalink":"/2024/10/28/implementing-azure-sql-server-firewall-rules-with-bicep-and-azure-verified-modules/","section":"Posts","summary":"","title":"Implementing Azure SQL Server Firewall Rules with Bicep and Azure Verified Modules","type":"posts"},{"content":" Introduction # Azure Firewall is a powerful cloud-native service that provides network security across your Azure environment. Managing traffic in and out of your virtual networks requires a precise and structured approach, and Azure Firewall helps achieve this with rule collection groups and rules. In this guide, we will explore how to use the Azure Verified Modules GitHub project. For more details, see the official Microsoft documentation on Azure Firewall rule collections. to enable Windows Updates and Time Server synchronization by configuring Azure Firewall rule collection groups.\nWhat Are Azure Firewall Rule Collection Groups? # Azure Firewall\u0026rsquo;s rules are organized into rule collection groups and rules. This structure helps you maintain and manage the settings effectively.\nRule Collection Groups: These are containers for organizing rule collections by priority. You can think of them as a way to categorize rules that have similar purposes. Rule Collections: Inside a group, rule collections are the actual sets of rules that Azure Firewall enforces. Rule collections are defined based on the type of traffic they manage—network rules, application rules, or NAT rules. Rules: Finally, within each rule collection, you define the specific rules that manage traffic. These rules control things like which IP addresses can communicate through which ports and protocols. When working with Azure Firewall, setting up rules for basic functionalities like Windows Updates or Time Server synchronization may seem straightforward, but it can require detailed settings that can benefit from automation and consistency. This is where Microsoft\u0026rsquo;s Azure Verified Modules come in.\nAzure Verified Modules GitHub Project # Microsoft provides the Azure Verified Modules. You can also refer to the Azure Firewall documentation for a broader understanding of firewall management. GitHub project to simplify and standardize Azure infrastructure deployments. These modules are built to help you achieve common tasks in Azure using well-defined Infrastructure as Code (IaC) practices. They leverage tools like Bicep and ARM templates, providing verified configurations that are reliable, repeatable, and secure.\nWe will use this project to configure Azure Firewall to allow Windows Updates and NTP (Network Time Protocol) server synchronization.\nSetting Up Azure Firewall Rules for Windows Updates and Time Sync # To enable Windows Updates and time server synchronization, you need to create specific rule collection groups and rules. These rules will allow Azure virtual machines to reach Microsoft\u0026rsquo;s update servers and time servers.\nNote you can either clone the repo or make use of the public repo that Azure provide, below shows you how to clone the repo.\nStep 1: Cloning the Verified Modules Repository # Start by cloning the Azure Verified Modules repository:\nClone the repository # git clone https://github.com/Azure/Azure-Verified-Modules\nStep 2: Understanding the Module Structure # In the repository, you will find modules for managing Azure Firewall rule collections. The folder structure helps you locate different types of rule collections (such as Network Rules, Application Rules, and NAT Rules).\nFor enabling Windows Updates and time synchronization, we will focus on Application Rule Collections. Application rules are ideal for this scenario as they define fully qualified domain names (FQDNs) to allow outbound HTTP/S traffic, which is the type of traffic used for both updates and NTP.\nStep 3: Using the Application Rules Module # Navigate to the module related to Firewall Application Rules. The module you need allows Azure Firewall to be configured with outbound rules for reaching well-known domains, like Windows Update servers and NTP servers. For more details, you can refer to the official documentation on Azure Firewall application rules.\nThe basic configuration requires defining a rule collection group that contains an application rule collection for the update and time synchronization domains.\nExample Bicep File # Below is an example Bicep configuration that uses Azure Firewall to create rules allowing Windows Updates and NTP. Refer to the Azure Bicep documentation for more information on using Bicep to manage Azure resources.\nparam firewallName string param resourceGroupName string param location string = resourceGroup().location param windowsUpdateDomains array = [ \u0026lsquo;windowsupdate.microsoft.com\u0026rsquo;, \u0026lsquo;.windowsupdate.microsoft.com\u0026rsquo;, \u0026lsquo;.update.microsoft.com\u0026rsquo;, \u0026lsquo;*.delivery.mp.microsoft.com\u0026rsquo; ] param ntpDomains array = [ \u0026rsquo;time.windows.com\u0026rsquo; ]\nresource firewall \u0026lsquo;Microsoft.Network/azureFirewalls@2021-08-01\u0026rsquo; existing = { name: firewallName resourceGroup: resourceGroupName }\nresource appRuleCollection \u0026lsquo;Microsoft.Network/azureFirewalls/ruleCollections@2021-08-01\u0026rsquo; = { name: \u0026lsquo;${firewallName}-app-rule-collection\u0026rsquo; parent: firewall properties: { priority: 200 ruleCollectionType: \u0026lsquo;FirewallPolicy\u0026rsquo; rules: [ { name: \u0026lsquo;Allow-Windows-Updates\u0026rsquo; ruleType: \u0026lsquo;ApplicationRule\u0026rsquo; targetFqdns: windowsUpdateDomains protocols: [ { protocolType: \u0026lsquo;Https\u0026rsquo; port: 443 } ] } { name: \u0026lsquo;Allow-NTP-Sync\u0026rsquo; ruleType: \u0026lsquo;ApplicationRule\u0026rsquo; targetFqdns: ntpDomains protocols: [ { protocolType: \u0026lsquo;Https\u0026rsquo; port: 443 } ] } ] } }\nExplanation of the Bicep Configuration # Parameters: The script defines several parameters, including the firewall name, resource group, and domains for Windows Updates and NTP. Firewall Resource: The firewall resource is defined as an existing resource, meaning that the script expects the Azure Firewall to already be deployed. Application Rule Collection: This rule collection contains two application rules—one for Windows Updates and one for NTP. Each rule targets the necessary FQDNs and specifies HTTPS (port 443) as the protocol. Step 4: Deploying the Bicep File # To deploy this Bicep file, use the following Azure CLI command:\naz deployment group create \u0026ndash;resource-group \u0026ndash;template-file .bicep\nReplace and with your specific values. This command will deploy the rule collection group to your existing Azure Firewall.\nVerifying the Configuration # Once the deployment is complete, it is important to verify that the Azure Firewall is properly configured to allow the necessary traffic. You can also refer to the Azure Firewall verification steps in the official Microsoft Docs for additional troubleshooting and validation methods.\nWindows Updates: You can verify if Windows Updates are working by manually triggering an update check on a virtual machine. If configured correctly, the VM should reach Microsoft\u0026rsquo;s update servers without issues. NTP Synchronization: For NTP, you can verify the time sync status by running the following command on a Windows VM:w32tm /query /statusThis command should display the synchronization details if the connection to the NTP server is successful. Best Practices for Managing Firewall Rules # When managing Azure Firewall rules, it is crucial to follow a few best practices to keep your infrastructure secure and manageable. Microsoft provides a set of best practices that you can find in their official documentation:\nOrganize Rules by Function: Group rules by their function—for example, rules for Windows Updates, security services, etc. This makes it easier to manage and understand. Use Appropriate Priorities: Rule priorities determine the order in which they are evaluated. Ensure that more specific rules have higher priorities (lower numerical values). Minimize Wildcards: Avoid using wildcards (*) in domain names as much as possible. While convenient, they can open unnecessary access and compromise security. Test Thoroughly: Always test new rules in a controlled environment before applying them in production. This helps to avoid disruptions. Real world example # param firewallPolicyName string param appGatewaySubnetAddress string param vmSubnetAddress string param location string\nresource updateAzureFirewallPolicy \u0026lsquo;Microsoft.Network/firewallPolicies@2024-01-01\u0026rsquo; = { name: firewallPolicyName location:location properties: { sku: { tier: \u0026lsquo;Premium\u0026rsquo; } threatIntelMode: \u0026lsquo;Deny\u0026rsquo; threatIntelWhitelist: { fqdns: [] ipAddresses: [] } dnsSettings: { servers: [] enableProxy: true } sql: { allowSqlRedirect: false } intrusionDetection: { mode: \u0026lsquo;Deny\u0026rsquo; configuration: { signatureOverrides: [] bypassTrafficSettings: [] privateRanges: [ \u0026lsquo;172.16.0.0/12\u0026rsquo; ] } } } }\nresource createAzureFireWallServerActivationRuleCollectionGroup \u0026lsquo;Microsoft.Network/firewallPolicies/ruleCollectionGroups@2024-01-01\u0026rsquo; = { parent: updateAzureFirewallPolicy name: \u0026lsquo;ServerActivation\u0026rsquo; properties: { priority: 2900 ruleCollections: [ { ruleCollectionType: \u0026lsquo;FirewallPolicyFilterRuleCollection\u0026rsquo; action: { type: \u0026lsquo;Allow\u0026rsquo; } rules: [ { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;KMS\u0026rsquo; ipProtocols: [ \u0026lsquo;TCP\u0026rsquo; ] sourceAddresses: [ appGatewaySubnetAddress ] sourceIpGroups: [] destinationAddresses: [] destinationIpGroups: [] destinationFqdns: [ \u0026lsquo;kms.core.windows.net\u0026rsquo; ] destinationPorts: [ \u0026lsquo;1688\u0026rsquo; ] } { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;AppGatewaytoCustomer\u0026rsquo; ipProtocols: [ \u0026lsquo;TCP\u0026rsquo; ] sourceAddresses: [ appGatewaySubnetAddress ] sourceIpGroups: [] destinationAddresses: [ vmSubnetAddress ] destinationIpGroups: [] destinationFqdns: [] destinationPorts: [ \u0026lsquo;8080\u0026rsquo; \u0026lsquo;443\u0026rsquo; ] } { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;AllowWindowsTimeServer\u0026rsquo; ipProtocols: [ \u0026lsquo;UDP\u0026rsquo; ] sourceAddresses: [ \u0026lsquo;\u0026rsquo; ] sourceIpGroups: [] destinationAddresses: [] destinationIpGroups: [] destinationFqdns: [ \u0026rsquo;time.windows.com\u0026rsquo; ] destinationPorts: [ \u0026lsquo;123\u0026rsquo; ] } { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;AllowAzureBackupAllowMonitor\u0026rsquo; ipProtocols: [ \u0026lsquo;TCP\u0026rsquo; ] sourceAddresses: [ \u0026lsquo;\u0026rsquo; ] sourceIpGroups: [] destinationAddresses: [ \u0026lsquo;AzureBackup\u0026rsquo; \u0026lsquo;AzureMonitor\u0026rsquo; ] destinationIpGroups: [] destinationFqdns: [] destinationPorts: [ \u0026lsquo;\u0026rsquo; ] } { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;msedge.api.cdp.microsoft.com\u0026rsquo; ipProtocols: [ \u0026lsquo;TCP\u0026rsquo; ] sourceAddresses: [ \u0026lsquo;\u0026rsquo; ] sourceIpGroups: [] destinationAddresses: [] destinationIpGroups: [] destinationFqdns: [ \u0026lsquo;msedge.api.cdp.microsoft.com\u0026rsquo; ] destinationPorts: [ \u0026lsquo;\u0026rsquo; ] } { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;AllowLinuxTimeServer\u0026rsquo; ipProtocols: [ \u0026lsquo;UDP\u0026rsquo; ] sourceAddresses: [ \u0026lsquo;\u0026rsquo; ] sourceIpGroups: [] destinationAddresses: [] destinationIpGroups: [] destinationFqdns: [ \u0026rsquo;ntp.ubuntu.com\u0026rsquo; ] destinationPorts: [ \u0026lsquo;\u0026rsquo; ] } ] name: \u0026lsquo;ServerActivation\u0026rsquo; priority: 2900 } { ruleCollectionType: \u0026lsquo;FirewallPolicyFilterRuleCollection\u0026rsquo; action: { type: \u0026lsquo;Allow\u0026rsquo; } rules: [ { ruleType: \u0026lsquo;ApplicationRule\u0026rsquo; name: \u0026lsquo;Ubuntu Updates\u0026rsquo; protocols: [ { protocolType: \u0026lsquo;Http\u0026rsquo; port: 80 } { protocolType: \u0026lsquo;Https\u0026rsquo; port: 443 } ] fqdnTags: [] webCategories: [] targetFqdns: [ \u0026lsquo;.ubuntu.com\u0026rsquo; ] targetUrls: [] terminateTLS: false sourceAddresses: [ appGatewaySubnetAddress ] destinationAddresses: [] sourceIpGroups: [] httpHeadersToInsert: [] } { ruleType: \u0026lsquo;ApplicationRule\u0026rsquo; name: \u0026lsquo;Windows Updates\u0026rsquo; protocols: [ { protocolType: \u0026lsquo;Http\u0026rsquo; port: 80 } { protocolType: \u0026lsquo;Https\u0026rsquo; port: 443 } ] fqdnTags: [ \u0026lsquo;WindowsUpdate\u0026rsquo; \u0026lsquo;WindowsDiagnostics\u0026rsquo; ] webCategories: [] targetFqdns: [] targetUrls: [] terminateTLS: false sourceAddresses: [ appGatewaySubnetAddress ] destinationAddresses: [] sourceIpGroups: [] httpHeadersToInsert: [] } { ruleType: \u0026lsquo;ApplicationRule\u0026rsquo; name: \u0026lsquo;Azure Monitor\u0026rsquo; protocols: [ { protocolType: \u0026lsquo;Http\u0026rsquo; port: 8080 } { protocolType: \u0026lsquo;Https\u0026rsquo; port: 443 } ] fqdnTags: [] webCategories: [] targetFqdns: [ \u0026lsquo;.azure.com\u0026rsquo; \u0026lsquo;.windows.net\u0026rsquo; ] targetUrls: [] terminateTLS: false sourceAddresses: [ appGatewaySubnetAddress ] destinationAddresses: [] sourceIpGroups: [] httpHeadersToInsert: [] } ] name: \u0026lsquo;LinuxUpdates\u0026rsquo; priority: 3000 } ] } }\nresource createAzureFireWallTimeSyncRuleCollectionGroup \u0026lsquo;Microsoft.Network/firewallPolicies/ruleCollectionGroups@2024-01-01\u0026rsquo; = { parent: updateAzureFirewallPolicy name: \u0026lsquo;TimeSync\u0026rsquo; properties: { priority: 2000 ruleCollections: [ { ruleCollectionType: \u0026lsquo;FirewallPolicyFilterRuleCollection\u0026rsquo; action: { type: \u0026lsquo;Allow\u0026rsquo; } rules: [ { ruleType: \u0026lsquo;NetworkRule\u0026rsquo; name: \u0026lsquo;TimeSync\u0026rsquo; ipProtocols: [ \u0026lsquo;Any\u0026rsquo; ] sourceAddresses: [ appGatewaySubnetAddress ] sourceIpGroups: [] destinationAddresses: [ \u0026lsquo;*\u0026rsquo; ] destinationIpGroups: [] destinationFqdns: [] destinationPorts: [ \u0026lsquo;123\u0026rsquo; ] } ] name: \u0026lsquo;TimeSync\u0026rsquo; priority: 2000 } ] } dependsOn:[ createAzureFireWallServerActivationRuleCollectionGroup ] }\nConclusion # Configuring Azure Firewall with rule collection groups and rules for enabling Windows Updates and time server synchronization is an important part of managing Windows workloads in Azure. By leveraging Microsoft\u0026rsquo;s Azure Verified Modules from GitHub, you can automate the deployment of these configurations, ensuring a consistent and reliable approach.\nUsing the example Bicep script above, you can quickly implement rules that allow your VMs to stay updated and correctly synchronized with Microsoft\u0026rsquo;s time servers, all while maintaining a secure and organized firewall configuration. Azure Firewall, combined with the automation provided by these verified modules, makes network management simpler and more effective.\n","date":"24 October 2024","externalUrl":null,"permalink":"/2024/10/24/azure-firewall-rule-collection-groups-managing-windows-updates-and-time-server-sync-with-microsofts-verified-modules/","section":"Posts","summary":"","title":"Azure Firewall Rule Collection Groups: Managing Windows Updates and Time Server Sync with Microsoft's Verified Modules","type":"posts"},{"content":"When setting up your infrastructure in Azure, using the Azure Verified Modules can streamline the creation of any Azure Resource such as Azure Web Apps for Windows and Linux with App Service Plans. This post guides you through the code for doing just that, I leave it to you to create the parameters and fill them in :)\n//MARK: App Insights Instance @description(\u0026lsquo;Create Application Insights Instance\u0026rsquo;) module createAppInsights \u0026lsquo;br/public:avm/res/insights/component:0.4.1\u0026rsquo; = if (deployWebApps) { scope: resourceGroup(resourceGroupArray[2].name) name: \u0026lsquo;createAppInsights\u0026rsquo; params: { name: appInsightsName workspaceResourceId: logAnalytics.outputs.resourceId diagnosticSettings: [ { workspaceResourceId: logAnalytics.outputs.resourceId } ] } dependsOn: [ logAnalytics ] }\n//MARK: App Service Plan Windows //Deploy an azure web app with App service plan for Windows module appServicePlanWindows \u0026lsquo;br/public:avm/res/web/serverfarm:0.2.4\u0026rsquo; = if (deployWebApps) { scope: resourceGroup(resourceGroupArray[2].name) name: \u0026lsquo;appServicePlanWindows\u0026rsquo; params: { name: \u0026lsquo;aspwin-${customerName}-${environmentName}-${locationShortCode}\u0026rsquo; location: location tags: tags skuName: skuNameAppServicePlanWindows kind: skuKindAppServicePlanWindows skuCapacity: skuCapacityAppServicePlanWindows diagnosticSettings: [ { workspaceResourceId: logAnalytics.outputs.resourceId } ] } dependsOn: [ logAnalytics ] }\n//MARK: App Service Windows module appServiceWindows \u0026lsquo;br/public:avm/res/web/site:0.9.0\u0026rsquo; = if (deployWebApps) { scope: resourceGroup(resourceGroupArray[2].name) name: \u0026lsquo;appService\u0026rsquo; params: { name: \u0026lsquo;appwin-${customerName}-${environmentName}-${locationShortCode}\u0026rsquo; kind: \u0026lsquo;app\u0026rsquo; location: location tags: tags serverFarmResourceId: appServicePlanWindows.outputs.resourceId managedIdentities: { systemAssigned: false userAssignedResourceIds: [ managedIdentity.id ] } diagnosticSettings: [ { workspaceResourceId: logAnalytics.outputs.resourceId } ] siteConfig: { alwaysOn: true http20Enabled: false appSettings: [ { name: \u0026lsquo;APPINSIGHTS_INSTRUMENTATIONKEY\u0026rsquo; value: createAppInsights.outputs.instrumentationKey } ] } appInsightResourceId: createAppInsights.outputs.resourceId } dependsOn: [ logAnalytics appServicePlanWindows createAppInsights ] }\n//MARK: App Service Plan Linux //Deploy an azure web app with App service plan for Linux module appServicePlanLinux \u0026lsquo;br/public:avm/res/web/serverfarm:0.2.4\u0026rsquo; = if (deployWebApps) { scope: resourceGroup(resourceGroupArray[2].name) name: \u0026lsquo;appServicePlanLinux\u0026rsquo; params: { name: \u0026lsquo;asplinux-${customerName}-${environmentName}-${locationShortCode}\u0026rsquo; location: location tags: tags skuName: \u0026lsquo;P1v3\u0026rsquo; kind: skuKindAppServicePlanLinux zoneRedundant: false diagnosticSettings: [ { workspaceResourceId: logAnalytics.outputs.resourceId } ] } dependsOn: [ logAnalytics ] }\n//MARK: App Service Linux module appServiceLinux \u0026lsquo;br/public:avm/res/web/site:0.9.0\u0026rsquo; = if (deployWebApps) { scope: resourceGroup(workloadsResourceGroupArray[2].name) name: \u0026lsquo;appServiceLinux\u0026rsquo; params: { name: \u0026lsquo;applin-${customerName}-${environmentName}-${locationShortCode}\u0026rsquo; kind: \u0026lsquo;app\u0026rsquo; location: location tags: tags serverFarmResourceId: appServicePlanLinux.outputs.resourceId managedIdentities: { systemAssigned: false userAssignedResourceIds: [ managedIdentity.id ] } diagnosticSettings: [ { workspaceResourceId: logAnalytics.outputs.resourceId } ] siteConfig: { alwaysOn: true http20Enabled: false appSettings: [ { name: \u0026lsquo;APPINSIGHTS_INSTRUMENTATIONKEY\u0026rsquo; value: createAppInsights.outputs.instrumentationKey } ] } appInsightResourceId: createAppInsights.outputs.resourceId } dependsOn: [ logAnalytics appServicePlanLinux createAppInsights ] }\nThis code will now create an a Windows App Service Plan with a Web App, a Linux App Service Plan with a Web App and also an Application Insights instance and hook up both web apps to the same App Insights instance for monitoring. Yes this code could be tidied up even further but the purpose it so show you how easy it can be to deploy resources using Bicep along with the Azure Verified Modules github repository.\n","date":"15 October 2024","externalUrl":null,"permalink":"/2024/10/15/deploy-azure-azure-web-apps-windows-and-linux-using-bicep/","section":"Posts","summary":"","title":"Deploy Azure Azure Web Apps Windows and Linux using Bicep!","type":"posts"},{"content":"When setting up your infrastructure in Azure, using the Azure Verified Modules can streamline the creation of any Azure Resource such as an Azure SQL Server, an Elastic Pool, and 2 demo databases. This post guides you through the code for doing just that, I leave it to you to create the parameters and fill them in :)\nBicep Code\n//MARK: SQL Server @description(\u0026lsquo;SQL Server\u0026rsquo;) module sqlServer \u0026lsquo;br/public:avm/res/sql/server:0.8.0\u0026rsquo; = if (deploySQLServer) { scope: resourceGroup(\u0026ldquo;resourceGroupArray[4].name\u0026rdquo;) name: \u0026lsquo;sqlServer-${environmentName}\u0026rsquo; params: { name: sqlServerName administratorLogin: sqlAdministratorLogin administratorLoginPassword: keyVault.getSecret(config.kvSQLPassword) managedIdentities: { systemAssigned: false userAssignedResourceIds: [ managedIdentity.id ] } primaryUserAssignedIdentityId: managedIdentity.id location: location tags: tags databases: [ { name: \u0026lsquo;demodb1\u0026rsquo; maxSizeBytes: 2147483648 skuName: \u0026lsquo;ElasticPool\u0026rsquo; skuTier: \u0026lsquo;GeneralPurpose\u0026rsquo; zoneRedundant: false capacity: 0 elasticPoolId: \u0026lsquo;subscriptions/${subscriptionId}/resourceGroups/${resourceGroupArray[4].name}/providers/Microsoft.Sql/servers/${sqlServerName}/elasticpools/${elasticPoolName}\u0026rsquo; } { name: \u0026lsquo;demodb2\u0026rsquo; maxSizeBytes: 2147483648 skuName: \u0026lsquo;ElasticPool\u0026rsquo; skuTier: \u0026lsquo;GeneralPurpose\u0026rsquo; zoneRedundant: false capacity: 0 elasticPoolId: \u0026lsquo;subscriptions/${subscriptionId}/resourceGroups/${resourceGroupArray[4].name}/providers/Microsoft.Sql/servers/${sqlServerName}/elasticpools/${elasticPoolName}\u0026rsquo; } ] elasticPools: [ { maxSizeBytes: 34359738368 name: elasticPoolName perDatabaseSettings: { minCapacity: 0 maxCapacity: 2 } skuCapacity: 2 skuName: \u0026lsquo;GP_Gen5\u0026rsquo; skuTier: \u0026lsquo;GeneralPurpose\u0026rsquo; zoneRedundant: false maintenanceConfigurationId: \u0026lsquo;/subscriptions/${subscriptionId}/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/SQL_Default\u0026rsquo; } ] } }\nThis code will now create an Azure SQL Server, an Elastic Pool and 2 demo databases within the Elastic Pool. Yes this code could be tidied up even further but the purpose it so show you how easy it can be to deploy resources using Bicep along with the Azure Verified Modules github repository.\n","date":"15 October 2024","externalUrl":null,"permalink":"/2024/10/15/deploy-azure-sql-server-database-and-elastic-pool-in-one-go-using-bicep/","section":"Posts","summary":"","title":"Deploy Azure SQL Server, Database and Elastic pool in one go using Bicep!","type":"posts"},{"content":"The call for speakers is open for this years Festive Tech Calendar, we are off to a slow start and we need your help with submitting session(s). Please also spread the word as the call for speakers closes at the end of the month.\nThe main reason for this post is to inform you about our chosen charity this year which is the Beatson Cancer Charity - we are trying to earn £2500 for this amazing charity which is based in Glasgow, Scotland near where I live.\nTheir Mission\nBeatson Cancer Charity supports people affected by cancer, every step of the way. We make the journey easier by transforming the way cancer care is funded and delivered. We provide services, as well as funding specialists, research and education to invest in a better future for cancer patients and their families.\nFrom the hospital wards, right to the heart of the communities that The Beatson West of Scotland Cancer Centre serves, we believe everyone should experience cancer with care, with love and with hope. We are with our patients and their families for every step of the journey.\nBy working within NHS environments, Beatson Cancer Charity is ideally placed to understand the needs of patients and staff. We respond by providing services and funding that enhance and strengthen NHS care and enable patients and their families to be helped swiftly and compassionately. At the same time our independence as a charity allows us to develop and extend our services further into the heart of Scottish communities to support more people with cancer before, during and after treatment.\nAmongst patients and the wider community, we are best known for our award-winning Wellbeing Centre and specialist support at The Beatson West of Scotland Cancer Centre and across hospitals in five health boards. While clinical and research professionals recognise us for our ongoing commitment to more effective cancer services, funding additional specialist staff and supporting cutting-edge cancer research and education.\nAll our work is made possible by our supporters. It is their generosity which allows Beatson Cancer Charity to deliver an innovative and patient-focused approach to cancer care and change the lives of those affected by the disease every day.\nhttps://youtu.be/KWzarjgJi10\nIf you have any spare cash, even a very little goes a long way then please donate to our just giving page at the link below.\nhttps://www.justgiving.com/page/festive-tech-calendar-2024\nThank you for taking the time to read this and I will update this blog post as we get more donations.\n","date":"14 October 2024","externalUrl":null,"permalink":"/2024/10/14/festive-tech-calendar-2024-beatson-cancer-charity/","section":"Posts","summary":"","title":"Festive Tech Calendar 2024 - Beatson Cancer Charity","type":"posts"},{"content":"Creating an Azure Application Gateway Using Bicep Azure Verified Modules\nAs cloud solutions grow more complex, using infrastructure as code (IaC) has become crucial for managing, deploying, and maintaining resources smoothly. Bicep, Microsoft\u0026rsquo;s language for Azure, makes it much easier to create templates that simplify resource management. Azure Verified Modules take it a step further by providing reusable, pre-validated components that speed up your development process.\nIn this post, I\u0026rsquo;ll walk through creating an Azure Application Gateway using Azure Bicep, leveraging verified modules to keep things simple and efficient.\nWhy Use Azure Verified Modules? # Azure Verified Modules are prebuilt and tested components that help you create standardized, production-ready Azure infrastructure faster. By using verified modules:\nYou reduce the chances of introducing configuration errors. You can leverage Azure best practices directly within your deployments. Modules are reusable, which promotes consistency and speeds up development. Getting Started with Bicep # Before diving into the Application Gateway setup, ensure you have the necessary tools:\nAzure CLI: Install or update Azure CLI to the latest version. Bicep CLI: You can install Bicep via Azure CLI with the command: az bicep install. Visual Studio Code (VS Code): A good code editor will make writing Bicep files easier, especially with the Bicep VS Code extension. Once your environment is ready, you can begin writing the Bicep code to deploy an Application Gateway.\nStep-by-Step: Creating an Application Gateway # Step 1: Import the Azure Verified Module # To create an Azure Application Gateway, you first need to use the Azure Verified module. Microsoft provides verified modules that can be referenced directly in your Bicep file, making your infrastructure code easier to manage.\nFor example, to add an Application Gateway, you might use the following code:\nmodule createcreateApplicationGatewayppGateway \u0026lsquo;br/public:network/application-gateway:1.0.0\u0026rsquo; = { scope: resourceGroup(hubSubscriptionId, hubResourceGroupNameAppGateway) name: \u0026lsquo;createAppGateway\u0026rsquo; params: { name: applicationGatewayName location: location sku: \u0026lsquo;WAF_v2\u0026rsquo; tags: tags firewallPolicyResourceId: createApplicationGatewayWafPolicy.outputs.resourceId gatewayIPConfigurations: [ { name: \u0026lsquo;appGatewayIpConfig\u0026rsquo; properties: { subnet: { id: \u0026lsquo;/subscriptions/${hubSubscriptionId}/resourceGroups/${hubNetworkRG}/providers/Microsoft.Network/virtualNetworks/${hubVnetName}/subnets/AppGwSubnet\u0026rsquo; } } } ] frontendIPConfigurations: [ { name: \u0026lsquo;appGwPublicFrontendIp\u0026rsquo; properties: { privateIPAllocationMethod: \u0026lsquo;Dynamic\u0026rsquo; publicIPAddress: { id: createPublicIPAddressForAppGateway.outputs.resourceId } } } ] frontendPorts: [ { name: \u0026lsquo;port_80\u0026rsquo; properties: { port: 80 } } ] backendAddressPools: [ { name: \u0026lsquo;vm1BackendPool\u0026rsquo; properties: { backendAddresses: [ { ipAddress: \u0026lsquo;10.0.1.4\u0026rsquo;\nThis code snippet shows how you can use the verified module to create an Application Gateway, specifying various configurations such as frontend ports, IP configurations, and request routing rules.\nStep 2: Define Dependencies # In the example above, you’ll need to ensure other dependent resources (like the Virtual Network, Subnet, and Public IP) are available before deploying the Application Gateway. You can define these resources in the same Bicep file to create a complete setup, or reference existing resources.\nFor example, adding a Virtual Network might look like this:\nresource myVNet \u0026lsquo;Microsoft.Network/virtualNetworks@2021-02-01\u0026rsquo; = { name: \u0026lsquo;myVNet\u0026rsquo; location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ \u0026lsquo;10.0.0.0/16\u0026rsquo; ] } subnets: [ { name: \u0026lsquo;appGatewaySubnet\u0026rsquo; properties: { addressPrefix: \u0026lsquo;10.0.1.0/24\u0026rsquo; } } ] } }\nStep 3: Deploy the Bicep Template # Once your Bicep template is complete, you can deploy it using the Azure CLI. Run the following command to deploy:\naz deployment group create \u0026ndash;resource-group \u0026ndash;template-file main.bicep\nThis command will take care of provisioning the resources defined in your Bicep file.\nBest Practices for Application Gateway Deployment # Security: Always use HTTPS listeners for secure communication. Azure Verified Modules often support adding SSL certificates easily. For more information on securing your Application Gateway, check out Microsoft\u0026rsquo;s documentation on Application Gateway security best practices. Scaling: Choose the right SKU and scaling settings for your Application Gateway based on your anticipated load. The Standard_v2 and WAF_v2 SKUs provide autoscaling capabilities. Refer to Microsoft\u0026rsquo;s guide on Application Gateway scalability and performance for more details. Reuse Modules: If you have multiple environments (like dev, staging, and production), reuse your Bicep modules with parameterized values to ensure consistency across environments. Check out Microsoft\u0026rsquo;s best practices for modular Bicep templates for tips on reusing modules effectively. Summary # In summary, using Azure Bicep with verified modules simplifies the process of creating and managing Azure infrastructure. Application Gateway helps you efficiently manage incoming traffic, while Bicep makes deployment clean and straightforward. Explore other verified modules in Azure\u0026rsquo;s public registry to quickly build reliable infrastructure following best practices.\nHave you tried using Bicep for your infrastructure projects? Share your experiences or questions in the comments below!\n","date":"4 October 2024","externalUrl":null,"permalink":"/2024/10/04/azure-application-gateway-using-azure-verified-modules/","section":"Posts","summary":"","title":"Azure Application Gateway using Azure Verified Modules","type":"posts"},{"content":"","date":"4 October 2024","externalUrl":null,"permalink":"/tags/azure-verified-modules/","section":"Tags","summary":"","title":"Azure Verified Modules","type":"tags"},{"content":"","date":"4 October 2024","externalUrl":null,"permalink":"/tags/bicep/","section":"Tags","summary":"","title":"Bicep","type":"tags"},{"content":"This blog post is my entry into this years AzureBackToSchool community event organized and ran by Dwayne Natwick https://x.com/DwayneNcloud\nIn this blog post I wanted to cover what I consider to be some hiden gem Azure WorkBooks within Azure Advisor.\nThe 3 main workbooks I wanted to bring to your attention are as follows:-\nReliability Service Retirement Cost Optimization The 3 Workbooks I will refer to can be found within the Azure Portal, search for Advisor and then click on Workbooks on the left hand menu and you can see them as below:-\nLets take them in turn\nReliability Workbook\nService Retirement Workbook\nThis workbook is awesome for finding any resources with your Azure Environment that are due to retire or have alredy retired.\nNow not all services are listed here but the teams at Microsoft are working on adding more all of the time.\nThe workbooks like the following: -\nIn the screenshot above we can see that the list of services and their due retirement date, luckily I have zero resources within my subscription(s) which had anyting due to retire, you can see this where it says None with a green tick, but if I did then I would be able to see how many resources are due to expire or that have already expired.\nI get lots of emails at work telling me that service X is about to retire and I always wondered how do we manage this and the answer is to use this workbook to locate the resources which are due for retiring.\nIf the service in question doesnt exist within this workbook then you have a couple of options, you can either write a KQL query with Azure Resource Graph or figure out how to do similar using PowerShell. A simple ChatGPT prompt can help with this if required.\nSummary\nIf you want to find resources that have or are about to expire then start with this workbook and then go from there.\nCost Optimization WorkBook\nIf you would like recommendations and detailed information regarding how to save money and not sure how to do this using Cost Analysis then this workbook is a gem.\nThe workbook itself looks like this:-\nIn the screenshot abve I have selected the Usage Optimization tab (highlighted in red) and here I can check lots of things including:-\nCompute\nVirtual Machines in a stopped state Advisor Recommendations Storage\nAm I using any v1 Storage accounts Are there any unattached Managed Disks Are there any Premium disks attached to powered off virtual machines Are there any Old Managed Disks snapshots Are there any Orphaned Managed Disks snapshots Are there any idle backups Advisor Recommendations Networking\nAvoid multiple Firewall instances in the same region Recommendations for Application Gateways Recommendations for Load Balancers Unattached Public IPs Recommendations for Virtual Network Gateways Recommendations for NAT Gateways Recommendations for Express Route Recommendations for Private DNS Advisor Recommendations Databases\nRecommendations for CosmosDB, SQL DB and SQL Elastic Pool Sustainability\nCarbon Optimization recommendations Summary\nI think you might find the Cost Optimization WorkBook awesome and it more than likely will save you money in some way(s).\n","date":"9 September 2024","externalUrl":null,"permalink":"/2024/09/09/azure-advisor-workbook-hidden-gems/","section":"Posts","summary":"","title":"Azure Advisor workbook hidden gems","type":"posts"},{"content":"","date":"30 August 2024","externalUrl":null,"permalink":"/tags/pim/","section":"Tags","summary":"","title":"PIM","type":"tags"},{"content":" Introduction # In today’s digital landscape, managing privileged identities has become paramount for enterprises aiming to safeguard their IT environments against unauthorized access and potential breaches. Privileged Identity Management (PIM) solutions are vital for controlling, managing, and auditing privileged access across all parts of an IT environment. In this blog post, I will delve into how to implement PIM using BICEP and the necessity of a P2 Entra license.\nWhat is Privileged Identity Management (PIM)? # Privileged Identity Management (PIM) refers to the control and monitoring of access and rights for users with elevated permissions who have the authority to make critical changes within Azure. PIM solutions help to prevent security breaches by ensuring that only authorized users can access sensitive systems and data.\nWhy BICEP? # BICEP is a domain-specific language developed by Microsoft, used primarily for deploying Azure resources declaratively. It simplifies the management of infrastructure as code (IaC), offering a cleaner and more concise syntax compared to traditional ARM templates. Using BICEP to implement PIM can streamline the deployment of Azure resources that are specifically configured for enhanced security protocols.\nThe Role of P2 Entra Licensing # Microsoft Entra, formerly known as Azure Active Directory (Azure AD), offers comprehensive identity and access management solutions, with P2 licensing providing advanced protection features critical for PIM. A P2 license is essential for accessing premium PIM capabilities in Azure, such as just-in-time (JIT) privileged access, risk-based conditional access policies, and detailed auditing and reporting features.\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// This script is used to elevate a group or a user to a built-in role in Azure using Privileged Identity Management (PIM) //// The script uses the roleEligibilityScheduleRequests API to elevate the user or group to the specified role //// The script supports the following built-in roles: GlobalAdmin, Owner, Contributor, Reader //// The script requires the subscription ID, the principal ID of the user or group to elevate, and the built-in role to assign //// The script also requires the start date and time for the eligibility schedule and the duration for which the eligibility is valid //// The script creates a roleEligibilityScheduleRequests resource for each built-in role to assign //// The script uses the subscription scope to assign the role to the user or group //// The script uses the role definition IDs for each built-in role to assign //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\ntargetScope = \u0026lsquo;subscription\u0026rsquo;\nparam subscriptionId string\n// Set the subscription scope using the subscription ID var subscriptionScope = \u0026lsquo;/subscriptions/${subscriptionId}\u0026rsquo;\n@description(\u0026lsquo;The start date and time for the eligibility schedule in ISO 8601 format\u0026rsquo;) param startDateTime string = utcNow()\n@description(\u0026lsquo;The duration for which the eligibility is valid in ISO 8601 format (e.g., P90D for 90 days)\u0026rsquo;) param duration string = \u0026lsquo;P90D\u0026rsquo;\n@allowed([ \u0026lsquo;GlobalAdmin\u0026rsquo; \u0026lsquo;Owner\u0026rsquo; \u0026lsquo;Contributor\u0026rsquo; \u0026lsquo;Reader\u0026rsquo; ]) @description(\u0026lsquo;Built-in role to assign\u0026rsquo;) param builtInRoleType string\nvar role = { GlobalAdmin: \u0026lsquo;/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/62e90394-69f5-4237-9190-012177145e10\u0026rsquo; Owner: \u0026lsquo;/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635\u0026rsquo; Contributor: \u0026lsquo;/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c\u0026rsquo; Reader: \u0026lsquo;/subscriptions/${subscription().subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7\u0026rsquo; }\nparam principalIdToElevate string // The principal ID of the user or group to elevate\n////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //// Deployment starts here //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n@description(\u0026lsquo;Elevate User to Reader\u0026rsquo;) resource pimAssignment \u0026lsquo;Microsoft.Authorization/roleEligibilityScheduleRequests@2022-04-01-preview\u0026rsquo; = if (builtInRoleType == \u0026lsquo;Reader\u0026rsquo;) { name: guid(subscriptionScope, principalIdToElevate, role.Reader) scope: subscription() properties: { principalId: principalIdToElevate requestType: \u0026lsquo;AdminAssign\u0026rsquo; roleDefinitionId: role[builtInRoleType] scheduleInfo: { expiration: { duration: duration type: \u0026lsquo;AfterDuration\u0026rsquo; } startDateTime: startDateTime } } }\n@description(\u0026lsquo;Elevate User to Contributor\u0026rsquo;) resource pimAssignment2 \u0026lsquo;Microsoft.Authorization/roleEligibilityScheduleRequests@2022-04-01-preview\u0026rsquo; = if (builtInRoleType == \u0026lsquo;Contributor\u0026rsquo;) { name: guid(subscriptionScope, principalIdToElevate, role.Contributor) scope: subscription() properties: { principalId: principalIdToElevate requestType: \u0026lsquo;AdminAssign\u0026rsquo; roleDefinitionId: role[builtInRoleType] scheduleInfo: { expiration: { duration: duration type: \u0026lsquo;AfterDuration\u0026rsquo; } startDateTime: startDateTime } } }\n@description(\u0026lsquo;Elevate User to Owner\u0026rsquo;) resource pimAssignment3 \u0026lsquo;Microsoft.Authorization/roleEligibilityScheduleRequests@2022-04-01-preview\u0026rsquo; = if (builtInRoleType == \u0026lsquo;Owner\u0026rsquo;) { name: guid(subscriptionScope, principalIdToElevate, role.Owner) scope: subscription() properties: { principalId: principalIdToElevate requestType: \u0026lsquo;AdminAssign\u0026rsquo; roleDefinitionId: role[builtInRoleType] scheduleInfo: { expiration: { duration: duration type: \u0026lsquo;AfterDuration\u0026rsquo; } startDateTime: startDateTime } } }\n@description(\u0026lsquo;Elevate User to Global Admin\u0026rsquo;) resource pimAssignment4 \u0026lsquo;Microsoft.Authorization/roleEligibilityScheduleRequests@2022-04-01-preview\u0026rsquo; = if (builtInRoleType == \u0026lsquo;GlobalAdmin\u0026rsquo;) { name: guid(subscriptionScope, principalIdToElevate, role.GlobalAdmin) scope: subscription() properties: { principalId: principalIdToElevate requestType: \u0026lsquo;AdminAssign\u0026rsquo; roleDefinitionId: role[builtInRoleType] scheduleInfo: { expiration: { duration: duration type: \u0026lsquo;AfterDuration\u0026rsquo; } startDateTime: startDateTime } } }\nTo call this script you can use the below code\naz deployment sub create --name $deploymentID \u0026ndash;location $location --template-file ./PIM.bicep \u0026ndash;parameters subscriptionId=$subscriptionID builtInRoleType=$builtInRoleType principalIdToElevate=$principalIdToElevate --confirm-with-what-if \u0026ndash;output none\nI hope you find this script useful, let me know if you have any feedback on this post.\n","date":"30 August 2024","externalUrl":null,"permalink":"/2024/08/30/understanding-and-implementing-privileged-identity-management-pim-using-bicep/","section":"Posts","summary":"","title":"Understanding and Implementing Privileged Identity Management (PIM) Using BICEP","type":"posts"},{"content":"In the world of cloud computing, flexibility and scalability are key to delivering robust and efficient applications. Microsoft Azure’s App Service is a leading platform that provides a fully managed environment for building, deploying, and scaling web apps. One of the standout features that enhance the capabilities of Azure App Service is the concept of sidecars. In this blog post, I’ll delve into what Azure App Service sidecars are, their benefits, and how they can modernize your cloud applications.\nUnderstanding Azure App Service Sidecars # At its core, a sidecar pattern involves deploying a secondary container alongside the main application container within a single instance. This sidecar container typically handles auxiliary tasks that complement the primary application’s functions. Azure App Service allows you to integrate these sidecar containers seamlessly into your applications, providing additional functionalities without compromising the primary application’s performance.\nKey Benefits of Using Sidecars # Enhanced Functionality: Sidecars can extend the capabilities of your main application. For example, you might use a sidecar container for logging, monitoring, or security purposes, thereby offloading these tasks from your main application and improving its performance. Isolation and Modularity: By using sidecars, you can isolate specific functionalities or services, which enhances modularity. This isolation allows you to update or modify sidecar services independently of the main application, reducing the risk of downtime and improving maintainability. Improved Observability: Sidecars can be employed to add observability features to your applications. For instance, a sidecar can be used to collect metrics, logs, and other diagnostic data, providing deeper insights into application performance and health. Enhanced Security: Implementing a sidecar for security purposes, such as authentication or encryption, ensures that security concerns are managed separately from the main application logic. This separation of concerns enhances the overall security posture of your application. Customizable Workflows: Sidecars can be configured to perform custom workflows, such as data transformations or integration with other services. This flexibility allows you to tailor your application’s behavior to meet specific business needs. Practical Use Cases for Sidecars # 1. Logging and Monitoring # One of the most common use cases for sidecars is logging and monitoring. By deploying a sidecar container dedicated to these tasks, you can aggregate logs, collect performance metrics, and monitor application health without burdening the primary application container. Tools like Fluentd or Logstash can be used in sidecar containers to handle log collection and forwarding to centralized logging systems like Azure Monitor or Elastic Stack.\n2. Service Mesh Integration # In a microservices architecture, managing inter-service communication and ensuring reliable and secure interactions between services can be challenging. A sidecar can integrate with a service mesh, such as Istio or Linkerd, to handle service discovery, load balancing, and secure communication. This setup enables you to manage complex service interactions with minimal impact on the main application’s logic.\n3. Security Enhancements # Security sidecars can manage encryption, authentication, or other security-related tasks. For example, a sidecar could handle the encryption of data at rest or in transit, ensuring that sensitive information is protected. Similarly, authentication and authorization sidecars can manage access controls and token validation, adding an additional layer of security to your application.\n4. Data Processing # Sidecars can be utilized for data processing tasks that complement the main application. For example, if your application needs to perform complex data transformations or aggregations, a sidecar can handle these tasks separately, ensuring that the main application remains focused on its core responsibilities.\n5. Configuration Management # Managing configurations dynamically can be a challenge in complex applications. A sidecar can be employed to handle configuration management tasks, such as fetching configuration data from external sources or applying configuration changes in real-time. This approach allows you to manage application configurations more efficiently and reduces the risk of misconfigurations.\nImplementing Sidecars in Azure App Service # To deploy sidecars in Azure App Service, follow these steps:\nDefine Your Sidecar Container: Create a Docker image for your sidecar container. Ensure that it performs the required tasks and integrates seamlessly with your main application. Configure Your App Service: In the Azure portal, navigate to your App Service instance and configure it to use the sidecar container. This involves specifying the sidecar container’s Docker image and ensuring that it runs alongside your main application container. Set Up Communication: Ensure that your main application and sidecar container can communicate with each other as needed. This might involve setting up config or environment variables. Monitor and Manage: Use Azure’s monitoring and management tools to oversee the performance and health of both your main application and sidecar containers. Azure Monitor and Azure Application Insights can provide valuable insights into how well your sidecar is performing its designated tasks. You can also use Log Stream within Azure App Services to check whats going on in your sidecar. Iterate and Improve: Continuously evaluate the performance of your sidecar and make adjustments as necessary. The flexibility of the sidecar pattern allows you to iterate and enhance the functionalities as your application evolves. Useful Links # Below are some useful links if you would like to learn more.\nA Glimpse into the Future: The Sidecar Pattern on Linux App Service - Microsoft Community Hub\nTutorial: Configure a sidecar container - Azure App Service | Microsoft Learn\nA Step-by-Step Guide to Datadog Integration with Linux App Service via Sidecars - Azure App Service\nPowering Observability: Dynatrace Integration with Linux App Service via Sidecars - Azure App Service\nLeveraging Redis as a Sidecar for Linux App Service - Azure App Service\nOptimizing SLM with ONNX Runtime: Phi-3 on CPU with Sidecars for App Service - Azure App Service\nEnjoy and let me know what you use sidecars for!\n","date":"27 August 2024","externalUrl":null,"permalink":"/2024/08/27/unleashing-the-power-of-azure-app-service-sidecars-enhancing-your-cloud-applications/","section":"Posts","summary":"","title":"Unleashing the Power of Azure App Service Sidecars: Enhancing Your Cloud Applications","type":"posts"},{"content":"In today\u0026rsquo;s data-driven landscape, safeguarding sensitive information is paramount, especially when leveraging cloud technologies. Transparent Data Encryption (TDE) offers a robust solution by encrypting SQL Server data at rest, thus enhancing security by preventing unauthorized access. This blog post delves into implementing TDE on Azure SQL Database using custom managed keys stored within Azure Key Vault.\nTDE is a technology that performs real-time encryption and decryption of the data and log files in SQL Server, Azure SQL Database, and Azure SQL Managed Instance. It ensures that data files are encrypted on the disk, enhancing security by adding a layer of protection that does not require changes to existing applications. TDE works by encrypting the storage of an entire database using a symmetric key called the Database Encryption Key (DEK). This key is then protected by a certificate stored in the server, or, in more secure environments, by an asymmetric key protected by an external key management system like Azure Key Vault.\nThe primary advantage of TDE is its transparency to applications accessing the database. Applications can run queries and process data as usual, with no need to modify existing queries or application code. This seamless approach not only simplifies the implementation of encryption but also minimizes the impact on performance. By securing data at rest without altering how data is accessed, TDE provides a straightforward, effective method for meeting regulatory and compliance requirements, making it an essential component of a comprehensive data protection strategy in the cloud.\nIn this blog post, we\u0026rsquo;ll explore how to enhance the security features of TDE by integrating it with custom managed keys from Azure Key Vault, offering more granular control over encryption keys and compliance with stringent data protection policies.\nIn the code below I am referencing the Azure Verified Modules project which is written by Microsoft and worth checking out.\nStep 1 - Create an Azure KeyVault Key which we can use for TDE\n// KeyVault settings var keyVaultName = \u0026lsquo;kv-${customerName}-${environmentName}-${locationShortCode}\u0026rsquo;\n//MARK: createKeyVaultKeyForAzureSQLTDE @description(\u0026lsquo;create an RSA key within KeyVault\u0026rsquo;) module createKeyVaultKeyForAzureSQLTDE \u0026lsquo;modules/key-vault/vault/key/main.bicep\u0026rsquo; = { scope: resourceGroup(spokeRg.name) name: \u0026lsquo;keyVaultKey\u0026rsquo; params: { keyVaultName: keyVaultName name: keyName keySize: 2048 kty: \u0026lsquo;RSA\u0026rsquo; keyOps: [ \u0026rsquo;encrypt\u0026rsquo; \u0026lsquo;decrypt\u0026rsquo; \u0026lsquo;sign\u0026rsquo; \u0026lsquo;verify\u0026rsquo; \u0026lsquo;wrapKey\u0026rsquo; \u0026lsquo;unwrapKey\u0026rsquo; ] tags: tags attributesEnabled: true } dependsOn: [ spokeRg createKeyVault ] }\nThe code above will create a new Key which we can use for TDE within an existimg KeyVault.\nOnce we have the key created we now need to figure out to to add this to Azrue SQL which proved to be harder than it should have (might be a bug in the modules, not sure yet). I couodnt figure out how to add the uri in the format it asks for - everything I tried didnt work so gave up and used the code below.\nTo get this working i used a custom module which is below:-\n// sqlserver-keyvault-encryption.bicep param sqlServerName string param keyVaultName string param keyName string param keyVersion string param keyUri string param autoRotationEnabled bool\nresource sqlServer \u0026lsquo;Microsoft.Sql/servers@2022-05-01-preview\u0026rsquo; existing = { name: sqlServerName }\n// Create sql server key from key vault resource sqlServerKey \u0026lsquo;Microsoft.Sql/servers/keys@2022-05-01-preview\u0026rsquo; = { name: \u0026lsquo;${keyVaultName}${keyName}${keyVersion}\u0026rsquo; parent: sqlServer properties: { serverKeyType: \u0026lsquo;AzureKeyVault\u0026rsquo; uri: keyUri } }\n// Create the encryption protector resource propector \u0026lsquo;Microsoft.Sql/servers/encryptionProtector@2022-05-01-preview\u0026rsquo; = { name: \u0026lsquo;current\u0026rsquo; parent: sqlServer properties: { serverKeyType: \u0026lsquo;AzureKeyVault\u0026rsquo; serverKeyName: sqlServerKey.name autoRotationEnabled: autoRotationEnabled } }\nI then call this custom modue and pass in the necessary parameters like so: -\n//MARK: encryption module encryption \u0026lsquo;modules/custom/sqlserver-keyvault-encryption.bicep\u0026rsquo; = { scope: resourceGroup(spokeResourceNetworkGroupName) name: \u0026lsquo;sqlserver-keyvault-encryption\u0026rsquo; params: { sqlServerName: sqlServerName keyVaultName: keyVaultName keyName: keyName keyVersion: last(split(keyVaultKey.properties.keyUriWithVersion, \u0026lsquo;/\u0026rsquo;)) keyUri: keyVaultKey.properties.keyUriWithVersion autoRotationEnabled: autoRotationEnabled } dependsOn: [ spokeRg createsqlServer ] }\nThis will then add TDE Encryption using custom managed keys and look like this:-\nThe screenshot above shows you when you have configured SQL TDE at the server level as database level is still in preview.\nSummary\nI hope this helps someone at somepoint as I spent some time trying to get the url for the version of the secret out of keyvault but it just wasnt happening.\n","date":"11 August 2024","externalUrl":null,"permalink":"/2024/08/11/implementing-tde-in-azure-sql-with-custom-managed-keys-from-azure-key-vault/","section":"Posts","summary":"","title":"Implementing TDE in Azure SQL with Custom Managed Keys from Azure Key Vault","type":"posts"},{"content":"Introduction\nHello everyone, this blog post is my entry for this year\u0026rsquo;s AzureSpringClean event for 2024, which Thomas Thornton and Joe Carlyle run yearly.\nThis blog post covers how to save $$$ in Azure, so let\u0026rsquo;s dive straight in.\nIn this blog post which I also gave a talk on at the Glasgow Azure User Group in February, I cover how to check where you can save money in Azure, so at this point, you\u0026rsquo;re probably already spending more than you should, trust me there isn\u0026rsquo;t an environment I haven\u0026rsquo;t seen cost savings anywhere as yet, is something you need to check for regularly.\nAzure Advisor\nThis is a free service in the Azure portal that uses AI to monitor your environment and it will recommend where you can save money, typically this is due to not using Azure reservations or your Virtual Machines needing to be resized, however, there are other areas across Azure where you can save money.\nThe screenshot below is of Advisor in Azure: -\nWe can use Advisor to check for the following kinds of recommendations:-\nCost Security Reliability Operational Excellence Performance This article concentrates on Cost savings, but I highly recommend you check Advisor weekly.\nIf you click on Cost on the left you will see a screenshot like the one below: -\nHere we can see all of the cost recommendations including right-sizing virtual machines, using reserved instances on SQL and Cosmos DB, and even reservations on App Service instances and more.\nReservations\nNot a lot of people know this but you can add reservations for numerous different Azure resources, including things like managed disks and Blob storage, etc.\nYou save thousands of $$$ by making use of Azure reservations especially for Azure Virtual Machines, just make sure to rightsize them using Advisor recommendations before you add any reservations.\nAzure Hybrid Benefit\nAzure Hybrid Benefit allows you to use your existing on-premises Windows Server and SQL Server licenses with Software Assurance or qualifying subscription licenses to pay a reduced rate (\u0026ldquo;base rate\u0026rdquo;) on Azure services.\nInstead of paying the full price for new Windows Server or SQL Server licenses in Azure, you can leverage your existing investments to save on costs.\nYou can activate AHB by purchasing licenses within Partner Centre and then applying them to your Azure Virtual Machine(s) like the following screen, the license costs around $260 but can save you thousands depending on the size of your Virtual Machine(s).\nAzure Log Analytics Workspaces\nBe careful what you log, make sure you are checking the usage and estimated costs on each of your log analytics workspaces. It is quite easy to turn on logging on app services or containers to try to locate issues in the code or performance tuning and forget to turn them off.\nCost Optimization\nWithin Advisor I want to point out a cool Azure Workbook - go to Advisor, click on Workbooks, and then locate the Cost Optimization workbook which is still in preview.\nThis workbook will highlight your Rate optimization and Usage Optimization and show you what you\u0026rsquo;re using and what you have forgotten to delete.\nIt shows you things like whether are you using all of your reservations and if you need more, it shows you things like unattached public IP addresses, deallocated Virtual Machines, and loads more, please do check it out.\nBudgets\n**Every subscription should have an Azure Budget. **I shall repeat this - Every subscription should have an Azure Budget.\nAzure budgets allow users to set spending thresholds and receive alerts when their Azure spending approaches or exceeds those thresholds. This helps organizations to manage and control their Azure spending by providing visibility into usage and costs. This will stop you from getting a large bill at the end of the month and you would be shocked at the costs accumulated through the past month.\nSummary\nCheck Advisor weekly, add a budget to all of your subscriptions, resize your Virtual Machines, make use of reservations, check how much you\u0026rsquo;re spending on logging, and also make sure you turn on Defender for Cloud (security thing not a cost thing).\n","date":"3 March 2024","externalUrl":null,"permalink":"/2024/03/03/azure-spring-clean-march-2024/","section":"Posts","summary":"","title":"Azure Spring Clean March 2024","type":"posts"},{"content":"","date":"3 March 2024","externalUrl":null,"permalink":"/categories/best-practices/","section":"Categories","summary":"","title":"Best Practices","type":"categories"},{"content":"I went from no knowledge of Azure to an Azure MVP in under 2 years, passing 9 exams along the way. Continuous learning is something I genuinely enjoy — there is always something new to master in the cloud world.\nYou can verify all active credentials on my Credly profile.\nBy the Numbers # 🔥 Modules 🕐 Learning Paths 🏆 Active Certs ✅ Exams Passed 📋 Legacy Certs ⏱️ Training 515 93 44 67 22 376 hr 🔗 View my official Microsoft Learn transcript\nExpert Certifications # Azure Solutions Architect Expert\nMicrosoft\nDevOps Engineer Expert\nMicrosoft · AZ-400\nAssociate Certifications # Azure Administrator Associate\nMicrosoft · AZ-104\nAzure AI Engineer Associate\nMicrosoft · AI-102 · 2021\nAzure Database Administrator Associate\nMicrosoft · DP-300 · 2021\nFundamentals # Microsoft Certified: Azure Fundamentals — AZ-900 Trainer \u0026amp; Recognition # Microsoft MVP — Azure\nMicrosoft · 2026–2027\nHistorical \u0026amp; Legacy Exams # These are exams I passed during my early Azure journey and .NET career. Many of these certifications have since been retired by Microsoft.\nAZ-300 Microsoft Azure Architect Technologies (retired — predecessor to AZ-305) AZ-301 Microsoft Azure Architect Design (retired — predecessor to AZ-305) AZ-100 Microsoft Azure Infrastructure and Deployment beta (retired) AZ-101 Microsoft Azure Integration and Security beta (retired) 70-532 Developing Microsoft Azure Solutions (retired) 70-583 Pro: Designing and Developing Windows Azure Applications (retired) MCSD Microsoft Certified Solution Developer (one of the first 50 in the world) ","date":"1 January 2024","externalUrl":null,"permalink":"/certifications/","section":"Azure Greg","summary":"","title":"Certifications","type":"page"},{"content":"If you are intending on visiting Seattle anytime soon especially for the upcoming MVP Summit in March 2024 then this blog post will help. (you may need an esta, visa for the states - https://esta.cbp.dhs.gov/esta)\nWhere to stay, ok so there are lots of hotels, my advice is either choose to stay near Redmond, google for the Aloft Seattle Redmond, this is near to the campus but not much to do at night, or go for somewhere in Bellevue, last year I stayed at the Hilton Bellevue (Address: 300 112th Avenue Southeast, Bellevue, WA 98004, United States) and it was good, lots of other MVP\u0026rsquo;s were staying there or in the other couple of hotels that were next to it, If you stay there its a 15 min walk into Bellevue, so just enough to work up an appetitite or long enough to have a laugh walking home in a group of friends.\n**Advice **- use something like booking.com and get a hotel with a free cancellation, book early.\nOk so asuming you have flight and hotel booked what are the things to fo once in Seattle, here is a list of some of the things I found to be nice to see / good fun.\nDowntown Seattle (not near much but its where the sightseeing is)\nSeattle Kracken Ice hockey was outstanding and would go back Space Needle, go up just as its about to get dark for some awesome photos and views Take the ferry to Bainsbridge Island, if you have a car deffo go for a drive, if not still worth doing, again try to come back in the dark as the views are awesome Seattle Spin, friendly bar with table tennis tables and its good fun, just dont fall and almost break your ankle like I did. Pike Place Market, go there and wonder about and check out all the shops downstairs, there is a lot to see, breakfast there is a good start to the morning. The original Starbucks is across he road from the Pike Place Market Seattle Underground You can see most of the sights in Downtown in a day or less so look into other things to do.\nBellevue (where you will be a lot of the time when not at campus)\nThis list will grow over time as I update it.\nJoeys Bar Fogo de Chão - Brazilian Steakhouse CheeseCake Factory - does more than just cheesecake https://beechershandmadecheese.com/ - hear this is fab too Other Tips\nThe week is a long week so pace yourself, you get to be on campus which is just amazing and you get a badge which means you get to use the free shuttle buses and taxis onsite to get from building to building. The Microsoft campus is huge and I do mean huge, checkout the visitor centre and the tree houses, from memory theyre behind build 32 - https://www.google.com/maps/place/Microsoft+Treehouse/@47.6434445,-122.126478,17z/data=!3m1!4b1!4m6!3m5!1s0x54906d7a717097e1:0x5bc5877a17a05faa!8m2!3d47.643441!4d-122.1216071!16s%2Fg%2F11hckqvgp6?entry=ttu\nMost people fly home Saturday as there might and I do mean might be something on Friday, not always.\nSummary\nI wrote this quickly but any questions do let me know (ask on twitter) , oh and Vancouver is only like 2 hours away.\n","date":"18 December 2023","externalUrl":null,"permalink":"/2023/12/18/visiting-seattle-mvp-summit-2024/","section":"Posts","summary":"","title":"Visiting Seattle (MVP Summit 2024)","type":"posts"},{"content":"Lots of you may be familiar with Azure Front door but if not then let me summarize.\nAzure Front Door is a cloud-based service from Microsoft Azure that provides a scalable and secure way to route traffic to various backend services, such as web applications, APIs, and microservices. It acts as a global load balancer that can intelligently distribute traffic across multiple regions based on geographic location, latency, and other metrics.\nSome of the key features of Azure Front Door include:\nGlobal load balancing: Azure Front Door can intelligently distribute traffic across multiple backend services located in different regions, ensuring optimal performance and availability for users worldwide. Security: Azure Front Door provides SSL termination, DDoS protection, and other security features to help protect your backend services from malicious attacks. Traffic routing: Azure Front Door can route traffic based on user location, content type, URL path, and other criteria, making it easy to implement complex traffic routing scenarios. High availability: Azure Front Door is designed to provide high availability and reliability, with built-in redundancy and automatic failover capabilities. Analytics: Azure Front Door provides detailed analytics and monitoring capabilities, including real-time metrics, logs, and alerts, to help you optimize your traffic routing and improve the performance of your backend services. Overall, Azure Front Door is a powerful tool for managing and optimizing traffic to your backend services, helping to ensure high performance, scalability, and security for your applications and APIs.\nWhen you create an Azure Web application out of the box you get a wesbite that ends with the name .azurewebsites.net, many customers want to use a custom domain name so that it is much cleaner and nicer like gregorsuttie.com instead of gregorsuttie.azurewebsites.net\nSo if you are using Azure Front Door as part of a solution along with a custom domain and you wold like to restrict access to users so that they cannot go to the .azurewebsites.net part then you can go to Networking and use what\u0026rsquo;s called an Access restriction.\nNow they will see this instead:-\nYou can even whitelist IP addresses so that certain users can still use the .azurewebsites.net as well as the kudu interface.\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"27 November 2023","externalUrl":null,"permalink":"/2023/11/27/azure-front-door-and-access-restrictions/","section":"Posts","summary":"","title":"Azure Front Door and access restrictions","type":"posts"},{"content":"This blog post covers my recent trip to Seattle for the Microsoft Ignite Conference in Seattle last week, I always give my honest opinion and have no filter, last years Ignite wasnt great, this years was very much improved and here is why.\nThis years Ignite was in a new venue, right next door to last years but now its in the newer Seattle Convention Centre and the venue itself works great, not huge amounts of walking and the layout just works. The weather was good, the atmosphere was good all week, there was swag and even the Ignite bag option made a welcome return. Satya was in person for the Keynote which was also awesome to attend his keynote.\nI enjoyed this years Ignite for several reasons, I thought the sessions were of a good standard, some people still saying not enough deep dive content but all said and done I thought it hit the mark.\nI felt like i was witnessing the dawn of a new era, It really did feel like this is the age of AI, now I know were all sick of hearing about copilots and AI etc etc but this is the start of a huge change in the industry, our way of working is already changing and we are just starting out on the journey, I can\u0026rsquo;t wait to see where we are this time next year as these language models and the tooling around them gets better we can invent new ways of working faster and smarted - bring it on.\nIf your or your company isnt seriously looking into AI and what it offers I think you\u0026rsquo;ll be missing out for sure.\nSo Ignite was better because of the following reasons:-\nSpeakers hung around after sessions to talk The ask the experts was super popular The venue made it easy to find rooms and move around The community lounge had some heavy hitters stop bye and hang out, chat and be able to network with them The Keynote\u0026rsquo;s were in a cool venue with a nice atmosphere The content was all about the era of ai but its exciting times and a lot of the sessions demo\u0026rsquo;d whats new and whats coming next We had more some new MVP Networking meetups with the Azure Cosmos DB team on campus and the Azure MVP Leads Networking with old and new friends and just enjoying learning about new technologies and generally having fun. A big thing for me is meeting the people I connect with online so its so much fun to meet them in person and say hi. The after parties were pretty good, I really enjoyed the silent disco not gonna lie Highlights included meeting Brendan Burns, Mark Russenovich, Erin Chapple, some guys called Patch and Switch, dunno who they are really, and going to watch the Seattle Kracken which was awesome!\nSee you in Vegas next year!\n","date":"23 November 2023","externalUrl":null,"permalink":"/2023/11/23/ignite-2023-in-person-review/","section":"Posts","summary":"","title":"Ignite 2023 In-Person Review","type":"posts"},{"content":"Last night I interviewed a chap on my stream called John Aziz, John is 22 years of age and is a Gold Microsoft Studnt Ambassador. His name popped up when I saw this tweet from Savannah Ostrowski who is the Product Lead for the Azure Developer CLI.\nhttps://twitter.com/savostrowski/status/1711447105569775765\nI love opensource and I hear good things about Hacktoberfest, which is a month-long celebration of open-source projects, their maintainers, and the entire community of contributors.\nI wanted to know more about John, his open source contributions and especially as its related to the Azure Developer CLI which i think if your into Azure at all (not just devs) then you should chekck it out asap.\nJohn came onto my stream last night and introduced himself, he introduced Hacktoberfest and talked people through how they can get started in opensource, and also in Hacktoberfest itself.\nJohn then picks an issue that is needing resolved and starts to work on it **LIVE **- ok now this is seriously impressive, I havent honestly seen anyone do this yet, I\u0026rsquo;m sure people do these on streams but I have never spoken to John, hes 22 ,and doesnt even know the Go programming language.\nI was thoroughly impressed, if your interested in watching the link is below.\nhttps://youtube.com/live/zgoj8QK3UAM\nJohn is going to be working at Microsoft some day and probably not long from now, I have no doubts in that. I hope you enjoy the video and learning about opensource, how to get started\n","date":"14 October 2023","externalUrl":null,"permalink":"/2023/10/14/opensource-walkthrough-step-by-step-live/","section":"Posts","summary":"","title":"OpenSource walkthrough step by step LIVE!","type":"posts"},{"content":"Recently I invited Freek Berson onto my Azure livestream to dicuss Bicep and for Freek to demo 3 of his favourite new features.\nFreek and I chatted about\nWhat is Bicep? How is Bicep being adopted? Why is IaC important? Demo: Bicep Parameter Files Demo: Opinionated Formatting Demo: Deployment Stacks What you need to use these features Call to Action You can catch the livestream below\nhttps://youtube.com/live/E-j022nCRFM Please subsribe and leave comments :)\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"24 July 2023","externalUrl":null,"permalink":"/2023/07/24/3-new-azure-bicep-features/","section":"Posts","summary":"","title":"3 New Azure Bicep Features","type":"posts"},{"content":"This past week I was joined my Marc Duiker on my Azure stream and Marc came on to cover off an intro to Dapr and show a few examples of why Dapr is such an interesting project if you are doing a Cloud Native project and especially if you are interested in learning more about Microservices and looking for a way to make the complex areas of microservices far less complex.\n\u0026ldquo;Dapr (Distributed Application Runtime) is a free and open source runtime system designed to support cloud native and serverless computing. Its initial release supported SDKs and APIs for Java, . NET, Python, and Go, and targeted the Kubernetes cloud deployment system.\u0026rdquo;\nIn our livestream Marc introduces Dapr and runs through just a couple of slides before we dive into Visual Studio code, crack open the code and he start\u0026rsquo;s showing me some demonstrations on using the Dapr CLI showing how to the following:-\nDapr 101: start building distributed applications with ease Dapr building block API\u0026rsquo;s When is it really useful to use Dapr? Demo: State management using Dapr Demo: Resiliency built into Dapr Demo: Workflows using Dapr Demo: Chaining Workflows using Dapr Demo: Observability using Dapr If you would like to watch the video and learn more then you can watch the video from here:\nhttps://youtube.com/live/82qRiLAihXU Please subsribe and leave comments :)\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"24 July 2023","externalUrl":null,"permalink":"/2023/07/24/dapr-101-with-azure-greg-and-marc-duiker/","section":"Posts","summary":"","title":"Dapr 101: with Azure Greg and Marc Duiker","type":"posts"},{"content":"","date":"26 June 2023","externalUrl":null,"permalink":"/live-stream-availability/","section":"Azure Greg","summary":"","title":"Live Stream Availability","type":"page"},{"content":"Proud of this one and decided to blog about it so I have it on my blog.\n4 years I had no Azure experience, hard work pays off. Time to plan whats next\u0026hellip;\n","date":"15 June 2023","externalUrl":null,"permalink":"/2023/06/15/outstanding-contribution-to-microsoft-coummunity-global-winner/","section":"Posts","summary":"","title":"Outstanding Contribution to Microsoft Coummunity - Global Winner","type":"posts"},{"content":"In this last part of talking about Azure VM Extensions I will make a couple of changes to refactor and make things better. Once you have more time, go back and refactor your code, its a good feeling to go back and improve upon the code.\nSo in this case I wanted to use Managed Identities for the CustomScriptExtension and I couldn\u0026rsquo;t get it working at first and due to time pressures I resorted to using SAS tokens. The thing I soon realised was that this is not the best way to go and I really wanted to revisit the codebase and get Managed Indentites working.\nI see a lot of people created System Assigned Managed Identities and I try my best not to use these as they are tied to a resource, I always create a Managed Identity from the Azure Portal or Bicep first and then use that.\nSo I refactor my Bicep code for the CustomScriptExtension to use the Managed Identity Ive created and now the code is no longer needing to make use of a new SAS token each time it ran and then use this, its more secure to use a User Assigned Managed Identity.\n@description(\u0026lsquo;Deploy required userManagedIdentity\u0026rsquo;) module userManagedIdentity \u0026lsquo;./modules/Microsoft.ManagedIdentity/userAssignedIdentities/deploy.bicep\u0026rsquo; = { scope: resourceGroup(multiTenantResourceGroupName) name: userManagedIdentityName params: { name: userManagedIdentityName location: location tags: tags } dependsOn: resourceGroups }\nThe above Bicep code creates our User Assigned Managed Identity and then we can make use of this within our CustomScriptExtension like so.\nmodule virtualMachineName_ZabixxInstaller \u0026lsquo;./modules/Microsoft.Compute/virtualMachines/extensions/deploy.bicep\u0026rsquo; = { scope: resourceGroup(multiTenantResourceGroupName) name: \u0026lsquo;ZabixxInstaller\u0026rsquo; params: { enableAutomaticUpgrade: false name: \u0026lsquo;ZabixxInstaller\u0026rsquo; publisher: \u0026lsquo;Microsoft.Compute\u0026rsquo; type: \u0026lsquo;CustomScriptExtension\u0026rsquo; typeHandlerVersion: \u0026lsquo;1.10\u0026rsquo; virtualMachineName: virtualMachineNameBackend location: location autoUpgradeMinorVersion: true settings: { fileUris: [ \u0026lsquo;https://${storageAccountName}.blob.core.windows.net/${containername}/InstallZabbixAgent.ps1\u0026rsquo; \u0026lsquo;https://${storageAccountName}.blob.core.windows.net/${containername}/zabbix.zip\u0026rsquo; ] } protectedSettings: { commandToExecute: \u0026lsquo;powershell.exe -ExecutionPolicy Unrestricted -File InstallZabbixAgent.ps1\u0026rsquo; managedIdentity: { objectId : userManagedIdentity.outputs.principalId } } } dependsOn: [ resourceGroups virtualMachineBackend ] }\nSummary\nIn summary we went from generating a SAS token off of the Azure Storage account to changing this to use a User Assigned Managed Identity which is more secure.\n**Part 1 - AZURE VM EXTENSIONS: PART 1 DSC EXTENSIONS **https://gregorsuttie.com/2023/05/30/azure-vm-extensions-part-1-dsc-extensions/ **Part 2 - AZURE VM EXTENSIONS: PART 2 CUSTOMSCRIPTEXTENSION **https://gregorsuttie.com/2023/06/05/azure-vm-extensions-part-2-customscriptextension/ Don’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"11 June 2023","externalUrl":null,"permalink":"/2023/06/11/azure-vm-extensions-part-3-refactoring-our-code/","section":"Posts","summary":"","title":"AZURE VM EXTENSIONS: PART 3 Refactoring our code","type":"posts"},{"content":"This blog post covers some of the battles I have had trying to install some software onto a VM within Azure. There are many ways to go about this and at the end of the day, yeah you live to fight another day.\nHigh level requirements:\n1 - Install Zabbix Agent (which is a windows service) onto the same VM and ensure the service starts correctly.\nAs like most things in life there is more than one way to do something, I could have used RunCommands I could add onto the DSC and added this step into part 1 etc. etc.\nI went with using an Azure CustomScriptExtension, maybe not the best option, who knows, but here is how to get this working.\nmodule virtualMachineName_ZabixxInstaller \u0026lsquo;./modules/Microsoft.Compute/virtualMachines/extensions/deploy.bicep\u0026rsquo; = { scope: resourceGroup(multiTenantResourceGroupName) name: \u0026lsquo;ZabixxInstaller\u0026rsquo; params: { enableAutomaticUpgrade: false name: \u0026lsquo;ZabixxInstaller\u0026rsquo; publisher: \u0026lsquo;Microsoft.Compute\u0026rsquo; type: \u0026lsquo;CustomScriptExtension\u0026rsquo; typeHandlerVersion: \u0026lsquo;1.10\u0026rsquo; virtualMachineName: virtualMachineNameBackend location: location autoUpgradeMinorVersion: true settings: { fileUris: [ \u0026lsquo;https://${storageAccountName}.blob.core.windows.net/${containername}/InstallZabbixAgentGS.ps1?${DSCSAS}\u0026rsquo; \u0026lsquo;https://${storageAccountName}.blob.core.windows.net/${containername}/zabbix.zip?${DSCSAS}\u0026rsquo; ] } protectedSettings: { commandToExecute: \u0026lsquo;powershell.exe -ExecutionPolicy Unrestricted -File InstallZabbixAgentGS.ps1\u0026rsquo; managedIdentity: {} } } dependsOn: [ resourceGroups virtualMachineBackend ] }\nSo lets break this code down, firstly I make use of already written Azure Bicep Resource Modules which you can grab here :- https://github.com/Azure/ResourceModules/\nI\u0026rsquo;m also using version 1.10 of this extension so make sure to watch out for that.\nThe **fileUris **are pointing to a storage account that has public access DISABLED, enabling public access is not what you want, notice the part at the end which is a SAS Token, I tried to get this working using a Managed Identity and gave up as running out of time, the docs say you can use a Managed Identity and maybe I will go back and try this now that I have more time, then update this blog post.\n\u0026ldquo;If I generate a new SAS each time you deploy based on deployment time, it will re-run the Script extensions every time, since that SAS value changes. If you move to Managed Identity, the script extension does not have to process when you redeploy, it will be skipped, since the configuration/settings didn\u0026rsquo;t change. If you want it to redeploy, with no changes, then you can change the value of the forceUpdateTag value.\u0026rdquo;\nHuge shout out to https://github.com/brwilkinson he was helping me with this a LOT, and was super helpful, I owe it to him for helping me get this working and I owe it to him to go back and test it using Managed Identity.\nSummary\nSo in summary I am generating a SAS token from the existing storage account like I do in Part 1 and then I pass that into fileUris so that I don\u0026rsquo;t run into permission issues.\nPart 1 - **AZURE VM EXTENSIONS: PART 1 DSC EXTENSIONS **https://gregorsuttie.com/2023/05/30/azure-vm-extensions-part-1-dsc-extensions/ **Part 3 - AZURE VM EXTENSIONS: PART 3 REFACTORING OUR CODE **https://gregorsuttie.com/2023/06/11/azure-vm-extensions-part-3-refactoring-our-code/ Don’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"5 June 2023","externalUrl":null,"permalink":"/2023/06/05/azure-vm-extensions-part-2-customscriptextension/","section":"Posts","summary":"","title":"Azure VM Extensions: Part 2 CustomScriptExtension","type":"posts"},{"content":"This blog post covers some of the battles I have had trying to install some software onto a VM within Azure. There are many ways to go about this and at the end of the day, yeah you live to fight another day.\nHigh level requirements:\n1 - Install Octopus Deploy Tentacle onto a VM and have the agent running. 2 - Install Zabbix Agent (which is a windows service) onto the same VM and ensure the service starts correctly. (I\u0026rsquo;ll cover this in part 2 of the blog post).\nNow as said previous, many ways to do this, I looked up what is available from Octopus Deploy as they always have good stuff, they used to have an Azure Extension you could use but they binned that off in favour of PowerShell DSC. I have never used PowerShell DSC, so I\u0026rsquo;m game for learning anything I know nothing about. Turns out they have the PowerShell DSC available to download and so I just needed to write the Bicep that grabs this from an Azure storage account and away we go\u0026hellip;\nI have the Bicep for creating the VM and I let that do its thing and decide to create a separate module for the VM DSC extension. So I grab the zip file from Octopus Deploy and read thru the code etc and all good and then I add this to my Azure storage account manually and now I need to figure out the Bicep code within the extension to download the zip file and have it run. The issue I run into is that the Azure storage account isn\u0026rsquo;t public so I need to figure out on how to generate a SAS token from the storage account and use that to be able to grab the file from storage and download it to the VM.\nIn order to get a SAS token out for all blobs (might not be what you want so be careful) you can do something like this:-\nvar allBlobDownloadSAS = listAccountSAS(storageAccount.name, \u0026lsquo;2022-09-01\u0026rsquo;, { signedProtocol: \u0026lsquo;https\u0026rsquo; signedResourceTypes: \u0026lsquo;sco\u0026rsquo; signedPermission: \u0026lsquo;rl\u0026rsquo; signedServices: \u0026lsquo;b\u0026rsquo; signedExpiry: \u0026lsquo;2024-01-01T00:00:00Z\u0026rsquo; }).accountSasToken\noutput sasToken string = allBlobDownloadSAS\nSo this would be part of the storage account module and just use the SAS token like so:-\nvar DSCSAS = storageAccount.outputs.sasToken\nNow here comes the bit to pay attention too. The Bicep for the VM Extension is as follow, now the URL only worked for me if I appended the SAS token at the end, I don\u0026rsquo;t want to make the storage account publicly accessible so I needed the SAS token\n@description(\u0026lsquo;Add the Octopus Deploy Tentacle to the Backend VM\u0026rsquo;) module vmName_dscExtension_OctopusDeployExtension \u0026lsquo;./modules/Microsoft.Compute/virtualMachines/extensions/deploy.bicep\u0026rsquo; = if (addVirtualMachine) { scope: resourceGroup(myResourceGroupName) name: \u0026lsquo;vmName_dscExtension\u0026rsquo; params: { autoUpgradeMinorVersion: true enableAutomaticUpgrade: false name: \u0026lsquo;vmName_dscExtension\u0026rsquo; publisher: \u0026lsquo;Microsoft.Powershell\u0026rsquo; type: \u0026lsquo;DSC\u0026rsquo; typeHandlerVersion: \u0026lsquo;2.77\u0026rsquo; virtualMachineName: virtualMachineNameBackend location: location settings: { configuration: { url: \u0026lsquo;https://${storageAccountName}.blob.core.windows.net/${containername}/OctopusTentacle.zip?${DSCSAS}\u0026rsquo; script: \u0026lsquo;OctopusTentacle.ps1\u0026rsquo; function: \u0026lsquo;OctopusTentacle\u0026rsquo; } configurationArguments: { ApiKey: tentacleApiKey OctopusServerUrl: tentacleOctopusServerUrl Environments: tentacleEnvironments Roles: tentacleRoles ServerPort: tentaclePort } } } dependsOn: [ resourceGroups virtualMachineBackend ] }\nNo doubt you can do this with a Managed Identity but I couldn\u0026rsquo;t get it working and had spent a LOT of time on this so gave up and used the SAS token instead.\nNote The DSC extension takes care of unzipping the files onto the VM and running the PowerShell script called OctopusTentacle.ps1\nSummary In summary this is how you can create a SAS Token in Bicep from a storage account and also how you can reference a blob in the storage account and install it. I realise the way I am doing this might not be best so if you find an alternative or have feedback do please let me know.\n**Part 2 - AZURE VM EXTENSIONS: PART 2 CUSTOMSCRIPTEXTENSION **https://gregorsuttie.com/2023/06/05/azure-vm-extensions-part-2-customscriptextension/ Part 3 - **AZURE VM EXTENSIONS: PART 3 REFACTORING OUR CODE **https://gregorsuttie.com/2023/06/11/azure-vm-extensions-part-3-refactoring-our-code/ Don’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"30 May 2023","externalUrl":null,"permalink":"/2023/05/30/azure-vm-extensions-part-1-dsc-extensions/","section":"Posts","summary":"","title":"Azure VM Extensions: Part 1 DSC Extensions","type":"posts"},{"content":"At work a colleague reached out asking for some help with getting some python code querying an Azure SQL Server database and getting it all working. This is right up my street, fixing things I don\u0026rsquo;t use on a day to day basis is something of a challenge I just love working on.\nI will list out the steps in order to achieve this, bare in mind we have Azure SQL deployed as well as Azure DataBricks at this point and when we try to query the Azure SQL Database we see errors like the ones below:-\n\u0026ldquo;com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host .database.windows.net, port 1433 has failed. Error: \u0026ldquo;connect timed out. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.\u0026rdquo;.\nas well as this one\ncom.microsoft.sqlserver.jdbc.SQLServerException: Cannot open server \u0026quot;\u0026rdquo; requested by the login. The login failed. ClientConnectionId:c5977705-8b83-4f12-a4ce-0268ac868798\nOk so reading these errors might mean you look into whitelisting IP addresses.\nLets write the steps down to fix this issue and maybe it will help someone, probably me when I forget I wrote this blog next week :)\nOk so we did the following steps:-\nAdded a new Subnet to our databricks-vnet Find your Azure SQL Server instance in the portal, go to the Networking tab and clicked Private access, click the + to Create a Private Endpoint, on the Virtual Network tab choose the Virtual network your using for DataBricks and select the new Subnet we want to use. Make sure to keep \u0026lsquo;Integrate with Private DNS Zone\u0026rsquo; ticked. Once the Private Endpoint has been created click on it and go to DNS Configuration, click on the link towards the bottom under the heading Private DNS Zone to be taken to your Private DNS Zone. Now click on \u0026lsquo;Virtual network links\u0026rsquo;. Again click the + to add a new Virtual Network Link and choose the DataBricks VNet, don\u0026rsquo;t tick Enable auto registration. So it s just like any other Private Endpoint config, just remember to do the Virtual Network link. You also don\u0026rsquo;t need to whitelist an IP Addresses or anything like that.\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"15 May 2023","externalUrl":null,"permalink":"/2023/05/15/azure-databricks-talking-to-azure-sql-database-using-private-endpoints/","section":"Posts","summary":"","title":"Azure DataBricks talking to Azure SQL Database using Private Endpoints","type":"posts"},{"content":"We have wrapped up our Azure Fundamentals AZ-900 course which we ran on Lighthall.co\nHuge thank you to Lisa Hoving, Simon Lee and Matt Boyd for helping give this course.\nThe PDF\u0026rsquo;s are also available.\nPart 1\nPart-1-1Download\nPart 2\nPart-2Download\nPart 3\nPart-3Download\nPart 4\nPart-4Download\nDescribe cloud concepts (25–30%)\nDescribe cloud computing Describe the benefits of using cloud services Describe cloud service types Describe Azure architecture and services (35–40%)\nDescribe the core architectural components of Azure (first 3 topics) Describe the core architectural components of Azure (last 4 topics) Describe Azure compute and networking services (first 3 topics) Describe Azure compute and networking services (last 3 topics) Describe Azure storage services Describe Azure identity, access, and security (first 4 topics) Describe Azure identity, access, and security (last 4 topics) Describe Azure management and governance (30–35%)\nDescribe cost management in Azure Describe features and tools in Azure for governance and compliance Describe features and tools for managing and deploying Azure resources Describe monitoring tools in Azure The full playlist on YouTube can be found here - https://www.youtube.com/playlist?list=PLrDWgkiCvaPReqv4uagsi9oCjADR9ADBO\nSpecial thank you to Lisa Hoving , Simon Lee and Matt Boyd. We all hope you enjoy the content and find it useful.\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"10 May 2023","externalUrl":null,"permalink":"/2023/05/10/learn-the-azure-fundamentals-full-course-free-for-everyone/","section":"Posts","summary":"","title":"Learn the Azure Fundamentals - Full Course Free for everyone","type":"posts"},{"content":"If you are reading this and thinking should I start my own newsletter then the answer is yes go do it now, what are you waiting for?\nBy the way you can sign up for my newsletter below:-\nhttps://gregors-newsletter.beehiiv.com/subscribe\nI had been meaning to create a newsletter for probably the best part of a 4 years and just never got around to it, the main reason why I created a newsletter is to keep in touch with people who read it and think its useful. I\u0026rsquo;m also using is for side quests but more on that in the newsletter.\nNow I am only on week 2 of my newsletter and still figuring the format out - probably should have done that first but hey getting started is half the battle right. Go choose some where to create you\u0026rsquo;re newsletter and get started, you won\u0026rsquo;t regret it.\nI looked at Beehiiv and Mailchimp and I am not here to say which is better because quite frankly I just wanted to get going.\nI signed up to both and ended up going with Beehiiv, why who knows it just seemed to appeal more for whatever reason. Honestly it could have easily been Mailchimp, but anyhoo I went with Beehiiv.\nIt\u0026rsquo;s easy to use and easy to see your list of followers, easy to create posts and they can look pretty neat once you spend some time tweaking the look and feel. Its not a 10 out of 10 solid feel for me just yet, so I would give it maybe an 8 out of 10 but at this point I have 150 subscribers and I\u0026rsquo;m off and running.\nSo why should you create a newsletter - well if you want a list of people who follow you and have their email addresses should you want to reach these people then what better way to do it that with a weekly newsletter - that\u0026rsquo;s what its for in the end.\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"13 March 2023","externalUrl":null,"permalink":"/2023/03/13/why-you-should-start-a-newsletter/","section":"Posts","summary":"","title":"Why you should start a Newsletter.","type":"posts"},{"content":"This past week a customer asked me why cant I move some Azure Web apps from one app service plan to another so I had a quick look into the issue and learned something new so why not blog about it as its been a while.\nThe customer had 2 app service plans which were like so:-\nApp Service Plan 1, West Europe, rg-apps and was the Premium V2 P1:v2 Pricing Tier and OS Type Windows App Service Plan 2, West Europe rg-apps and was the Premium V2 P1:v2 Pricing Tier and OS Type Windows\nNow if you look at the docs (Manage App Service plan - Azure App Service | Microsoft Learn) it states that\n\u0026ldquo;You can move an app to another App Service plan, as long as the source plan and the target plan are in the same resource group, geographical region,and of the same OS type. Any change in type such as Windows to Linux or any type that is different from the originating type is not supported.\u0026rdquo;\nThe next part of the docs was the reason why we couldn\u0026rsquo;t move the apps from App Service Plan 1 to App Service Plan 2.\nSo to check this I went to each App Service Plan and on the overview screen you can click on JSON view and there you can find the JSON property called \u0026ldquo;webspace\u0026rdquo; and they had differing values.\nSo if you ever run into this issue you can check this webspace setting and that just might be the issue. I am blogging this in case I ever come across this again and I forget what to check.\nThe Third app service plan that was there, they could move apps into this one without issue. There is a couple of ways to solve the problem and I\u0026rsquo;ll let you figure out what they might be but the customer decided to leave them as is for now.\nDon’t forget to subscribe to my YouTube Channel. And my Newsletter\n","date":"13 March 2023","externalUrl":null,"permalink":"/2023/03/13/moving-azure-web-apps-between-app-service-plans/","section":"Posts","summary":"","title":"Moving Azure Web Apps between App Service Plans","type":"posts"},{"content":"Ok so this blog post covers deploying an Azure Web App that talks to an Azure SQL Server database which we will then secure access to the database using a VNet and a Private Endpoint.\nFirst we will deploy the web application which talks to Azure SQL, this wont be using a VNet nor a Private Endpoint and is unsecure and open to the internet, then we will tighten it down by adding the VNet and Private endpoint.\nWhat are Azure Private Endpoints? # An Azure Private Endpoint is a network interface that connects your virtual network privately to a service powered by Azure Private Link. This allows you to access Azure services over an Azure Private Link, which is a private endpoint in your virtual network. This means that traffic between your virtual network and the service traverses over the Microsoft Azure backbone network, eliminating exposure from the public internet.\nOk lets get to it.\n**Step 1 **\nFirstly follow the steps in this Microsoft article which you follow to deploy a web app taking to a local db, and then you can deploy an Azure SQL Database once we deploy to Azure (all steps within the following link)\nhttps://learn.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-dotnet-sqldatabase\nAt this point you should have an Azure Resource Group, an Azure App service plan (hosting plan) and an Azure Web Application deployed and working.\nEnable If the database has no tables then you need to Enable code migrations, so go to the Tools Menu and then select Nuget Package Manager and then Package Manager Console, in the console enable Code First Migrations by typing Enable-Migrations and then press enter.\nRead the section titled Enable Code First Migrations in Azure in the above link of the tutorial from Microsoft, make sure to publish to Azure again after this step.\n**Step 2 **\nNow we need to VNet integrate this so we will start off by creating a new Azure VNet, I created my VNet with a 10.1.0.0/16 address space and then I created subnets like so:-\nwebappsSubnet: 10.1.2.0.24 sqlSubnet: 10.1.1.0/24\nAnd then I clicked save.\nNow we have a VNet with 2 subnets, lets VNet integrate both the SQL Server and the Web Application.\nStep 3\nGo to the Web app you deployed to Azure and then select Networking and then choose VNET Integration and select your VNet and then choose the webappsSubnet.\nOnce you add VNet integration it should look something like the following:-\nStep 4\nOk so next do the same for the Azure SQL Server you deployed from the Microsoft guide and VNet integrate your Azure SQL Server.\nOn the Networking tab of your Azure SQL Server, make sure Public Access is set to Disable like the following:-\nNow click on the Private Access tab and select create a Private Endpoint.\nCreate a Private Endpoint in Azure # In the second screen, make sure to select the correct VNet and choose the sqlSubnet.\nSo now we have setup a Private Endpoint for Azure SQL and we have waited for a few seconds so that the connection-state is Approved we are all set.\nTroubleshooting # At this point your web application should be able to communicate with your backend Azure SQL Server using a Private Endpoint, if you delete the Private Endpoint you will see this:-\nYou will also see this is you don\u0026rsquo;t have the database populated, you should see the following if you have enable-migrations and re-published the code.\nConnecting to the Database from your local pc\nIf you want to check that we have tables and data you can use a number of tools to connect to your new Azure SQL Server. I tend to use SQL Server Management Studio because I am old :) - but before you can connect we need to change the Azure SQL Server firewall to allow my IP Address to connect to the database. To do this go to the Azure SQL server and then Networking and click on Public Access and fill it in like so:-\nGive the Rule Name a decent name so you know who\u0026rsquo;s IP address you have whitelisted, in case you need to add several.\nNote - Don\u0026rsquo;t tick the Box that says Allow Azure Services and resources to access this server, its not recommended to do this.\nOnce you connect you should see something like this:-\nSummary # To summarise this blog post we initially deploy an Azure App Service with a SQL Server backend Database. Then we VNet integrate the Web App and SQL Server and then we use a Private Endpoint so that the communication from the Web App to Azure SQL traverses over the Microsoft Azure backbone network, eliminating exposure from the public internet.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"16 January 2023","externalUrl":null,"permalink":"/2023/01/16/azure-web-app-using-azure-sql-using-private-endpoints/","section":"Posts","summary":"","title":"Azure Web app using Azure SQL using Private Endpoints","type":"posts"},{"content":"All 4 parts of the exam are now available on LinkedIn Learning, for anyone who was looking for all 4 parts they are now all available at the links below:-\nPart 1- https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-1-core-data-concepts\nPart 2 - https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-2-working-with-relational-data-on-azure-17091985\nPart 3 - https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-3-working-with-non-relational-data-on-azure/\nPart 4 - https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-4-analytics-workloads-on-azure\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"10 January 2023","externalUrl":null,"permalink":"/2023/01/10/azure-data-fundamentals-dp-900-on-linkedin-learning/","section":"Posts","summary":"","title":"Azure Data Fundamentals DP-900 on LinkedIn Learning","type":"posts"},{"content":"In this blog post I show you how to enable Defender for Cloud using Bicep\nMicrosoft Azure Defender is a cloud-based security solution that helps protect Azure resources and workloads running in Azure, on-premises, or in other clouds.\nAs always I try to make use of the following GitHub repository https://github.com/Azure/ResourceModules/ this is where I go to make use of the hundreds of already written Bicep scripts which I can make use of very quickly.\nI start by cloning the repository then lifting the files I need to make what ever I need to deploy work, in this case I want the following folder(s) https://github.com/Azure/ResourceModules/tree/84fe9dfd578a22079b03bbdee3554b9ac51c2dc2/modules/Microsoft.Security/azureSecurityCenter\nI store the files in a modules folder.\n// Defender for Cloud Details\n// Defender for Cloud parameters\nparam defenderAutoProvision string = \u0026lsquo;On\u0026rsquo; param defenderAppServicesPricingTier string = \u0026lsquo;Standard\u0026rsquo; param defenderVirtualMachinesPricingTier string = \u0026lsquo;Standard\u0026rsquo; param defenderSqlServersPricingTier string = \u0026lsquo;Standard\u0026rsquo; param defenderStorageAccountsPricingTier string = \u0026lsquo;Standard\u0026rsquo; param defenderDnsPricingTier string =\u0026lsquo;Standard\u0026rsquo; param defenderArmPricingTier string = \u0026lsquo;Standard\u0026rsquo;\nmodule enableDefenderForCloudOnSubscription \u0026lsquo;modules/defenderForCloud.bicep\u0026rsquo; = { name: \u0026lsquo;defenderForCloud\u0026rsquo; params: { scope: subscription().id workspaceId: createLogWorkspace.outputs.resourceID autoProvision: defenderAutoProvision virtualMachinesPricingTier: defenderVirtualMachinesPricingTier sqlServersPricingTier: defenderSqlServersPricingTier storageAccountsPricingTier: defenderStorageAccountsPricingTier appServicesPricingTier: defenderAppServicesPricingTier dnsPricingTier: defenderDnsPricingTier armPricingTier: defenderArmPricingTier } }\nTo run this I run a very small PowerShell script, that contains the following:-\n$deploymentID = (New-Guid).Guid $location = \u0026lsquo;westeurope\u0026rsquo;\naz deployment sub create \u0026ndash;name $deploymentID \u0026ndash;location $location \u0026ndash;template-file ./main-deployment-1.bicep \u0026ndash;parameters location=$location \u0026ndash;confirm-with-what-if \u0026ndash;output none\nAnd this will enable Defender for Cloud and you can change the parameters as you like.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"9 January 2023","externalUrl":null,"permalink":"/2023/01/09/enabling-defender-for-cloud-using-bicep/","section":"Posts","summary":"","title":"Enabling Defender for Cloud using Bicep","type":"posts"},{"content":"Part of my job is creating Azure Architectural diagrams and to be honest I really didn\u0026rsquo;t get on that well with Visio, its a great product but there was a lot of swearing when fiddling around with spacing and drawing arrows the way I wanted them etc., I just never felt proud of what I had created (It\u0026rsquo;s me not Visio lets be clear).\nI stumbled across a video from https://twitter.com/LiorKamrat\nhttps://www.youtube.com/watch?v=QR-64mFqhf4\nLior teaches you how to use PowerPoint, yes you read that correctly, PowerPoint to create really awesome looking architectural diagrams - definitely watch all of his video if you like me don\u0026rsquo;t get on well with Visio etc.\nWhilst tweeting about this Dave Brannan asked if I had used draw.io inside Visual Studio Code, I had dabbled with draw.io but not within VS Code, so I installed the extension and started looking into it. Not bad I must say, I do like it and its very easy to create cracking diagrams.\nHere is one I created from a sample diagram from the Microsoft docs about using Private Endpoints from a Web App to a SQL Server Database. I can reuse these super easily and use the GitHub repository David-Summers/Azure-Design: My Azure stencil collection for Visio. Highly functional and always up to date. (github.com) to copy in .png or .svg files which ever you prefer.\nHow about Draw.io?\nIf you install the draw.io integration extension by Henning Dietrichs to VS Code and then crate new empty file with the .drawio extension then you end up with this:-\nThis means you can use VS Code along with Draw.io to create diagrams - very cool.\nSummary\nI like the PowerPoint way of doing it as I can open up existing diagrams and easily create new diagrams off it it, I am sure you can do the same in any tool but I do particularly like how the PowerPoint diagrams turn out.\nMassive thanks to Lior Kamrat for creating the video and I hope you find this post useful.\nIn Lior\u0026rsquo;s video he has some awesome links to to Azure Icon sets and example PowerPoints.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"9 January 2023","externalUrl":null,"permalink":"/2023/01/09/creating-azure-architecture-diagrams-from-scratch-almost/","section":"Posts","summary":"","title":"Creating Azure Architecture Diagrams from scratch (almost)","type":"posts"},{"content":"In this blog post I show you how to create a new Azure PostgreSQL Flexible server using Bicep, the single server will be no longer at the start of 2024 so many of you will need to migrate to the flexible offering.\nAzure PostgreSQL Flexible Server is a fully managed, cloud-based PostgreSQL database service that provides the ability to scale compute and storage resources independently, making it more flexible and cost-effective than other Azure PostgreSQL offerings.\nAs always I try to make use of the following GitHub repository https://github.com/Azure/ResourceModules/ this is where I go to make use of the hundreds of already written Bicep scripts which I can make use of very quickly.\nI start by cloning the repository then lifting the files I need to make what ever I need to deploy work, in this case I want the following folder(s) https://github.com/Azure/ResourceModules/tree/main/modules/Microsoft.DBforPostgreSQL/flexibleServers\nI store the files in a modules folder.\n// Azure PostgreSQL Server details\nparam administratorLogin string = \u0026lsquo;postgresqladmin\u0026rsquo; param skuName string = \u0026lsquo;Standard_D4s_v3\u0026rsquo; param tier string = \u0026lsquo;GeneralPurpose\u0026rsquo; param availabilityZonestring string = \u0026lsquo;1\u0026rsquo; param backupRetentionDays int = 20 param geoRedundantBackup string = \u0026lsquo;Enabled\u0026rsquo; param highAvailability string = \u0026lsquo;SameZone\u0026rsquo; param storageSizeGB int = 1024 param version string = \u0026lsquo;14\u0026rsquo; param servername string = \u0026lsquo;gregorspostgresql\u0026rsquo;\n@description(\u0026lsquo;Deploy an Azure PostgreSQL Server\u0026rsquo;) module createPostgresFlexibleServer \u0026lsquo;modules/psqlflexibleServer_modules/deploy.bicep\u0026rsquo; = { scope: resourceGroup(dataTierRg) name: \u0026lsquo;createPostgresFlexibleServer\u0026rsquo; params: { administratorLogin: administratorLogin administratorLoginPassword: administratorLoginPassword name: servername skuName: skuName tier: tier location: location availabilityZone: availabilityZonestring backupRetentionDays: backupRetentionDays geoRedundantBackup: geoRedundantBackup highAvailability: highAvailability storageSizeGB: storageSizeGB version: version } }\nTo run this I run a very small PowerShell script, that contains the following:-\n$deploymentID = (New-Guid).Guid $location = \u0026lsquo;westeurope\u0026rsquo;\naz deployment sub create --name $deploymentID \u0026ndash;location $location --template-file ./main-deployment-1.bicep \u0026ndash;parameters location=$location --confirm-with-what-if \u0026ndash;output none\nAnd this will deploy an Azure PostgreSQL Flexible server and you can change the parameters as you like.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"9 January 2023","externalUrl":null,"permalink":"/2023/01/09/azure-postgresql-flexible-server-using-bicep/","section":"Posts","summary":"","title":"Azure PostgreSQL Flexible Server using Bicep","type":"posts"},{"content":"I have a terrible memory so this blog post is mainly to remind me how to VNet Integrate Azure SQL.\nThe code below is creating an Azure SQL Server and VNet integrating it - the VirtualNetworkRule is the key part and the following is how to go about it.\nI use this existing Bicep repo for all of the Bicep that I write - https://github.com/Azure/ResourceModules/ @description(\u0026lsquo;Deploy an Azure SQL Server\u0026rsquo;) module createAzureSQL \u0026lsquo;modules/azuresql_modules/deploy.bicep\u0026rsquo; = if (deployAzureSQL) { scope: resourceGroup(dataTierRg) name: azureSQLServerName params: { name: azureSQLServerName location: sqllocation administratorLogin: azureSQLServerAdminLogin administratorLoginPassword: azureSQLAdminPassword tags: tags virtualNetworkRules: [ { name: \u0026lsquo;vnet-rule-${azureSQLServerName}\u0026rsquo; serverName: azureSQLServerName ignoreMissingVnetServiceEndpoint: false virtualNetworkSubnetId: \u0026lsquo;/subscriptions/${subscriptionID}/resourceGroups/${appTierRg}/providers/Microsoft.Network/virtualNetworks/${appVNetName}/subnets/dataSubNet\u0026rsquo; } ] } dependsOn: [ newRG createAppVNet ] }\nTo get this to work you should also add a service endpoint into your subnet like the following:-\n@description(\u0026lsquo;An array of the subnets for the Application VNet.\u0026rsquo;) var appSubnets = { shared: [\n{ name: 'appSubnet' addressPrefix: '172.16.0.0/24' delegations: [ { name: 'delegation' properties: { serviceName: 'Microsoft.Web/serverfarms' } } ] } { name: 'dataSubNet' addressPrefix: '172.16.1.0/24' serviceEndpoints: [ { service: 'Microsoft.Sql' } ] } ] }\nLet me know if you found this example useful.\n","date":"6 January 2023","externalUrl":null,"permalink":"/2023/01/06/azure-sql-server-vnet-integrated-using-bicep/","section":"Posts","summary":"","title":"Azure SQL Server VNet Integrated using Bicep","type":"posts"},{"content":" 2022 was a strange year for me, felt like I hadn\u0026rsquo;t done much and then I started writing this blog post and it turns out wasn\u0026rsquo;t too bad after all. I did however get quite a few MVP nominations for people deserving of the award and got a good number of people started doing their first ever LinkedIn Learning course.\nMy first-ever LinkedIn Learning course went live in March of this past year, and then I finished the second part I was asked to do.\nJanuary\nAzure Data Fundamentals Part 1 - https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-1-core-data-concepts/ Azure Data Fundamentals Part 4 - https://www.linkedin.com/learning/azure-data-fundamentals-dp-900-cert-prep-1-core-data-concepts/ Earned the Microsoft Azure Cosmos DB Developer Speciality Exam - DP-420. Deep Dive Governance and Azure Policy Workshop - remotely. Portugal on holiday. **February **\nGlasgow Azure User Group. March\nVisit Intercept offices, The Netherlands. April\nGlasgow Azure User Group. May\nDevOps on Azure workshop - remotely Deep Dive Governance and Azure Policy Workshop - remotely. DevOps on Azure workshop - remotely. June\nGlasgow Azure User Group. Intercept Summer Party. **July **\nDeep Dive Governance and Azure Policy Workshop - remotely. August\nGlasgow Azure User Group. September\nOn holiday playing golf in the Scottish Pairs 2022 event. October\nAzure Cloud Essentials Workshop at the Microsoft office in Copenhagen, Denmark. Earned the Microsoft Certified: Azure Network Engineer Associate Exam AZ-700. Disneyland Paris holiday. Ignite Conference in Seattle, USA. Glasgow Azure User Group. **November **\nAzure DevOps and Azure Cloud Essentials Workshop at the Microsoft Reactor in Stockholm, Sweden. Reached 15k twitter followers. **December **\nData Workshop in Vienna at the Microsoft Austria office. Intercept Xmas Party in the Netherlands. Festive Tech Calendar ran for the whole month. Summary\nI visited a lot of new countries and gave talks at some very cool venues, next year I hope we can do more of those.\nI still want to visit Croatia, Switzerland and hopefully Iceland too.\nHappy New Year if your reading this far down.\n","date":"29 December 2022","externalUrl":null,"permalink":"/2022/12/29/my-2022-yearly-review/","section":"Posts","summary":"","title":"My 2022 Yearly Review","type":"posts"},{"content":"This is **my **review of Ignite, in person, in Seattle.\nThis was my first ever time in Seattle, really enjoyed the city and look forward to returning (I love being in the United States). I was delighted to be able to attend this years event.\nThis years Ignite in person has been, well different, to be fair I think I had been greatly spoiled by the previous Ignite I attended back in 2019 in Orlando.\nMicrosoft has tried out some new ideas and below is my feedback and findings from Days 1 and 2 (supposed to be 3 day event, but it wasn\u0026rsquo;t in perso in Seattle at least).\nNo Ignite bag was a little disappointing (it was a thing each year until now), a swag free conference, I mean I do get it, but a lot of people weren\u0026rsquo;t pleased - I think we are going to have to get used to swag free conferences. If you were a sponsor the list of what you had to do to be able to giveaway anything was pretty high.\nThe vendors were down on a separate floor and to be honest, this was odd in my opinion, not sure that would have went down too well, you had to go into rooms to speak to some of them and that isnt what people liked or felt comfortable doing, when I asked people.\nThe food was fine, not sure the information on what was available where, was up to scratch but there you have it.\nThe venue itself, at least the Hub was cool, no MVP / RD wall was disappointing, or dragon popcorn but it was a nice looking area. However, for me, the area didn\u0026rsquo;t work when it came to sessions, many speakers had no microphones on day 1 and you couldn\u0026rsquo;t hear anything people were saying unless right up front (some sessions were packed), hopefully they learn that having speaker areas with so many people, you need to make sure people can hear what\u0026rsquo;s been said, if its in person, its not recorded and therefor you miss out which annoyed some people I spoke too.\nThe keynote was weird with Satya not being there in person, again, odd to have Ignite, in person, that doesnt have a live keynote from Satya.\nIn Summary, Day 1 was rescued by the people I met, the MVP after party (not all mvps got the invite) and playing table tennis and chatting with people from all over.\nDay 2 was noticeably quieter, I mean like a third of the people decided to go enjoy the sun or something else, I was thinking to myself where is everyone, it very much had the vibe that the big speakers had left town and the Hub area was surprisingly quiet. Ask the Expert areas were quiet especially on day 2, it had that feeling of the last day at a conference early on which was not great.\nSome sessions were ok, content was mostly high level marketing content and the sessions were beginner to intermediate levels. Content around the Hub was hard to hear and that for me didn\u0026rsquo;t work.\nSo lets cover the good the bad and the ugly from my point of view for this year\u0026rsquo;s Ignite.\nGOOD We were back in person at Ignite, meeting friends and new people from around the world is always the best part of a conference for me - going to dinner at night and hearing what people are working on and building and the questions they ask is the best thing going. Seattle is a very nice place to visit.\nBAD No Satya, no swag, 2 days conference not 3 as advertised (many flew home on Saturday due to this), no MVP wall, no sticker swap, no store to buy merchandise or surface laptops etc, and no book store either. The energy just wasnt there for me, some people tried to get the crowd to hoot and holler but it just wasnt happening.\nUGLY After reflection skipping this part, ask me in person.\nWays I would try to improve Ignite\nLess marketing content, more deep dives. Have the person delivering the Keynotes always be actually there in person, especially Satya. Tell people its a swag free conference up front, to avoid disappointment. Bring back the MVP / RD Wall, book store, merchandise stands etc. Inform people better of any after event parties. Have working wifi at the start of the conference. Session speakers speak slowly, this isn\u0026rsquo;t a race, if you need more time have longer session. Not everyone is a native English speaker and rambling through content at 100 mph is an awful experience for a lot of people. Tell people that where your sitting is not where the speaker is, some rooms were both called Tahoma 3 for example and one had the speaker and the other was earphones only - it wasnt clear. Full sessions and being told to go watch it online, after travelling a long way to be in person this wasn\u0026rsquo;t a great experience. (have bigger rooms) Two days isn\u0026rsquo;t long enough, lots of content at the same time yesterday was not fun, yes its recorded but I came to see people talk and the content needs to be spread out more. Have the chance to get your photo taken professionally so that you can get a nice photo of you at the event. Have more fun things on when it\u0026rsquo;s the drinks / nibbles at the end of each day. Summary In summary, Microsoft tried a new way of doing things from what I gathered and it fell short.\nWould I go next year? - it depends.\n","date":"17 October 2022","externalUrl":null,"permalink":"/2022/10/17/microsoft-ignite-in-person-seattle-review/","section":"Posts","summary":"","title":"Microsoft Ignite - In person Seattle review","type":"posts"},{"content":"I have been working with Bicep a lot on a recent project and I tweeted a reply to a tweet as you can see below, in order to reply properly I decided to write this blog post as hopefully being a way to give constructive feedback.\nLets take the example of vnet peering - if you google/bing for vnet peering bicep you will end up here most likely - https://docs.microsoft.com/en-us/azure/templates/microsoft.network/virtualnetworks/virtualnetworkpeerings?pivots=deployment-language-bicep\nThis is somewhat helpful in terms of it shows you the format, however it wont help a lot of people as its not got any examples of how it works.\nI always use https://github.com/Azure/ResourceModules as I can look at an example, they have deployment examples links for every resource which is like so: -\nNow with this example I can see what the values look like and get a feel for what is needed. The first screen shot does explain the values which is ok at best, an example would be good, a common scenario would be even better.\nWhen it comes to documentation examples can be what makes or breaks the documentation. For me scenarios are the answer to what I would like to see - If I want to create a keyvault, theres every chance I need to create a secret and populate this, maybe I need an access policy or a managed identity to go along with this - these are real work scenarios that the documentation dont cover - yes we can\u0026rsquo;t cover everything but if we go back to the first screen shot above - this isnt helping me a great deal truth be told.\nNow there is a common scenarios page from the Bicep team - https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/scenarios-secrets which is a good start, I feel we really need a lot more of these or at least link to github repositories for further help.\nWhen trying to figure out how to get a load balancer to play nicely with 2 virtual machines I had to manually depoy it and then reverse engineer the bicep - the sample in the documentation was a good start, didnt cover what I needed but it was a good start.\nIve had dm\u0026rsquo;s saying that there isnt enough people with enough time to write all of the scenario\u0026rsquo;s, which is fine, finding a way to make public contributions of example scenario;s might be one way to go about it.\nEither way I feel there is room for improvement on the documentation for a lot of microsoft docs, its an unpopular opinion but there you have it.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"19 August 2022","externalUrl":null,"permalink":"/2022/08/19/bicep-scenarios/","section":"Posts","summary":"","title":"Bicep Scenarios","type":"posts"},{"content":"When working with Bicep there are times when the documentation isn\u0026rsquo;t there, and the examples aren\u0026rsquo;t there yet either.\nRecently I needed to deploy Azure Database for PostgreSQL Flexible server using Bicep, the docs for doing this are ok, examples would make the Bicep docs so much better, but anyway, if you have been using Bicep then you manage to get it working.\nI tend to go to the following website https://github.com/Azure/ResourceModules/ when I am working with Bicep and use these modules as much as I can - note that they are constantly being worked/changed so bare that in mind.\nI figure out the Bicep for my postgreSQL server and now I need too add in a couple of extensions - I\u0026rsquo;m new to postGreSQL and never touched it and google for the article and it turns out its super simple to manually add in any extension - this article show you how - https://docs.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-extensions\nSo I decided to download the arm template for my postgreSQL server before the extensions were added and then compare this to the arm template after I have added the extensions into postGreSQL by hand. Then I compare the files and see whats been added.\nComparing both files I see the following:-\nI then use a website which is available to use to generate Bicep code from existing arm templates. The website for this is https://bicepdemo.z22.web.core.windows.net/ - using this I click on the decompile button top right and point it at the ARM template I downloaded from the Azure portal after I had added in the extension manually. This then generates the Bicep code for me and I can see the section I needed to add in the extension.\nresource flexibleServers_psql_dev_weu_name_azure_extensions \u0026lsquo;Microsoft.DBforPostgreSQL/flexibleServers/configurations@2022-01-20-preview\u0026rsquo; = { parent: flexibleServers_psql_dev_weu_name_resource name: \u0026lsquo;azure.extensions\u0026rsquo; properties: { value: \u0026lsquo;LTREE,UUID-OSSP\u0026rsquo; source: \u0026lsquo;user-override\u0026rsquo; } }\nSo now I have the missing extension code I need for my Bicep code and we can remove the manually added extensions - redeploy the code and we are all good.\nSummary\nIf you don\u0026rsquo;t know the Bicep code for what you need and you cant find any samples, try manually deploying your service, download the arm template and use the https://bicepdemo.z22.web.core.windows.net/ to decompile the ARM templae back into Bicep.\nIf you have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"3 August 2022","externalUrl":null,"permalink":"/2022/08/03/reverse-engineering-arm-templates-to-use-with-bicep/","section":"Posts","summary":"","title":"Reverse Engineering Arm Templates to use with Bicep","type":"posts"},{"content":"A customer where I work, suddenly had an issue where the machine learning model that they had deployed to AKS stopped working after having been deployed over 1 year ago. They asked if someone could take a look into it, I always say jump at the chance to learn something new and perhaps blog (I a,ways forget to blog so here we are).\nNow I have never really done anything with Azure ML before, I have clicked around the portal for a few minutes and thats it, so here is how I went about it, just incase you have to do the same thing at some point.\nAn email from the customer show me the error they are receiving which says \u0026ldquo;Internal Server Error. Run: Server internal error is from Module Execute Python Script\u0026rdquo;\nOk, so straight away im thinking something to do with Python , lets try tro replicate the error first of all (always my first port of call when debugging isues) - so I open up Postman which I can use to test the Rest call and send a post to the URI and yeah I see the same issue. The customer has mentioned AKS so I look into that, all appears to be fine there.\nTime to crack open the Azure Machine Learning studio and go on the hunt for anything that might look interesting. Now I know the name of the model from the customer so I start poking around there and I click on the test and test it and I get this error with a stack trace still mentioning an internal server error due to what looks like Python using version 3.6.\nThe code hadnt been changed or redeployed for over 1 year but suddenly stops working and I\u0026rsquo;m thinking thats odd, must be some sort of dependency being pulled in when its running. After a fair bit of googling I came across this link - Python SDK release notes - Azure Machine Learning | Microsoft Docs which after carefully reading says that there is a breaking change with the Azure Machine Learning SDK for Python version 1.41.0.\nNow, unfortunately I spend a fair bit of time looking for this, trying to figure out how, or even where to update this in the model, with absolutely no luck whatsoever.\nI then ended up on a call with a super helpful Microsoft Engineer who knows Azure ML inside out and after we discuss the issue we figure out between us that the dependency on a package called VowalRabbitt is causing the issue - the latest version of this package required Python newer than 3.6. So we figure lets try pinning the version of the package in the designer to use VowalRabbitt 8.10.1 - rebuilt the model and bish bash bosh it all works again like a charm.\nThe very best part of this was that I reached out on Twitter and 3 different very kind people asked if they could help. I wanted to say a huge big thank you to Kevin Oliver (@TechnicalPanda), Pedro Fiadeiro (@plfiadeiro) and also Sammy Deprez (@sammydeprez) - without your help I would have been very stuck so many thanks to you all!.\nIn summary I learned a lot about Azure ML, how models are used and tested and then deployed, I went down many a rabbit hole, pun intended and eventually came up trumps - I knew next to nothing about Azure ML before this came up, I said I would fix it and I never gave up. This is what I love doing, fixing stuff I know nothing about by asking questions and finding out the answers.\nIn the unlikely event that this helps anyone - awesome, if not thanks for reading.\nIf yuou have questions reach out to me here in the comments below or on twitter.\nDon’t forget to subscribe to myYouTube Channel.\n","date":"20 July 2022","externalUrl":null,"permalink":"/2022/07/20/azure-ml-investigations/","section":"Posts","summary":"","title":"Azure ML Investigations","type":"posts"},{"content":"Recently Microsoft announed that they will have a grana service available to use on Azure - awesome stuff.\nI like Grafana for dashboards, its got a bit to go however, esepcially when it comes to alerts and doing things at scale.\nYou can choose to run Grafana **locally **(im running it on windows), you can run it in a **container **and you can run it on Azure, no matter where you use it, there are a few things which I wanted to cover off to help people who are considering using it.\nNow I am currently using version 8.4.5 and I wanted to create some azure alerts to see what Grafana had in the way of alerts, it has some nice stuff to be fair, how it goes about it needs some work but I reckon it will definetly get there in upcoming versions.\nCurrently creating dashboards is very simple, when it comes to azure you need to:-\nCreate a data source (azure monitor) Add a panel to a new dashboard Select the datasource and then choose either Metrics, Logs or Azure Resource Graph. Fill out the details Simple stuff, now what about if you want to create an alert, well the dashboard you create is stored in JSON which contains all of th panels and the settings etc - alerts are stored seperately, to be honest I think alerts are still being worked on.\nAnyways alerts are stored elsewhere, the good news is there is an API for Grafana, the bad news is, its not the best, either that or the documentation is wrong - if you try it out and it all just works please do give me a shout.\nIf you want to create alert rules which is, you creating settings, that define when an alert should fire, lets say if your virtual machine cpu goes abouve 75% cpu for between 1-5 minutes then raise a alert. An Alert is made up of whats called contact points ans notification policies in Grafana, now this idea I do like.\nTo create an Alert Rule you could do the following:-\nPOST http://localhost:3000/api/ruler/grafana/api/v1/rules/{your folder name here}\nIn the JSON believe replace {your datasource uid here} with the uid of your own datasource and also replace {your subscription id here} with your own subsciptionId.\n{ \u0026ldquo;name\u0026rdquo;: \u0026ldquo;FUNCTION APPS - HTTP Server Errors (Total)\u0026rdquo;, \u0026ldquo;interval\u0026rdquo;: \u0026ldquo;1m\u0026rdquo;, \u0026ldquo;rules\u0026rdquo;: [ { \u0026ldquo;expr\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;for\u0026rdquo;: \u0026ldquo;5m\u0026rdquo;, \u0026ldquo;labels\u0026rdquo;: { \u0026ldquo;Customer\u0026rdquo;: \u0026ldquo;test customer\u0026rdquo;, \u0026ldquo;alertto\u0026rdquo;: \u0026ldquo;gregor\u0026rdquo; }, \u0026ldquo;annotations\u0026rdquo;: { \u0026ldquo;summary\u0026rdquo;: \u0026ldquo;FUNCTION APPS - HTTP Server Errors \u0026gt; 100\u0026rdquo; }, \u0026ldquo;grafana_alert\u0026rdquo;: { \u0026ldquo;id\u0026rdquo;: 115, \u0026ldquo;orgId\u0026rdquo;: 27, \u0026ldquo;title\u0026rdquo;: \u0026ldquo;FUNCTION APPS - HTTP Server Errors (Total)\u0026rdquo;, \u0026ldquo;condition\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;data\u0026rdquo;: [ { \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;A\u0026rdquo;, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;Azure Monitor\u0026rdquo;, \u0026ldquo;relativeTimeRange\u0026rdquo;: { \u0026ldquo;from\u0026rdquo;: 600, \u0026ldquo;to\u0026rdquo;: 0 }, \u0026ldquo;datasourceUid\u0026rdquo;: \u0026ldquo;{your datasource uid here}\u0026rdquo;, \u0026ldquo;model\u0026rdquo;: { \u0026ldquo;azureMonitor\u0026rdquo;: { \u0026ldquo;aggregation\u0026rdquo;: \u0026ldquo;Total\u0026rdquo;, \u0026ldquo;alias\u0026rdquo;: \u0026ldquo;{{ resourcename }} - {{ metric }}\u0026rdquo;, \u0026ldquo;dimensionFilters\u0026rdquo;: [], \u0026ldquo;metricDefinition\u0026rdquo;: \u0026ldquo;Microsoft.Web/sites\u0026rdquo;, \u0026ldquo;metricName\u0026rdquo;: \u0026ldquo;Http5xx\u0026rdquo;, \u0026ldquo;metricNamespace\u0026rdquo;: \u0026ldquo;Microsoft.Web/sites\u0026rdquo;, \u0026ldquo;resourceGroup\u0026rdquo;: \u0026ldquo;rg-grafanaresources\u0026rdquo;, \u0026ldquo;resourceName\u0026rdquo;: \u0026ldquo;grafana1\u0026rdquo;, \u0026ldquo;timeGrain\u0026rdquo;: \u0026ldquo;auto\u0026rdquo; }, \u0026ldquo;hide\u0026rdquo;: false, \u0026ldquo;intervalMs\u0026rdquo;: 1000, \u0026ldquo;maxDataPoints\u0026rdquo;: 43200, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;Azure Monitor\u0026rdquo;, \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;A\u0026rdquo;, \u0026ldquo;subscription\u0026rdquo;: \u0026ldquo;{your subscription id here}\u0026rdquo; } }, { \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;relativeTimeRange\u0026rdquo;: { \u0026ldquo;from\u0026rdquo;: 0, \u0026ldquo;to\u0026rdquo;: 0 }, \u0026ldquo;datasourceUid\u0026rdquo;: \u0026ldquo;-100\u0026rdquo;, \u0026ldquo;model\u0026rdquo;: { \u0026ldquo;conditions\u0026rdquo;: [ { \u0026ldquo;evaluator\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [ 100 ], \u0026ldquo;type\u0026rdquo;: \u0026ldquo;gt\u0026rdquo; }, \u0026ldquo;operator\u0026rdquo;: { \u0026ldquo;type\u0026rdquo;: \u0026ldquo;and\u0026rdquo; }, \u0026ldquo;query\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [ \u0026ldquo;A\u0026rdquo; ] }, \u0026ldquo;reducer\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [], \u0026ldquo;type\u0026rdquo;: \u0026ldquo;last\u0026rdquo; }, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;query\u0026rdquo; } ], \u0026ldquo;datasource\u0026rdquo;: { \u0026ldquo;type\u0026rdquo;: \u0026ldquo;expr\u0026rdquo;, \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;-100\u0026rdquo; }, \u0026ldquo;hide\u0026rdquo;: false, \u0026ldquo;intervalMs\u0026rdquo;: 1000, \u0026ldquo;maxDataPoints\u0026rdquo;: 43200, \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;classic_conditions\u0026rdquo; } } ], \u0026ldquo;intervalSeconds\u0026rdquo;: 60, \u0026ldquo;rule_group\u0026rdquo;: \u0026ldquo;FUNCTION APPS - HTTP Server Errors (Total)\u0026rdquo;, \u0026ldquo;no_data_state\u0026rdquo;: \u0026ldquo;NoData\u0026rdquo;, \u0026ldquo;exec_err_state\u0026rdquo;: \u0026ldquo;Alerting\u0026rdquo; } }, { \u0026ldquo;expr\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;for\u0026rdquo;: \u0026ldquo;5m\u0026rdquo;, \u0026ldquo;labels\u0026rdquo;: { \u0026ldquo;Customer\u0026rdquo;: \u0026ldquo;test customer\u0026rdquo;, \u0026ldquo;alertto\u0026rdquo;: \u0026ldquo;gregor\u0026rdquo; }, \u0026ldquo;annotations\u0026rdquo;: { \u0026ldquo;summary\u0026rdquo;: \u0026ldquo;Azure SQL - DATA IO % \u0026gt; 75%\u0026rdquo; }, \u0026ldquo;grafana_alert\u0026rdquo;: { \u0026ldquo;id\u0026rdquo;: 121, \u0026ldquo;orgId\u0026rdquo;: 27, \u0026ldquo;title\u0026rdquo;: \u0026ldquo;Azure SQL - Log IO %\u0026rdquo;, \u0026ldquo;condition\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;data\u0026rdquo;: [ { \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;A\u0026rdquo;, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;Azure Monitor\u0026rdquo;, \u0026ldquo;relativeTimeRange\u0026rdquo;: { \u0026ldquo;from\u0026rdquo;: 600, \u0026ldquo;to\u0026rdquo;: 0 }, \u0026ldquo;datasourceUid\u0026rdquo;: \u0026ldquo;{your datasource uid here}\u0026rdquo;, \u0026ldquo;model\u0026rdquo;: { \u0026ldquo;azureMonitor\u0026rdquo;: { \u0026ldquo;aggregation\u0026rdquo;: \u0026ldquo;Average\u0026rdquo;, \u0026ldquo;alias\u0026rdquo;: \u0026ldquo;{{ resourcename }} - {{ metric }}\u0026rdquo;, \u0026ldquo;dimensionFilters\u0026rdquo;: [], \u0026ldquo;metricDefinition\u0026rdquo;: \u0026ldquo;Microsoft.Sql/servers/databases\u0026rdquo;, \u0026ldquo;metricName\u0026rdquo;: \u0026ldquo;log_write_percent\u0026rdquo;, \u0026ldquo;metricNamespace\u0026rdquo;: \u0026ldquo;Microsoft.Sql/servers/databases\u0026rdquo;, \u0026ldquo;resourceGroup\u0026rdquo;: \u0026ldquo;rg-grafanaresources\u0026rdquo;, \u0026ldquo;resourceName\u0026rdquo;: \u0026ldquo;grafanadb/grafanadb\u0026rdquo;, \u0026ldquo;timeGrain\u0026rdquo;: \u0026ldquo;auto\u0026rdquo; }, \u0026ldquo;hide\u0026rdquo;: false, \u0026ldquo;intervalMs\u0026rdquo;: 1000, \u0026ldquo;maxDataPoints\u0026rdquo;: 43200, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;Azure Monitor\u0026rdquo;, \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;A\u0026rdquo;, \u0026ldquo;subscription\u0026rdquo;: \u0026ldquo;{your subscription id here}\u0026rdquo; } }, { \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;queryType\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;relativeTimeRange\u0026rdquo;: { \u0026ldquo;from\u0026rdquo;: 0, \u0026ldquo;to\u0026rdquo;: 0 }, \u0026ldquo;datasourceUid\u0026rdquo;: \u0026ldquo;-100\u0026rdquo;, \u0026ldquo;model\u0026rdquo;: { \u0026ldquo;conditions\u0026rdquo;: [ { \u0026ldquo;evaluator\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [ 75 ], \u0026ldquo;type\u0026rdquo;: \u0026ldquo;gt\u0026rdquo; }, \u0026ldquo;operator\u0026rdquo;: { \u0026ldquo;type\u0026rdquo;: \u0026ldquo;and\u0026rdquo; }, \u0026ldquo;query\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [ \u0026ldquo;A\u0026rdquo; ] }, \u0026ldquo;reducer\u0026rdquo;: { \u0026ldquo;params\u0026rdquo;: [], \u0026ldquo;type\u0026rdquo;: \u0026ldquo;last\u0026rdquo; }, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;query\u0026rdquo; } ], \u0026ldquo;datasource\u0026rdquo;: { \u0026ldquo;type\u0026rdquo;: \u0026ldquo;expr\u0026rdquo;, \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;-100\u0026rdquo; }, \u0026ldquo;hide\u0026rdquo;: false, \u0026ldquo;intervalMs\u0026rdquo;: 1000, \u0026ldquo;maxDataPoints\u0026rdquo;: 43200, \u0026ldquo;refId\u0026rdquo;: \u0026ldquo;B\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;classic_conditions\u0026rdquo; } } ], \u0026ldquo;intervalSeconds\u0026rdquo;: 60, \u0026ldquo;rule_group\u0026rdquo;: \u0026ldquo;Azure SQL - Log IO %\u0026rdquo;, \u0026ldquo;no_data_state\u0026rdquo;: \u0026ldquo;NoData\u0026rdquo;, \u0026ldquo;exec_err_state\u0026rdquo;: \u0026ldquo;Alerting\u0026rdquo; } } ] }\nLots of companies have products that produce nice dashboards but in my opinion a dashboard is useless on its own, you shouldnt have to look at a dashboard for the most part, especially if your doing something at scale at least. So, I want to have a dashboard with alerts that email me or create a TopDesk ticket or ServiceNow ticket when there is something awry.\nContact points in Grafana are basically how should someone or something be contacted, these are normally email addresses or end points like an azure function end point which you ca nuse to create tickets for example.\nNotification policies are policies that act on the settings you provide, an example would be if a label is matched then use of of the contact points to do something - so if an alert is raised and the label is prodcution on your dashboard then you can send an alert to the contact point you created to call an azure function which will create a ServiceNow ticket.\nThe Grafana API can be found here - https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json\nIts an interesting mix of v1 / v2 end points and some work some dont. I have had no luck getting endpoints for contact points and notification policies to work - but you can use the following calls to get and save the config should you want to create more of these at scale in other dashboards.\nGET http://localhost:3000/api/alertmanager/grafana/config/api/v1/alerts\n{ \u0026ldquo;template_files\u0026rdquo;: {}, \u0026ldquo;alertmanager_config\u0026rdquo;: { \u0026ldquo;route\u0026rdquo;: { \u0026ldquo;receiver\u0026rdquo;: \u0026ldquo;grafana-default-email\u0026rdquo;, \u0026ldquo;routes\u0026rdquo;: [ { \u0026ldquo;object_matchers\u0026rdquo;: [ [ \u0026ldquo;customer\u0026rdquo;, \u0026ldquo;=\u0026rdquo;, \u0026ldquo;test customer\u0026rdquo; ] ] } ] }, \u0026ldquo;templates\u0026rdquo;: null, \u0026ldquo;receivers\u0026rdquo;: [ { \u0026ldquo;name\u0026rdquo;: \u0026ldquo;grafana-default-email\u0026rdquo;, \u0026ldquo;grafana_managed_receiver_configs\u0026rdquo;: [ { \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;ED40XnQnz\u0026rdquo;, \u0026ldquo;name\u0026rdquo;: \u0026ldquo;email receiver\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;email\u0026rdquo;, \u0026ldquo;disableResolveMessage\u0026rdquo;: false, \u0026ldquo;settings\u0026rdquo;: { \u0026ldquo;addresses\u0026rdquo;: \u0026quot;\u0026quot; }, \u0026ldquo;secureFields\u0026rdquo;: {} } ] }, { \u0026ldquo;name\u0026rdquo;: \u0026ldquo;Gregor Suttie\u0026rdquo;, \u0026ldquo;grafana_managed_receiver_configs\u0026rdquo;: [ { \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;ED4AunQ7kz\u0026rdquo;, \u0026ldquo;name\u0026rdquo;: \u0026ldquo;Gregor Suttie\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;email\u0026rdquo;, \u0026ldquo;disableResolveMessage\u0026rdquo;: false, \u0026ldquo;settings\u0026rdquo;: { \u0026ldquo;addresses\u0026rdquo;: \u0026ldquo;azuregreg@azure.com\u0026rdquo;, \u0026ldquo;singleEmail\u0026rdquo;: false }, \u0026ldquo;secureFields\u0026rdquo;: {} } ] } ] } }\nAns you can post the same JSON (without the uid filled out) to create Contact points and Notification policies)\nPOST http://localhost:3000/api/alertmanager/grafana/config/api/v1/alerts\n{ \u0026ldquo;template_files\u0026rdquo;: {}, \u0026ldquo;alertmanager_config\u0026rdquo;: { \u0026ldquo;route\u0026rdquo;: { \u0026ldquo;receiver\u0026rdquo;: \u0026ldquo;grafana-default-email\u0026rdquo;, \u0026ldquo;routes\u0026rdquo;: [ { \u0026ldquo;object_matchers\u0026rdquo;: [ [ \u0026ldquo;customer\u0026rdquo;, \u0026ldquo;=\u0026rdquo;, \u0026ldquo;test customer\u0026rdquo; ] ] } ] }, \u0026ldquo;templates\u0026rdquo;: null, \u0026ldquo;receivers\u0026rdquo;: [ { \u0026ldquo;name\u0026rdquo;: \u0026ldquo;grafana-default-email\u0026rdquo;, \u0026ldquo;grafana_managed_receiver_configs\u0026rdquo;: [ { \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;name\u0026rdquo;: \u0026ldquo;email receiver\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;email\u0026rdquo;, \u0026ldquo;disableResolveMessage\u0026rdquo;: false, \u0026ldquo;settings\u0026rdquo;: { \u0026ldquo;addresses\u0026rdquo;: \u0026quot;\u0026quot; }, \u0026ldquo;secureFields\u0026rdquo;: {} } ] }, { \u0026ldquo;name\u0026rdquo;: \u0026ldquo;Gregor Suttie\u0026rdquo;, \u0026ldquo;grafana_managed_receiver_configs\u0026rdquo;: [ { \u0026ldquo;uid\u0026rdquo;: \u0026ldquo;\u0026rdquo;, \u0026ldquo;name\u0026rdquo;: \u0026ldquo;Gregor Suttie\u0026rdquo;, \u0026ldquo;type\u0026rdquo;: \u0026ldquo;email\u0026rdquo;, \u0026ldquo;disableResolveMessage\u0026rdquo;: false, \u0026ldquo;settings\u0026rdquo;: { \u0026ldquo;addresses\u0026rdquo;: \u0026ldquo;azuregreg@azure.com\u0026rdquo;, \u0026ldquo;singleEmail\u0026rdquo;: false }, \u0026ldquo;secureFields\u0026rdquo;: {} } ] } ] } }\nAPI - the api for grafana is as I mentioned before i bit hit and miss.I use it from Postman and here us how I set Postman to get it working.\nI create an API key from within Grafana (under Configuration and then API Keys) and set that as a **Bearer Token **under the Autentication section in Postman like so:-\nAnd the Headers are pretty standard like so:-\nIf yuou have questions or get stuck reach out to me here int he comments below or on twitter.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"21 April 2022","externalUrl":null,"permalink":"/2022/04/21/grafana-alert-rules-contact-points-and-notification-policies-with-azure/","section":"Posts","summary":"","title":"Grafana Alert Rules, Contact Points and Notification Policies with Azure","type":"posts"},{"content":"Recently I was looking at ways to create config for different environments whilst using Bicep and a friend sent me is code which solves the exact issue I was trying to consider a good solution for.\nI want to highlight this, as I feel this is probably not that well known and people will find this useful.\nShout out to https://twitter.com/ElYusubov for showing me how to do this - chekout out his Bicep content as its been a great help.\nProblem statement: How do I create config for dev,test,acceptance, prod in a bicep file and make it reusable, so that I dont need paramater json files and other types of solutions etc.\nConsider that you want to create an App Service plan and you need different settings per environment. We could create the App Service Plan for each environment and create some config in the Bicep file, and all would be good.\nThis will work but there is a better way so let me show you Ely\u0026rsquo;s example for this exact scenario.\nThe following image shows you how to create such config.\nThe code for this can be found here.\nNow we need to create the App Service plan and make this re-usable for different environments (we dont want to create content seperately for each environment if we can help it).\nThe following is the code for creating the actual App Service plan itself\nAgain this code is available here -\u0026gt; Learn-Bicep/main.bicep at main · ElYusubov/Learn-Bicep (github.com)\nDon’t forget to subscribe to my YouTube Channel.\n","date":"30 March 2022","externalUrl":null,"permalink":"/2022/03/30/config-mapping-in-bicep-cool-stuff/","section":"Posts","summary":"","title":"Config Mapping in Bicep - cool stuff!","type":"posts"},{"content":"In this post I cover off access policies in KeyVault and also User Assigned Managed Identity using Bicep.\nIf you are doing anything with Bicep then this is still the best resource I have found - https://github.com/Azure/ResourceModules/ - it shows you how to do it, but you need to figure it out from there but its still got a **LOT **of how to go about stuff in Bicep.\nAccess Policies in Bicep When you create a KeyVault you have to give people / accounts access to be able to use KeyValut in Azure.\nWithin the portal you need to go to the following areas:-\nSo in order to give applications and users access we add access policies. Now if you look up the Microsoft docs page for this, you\u0026rsquo;ll more than likely end up here:- https://docs.microsoft.com/en-us/azure/templates/microsoft.keyvault/vaults/accesspolicies?tabs=bicep\nThis kind of page isn\u0026rsquo;t going to help you very much, infact its not going to help you. These types of pages in Microsoft docs are, I would say close to pointless to be honest.\nI found a page that you can compare it to that covers what I think we need to see more of in the way of docs when it comes to Microsoft docs.\nCompare the docs page to this wonderful blog post:- https://ochzhen.com/blog/key-vault-access-policies-using-azure-bicep\nIts covering everything your ever going to need to know in a simple blog post which also has this layout:-\nWhy is this so good im my opinion?, its telling me all about what I need to know about access policies, its explaining it all and has really useful samples - the docs need explanations and real world examples, the examples they give are normally far too basic imo.\nManaged Identity in Bicep\nFirst thing to say is that Managed Identity in Azure has its own are in the Azure Portal, wut? yeah its been here a while now :)\nOk so you do you want to use a System assigned Managed Identity or a User Assigned Managed Identity? - Please, learn this by watching this video to learn about both - https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview\nI always opt for User Assigned Managed Identity and I want to use this to access my Azure resources and I use this so that my nice new docker container which is now in container instances can make use of the User Assigned Managed Identity to go to keyvault and get secrets (as an example).\nSo within my new User Assigned Managed Identity I can add Azure Role Assignments like so:-\nHere I am giving Owner rights on the Resource Group and KeyVault Admin access to my Managed Identity as examples.\nWhat does this look like in Bicep?\nTo create a User Assigned Managed Identity you can do it very easily :-\nAnd then to add Role Assignments and use existing definitions you can do the following:-\nFull code can be found here:- https://gist.github.com/gsuttie/3ab106252faf6ef7726441f70d611c7d\nSo there is an issue/bug with doing this, let me explain. In the example above I create a User Assigned Managed Identity and then add 2 Azure Role assignments to the managed identity. If i delete the managed Identity I end up with the following:-\nThe roel assignment remains - meaning if I run my Bicep code again it wont work and gives me an error - something like this:-\n\u0026ldquo;RoleAssignmentUpdateNotPermitted\u0026rdquo;, \u0026ldquo;message\u0026rdquo;: \u0026ldquo;Tenant ID, application ID, principal ID, and scope are not allowed to be updated.\u0026rdquo;\nI hope this blog post makese sense and is helpful to someone.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"26 March 2022","externalUrl":null,"permalink":"/2022/03/26/bicep-access-policies-and-managed-identity/","section":"Posts","summary":"","title":"Bicep Access policies and Managed Identity","type":"posts"},{"content":"So this blog post comes from doing some work recently to containerize a .Net 4.8 project that needs to run on a Windows container.\nI wrote about Windows containers already so this is going to be some other tips to help someone who may have run into the same issues I did.\nLets jump right in, the Dockerfile looks like this:-\nSo we are using the mcr.microsoft.com/dotnet/framework/sdk:4.8 docker image for building the code, this image has a number of useful tools as part of the image.\nThen we copy some files over and restore nuget packages to a packages folder. We then use msbuild to build the project to an output folder.\nOn line 12, I am then using another image mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019 for setting up iis as well as copying some files from the build layer into the image which will run the code within IIS.\nThe contents of startiis.ps1 are as follows:-\nSo this creeates a new folder for the site, enables IIS remote management which means we can connect to the running container using IIS, and then it creates a new-app pool and website and then finally removes the default iis website.\nNote: Now I had some issues trying to web.config transforms and ended up ditching that and ended up creating a config for each environment and switching to the one I need using an environment variable. I also tried Config Builders but I really dont like them as they dont update the actual file they change the values on the fly which isnt not fun when trying to debug anything.\nSo in the DockerFile I have an entrypoint like so:- ENTRYPOINT powershell.exe c:/Initialisecontainer.ps1; C:/ServiceMonitor.exe w3svc\nThis will start the container and inside Initialisecontainer.ps1 you can copy over the web.config with the web.test.config for example.\nTip: to ensure the container keeps IIS running I add the C:/ServiceMonitor.exe w3svc and this works. I tried numerous ways to get the docker container to stay running and went down the rabbit hole here but the following does work.\nSo now when I have built the container I can run it with this command:-\n**docker run -d -e ASPNET_Environment=Test **\nThere is many ways to do this and I opted for simplicity over anythingelse.\nThe main thing is, the setting up of IIS which is pretty easy and then removing the default site which if you deploy to causes IIS to stop and therfore kill your container.\nPlease reach out if there is a better way, or if you have questions.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"9 March 2022","externalUrl":null,"permalink":"/2022/03/09/net-4-x-app-running-in-a-container-using-docker/","section":"Posts","summary":"","title":".NET 4.x app running in a container using Docker","type":"posts"},{"content":"","date":"9 March 2022","externalUrl":null,"permalink":"/tags/containers/","section":"Tags","summary":"","title":"Containers","type":"tags"},{"content":"","date":"9 March 2022","externalUrl":null,"permalink":"/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"","date":"9 March 2022","externalUrl":null,"permalink":"/tags/windows/","section":"Tags","summary":"","title":"Windows","type":"tags"},{"content":"This second part goes a little further than part 1. I could have went about this many ways, but I wanted to use Azure Resource Graph with a Logic App as why not eh?\nSo I created a dashboard in Azure from the queries I wrote and it looks something like this: -\nSo from the bottom part which says - Resources thats have No Tags I wanted to email a report to myself every x days. So I created a Logic App which looks like this:-\nStep 1 - is a recurrence trigger of x days Step 2 - I call the manangement api which is -\u0026gt; https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01\nWith a JSON Payload like so:-\n{ \u0026ldquo;query\u0026rdquo;: \u0026ldquo;Resources | join kind=leftouter (ResourceContainers | where type==\u0026lsquo;microsoft.resources/subscriptions\u0026rsquo; | project SubName=name, subscriptionId) on subscriptionId | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) | where tagKey == \u0026rsquo;\u0026rsquo; and tagValue == \u0026rsquo;\u0026rsquo; | order by resourceGroup | project SubName, subscriptionId, name, [\u0026lsquo;Resource Type\u0026rsquo;]=type, location, resourceGroup, tags\u0026rdquo;, \u0026ldquo;subscriptions\u0026rdquo;: [ \u0026ldquo;subscription id goes here\u0026rdquo; ] }\nStep 3 - I then parse the JSON which looks like this:-\nStep 4 - I use an initialize variable with the sample json returned from the API call in Step 2 Step 5 - I create an HTML Table which formats my results like so:-\nStep 6 - I then send the email using whatever you like - I chose SendGrid and that looks like this:-\nSo every x days I get a report telling me whatever is in the Azure Resource Graph, formatted in an email.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"3 March 2022","externalUrl":null,"permalink":"/2022/03/03/see-whats-changed-in-azure-using-resource-graph-part-2/","section":"Posts","summary":"","title":"SEE WHATS CHANGED IN AZURE USING RESOURCE GRAPH: Part 2","type":"posts"},{"content":"At work I needed to look and see if it was easy to figure out what resources have changed in Azure, in say the last day, week or month. Now there are multiple ways to do this but the one I like the most is using Azure Resource Graph (which I really like), that and some Kusto Query Language (KQL) and you can find out just about anything you want to about your resources. I\u0026rsquo;ve used Azure Resource Graph a lot and do workshops on it regularly, not sure why people dont use it more often tbh.\nSo if I want to see what has changed in a resource group in the last few days its a sample as reading this Microsoft web page: - https://docs.microsoft.com/en-us/azure/governance/resource-graph/how-to/get-resource-changes.\nFrom here we can start to think about the kinds fo queries of interest.\nThese include:-\nShow me all of the resources that have been created in the past 7 days. Show me the tags for all resources and group them by Tag. Show me all resources which havent been tagged. This is the kind of things that interest me at the moment.\nIf we have a new subscription we can add a landing zone and add tagging by default to the subscription, the resource group, the resources etc, using Azure policy, which is all fine.\nOne other thing I like doing is adding a created date Tag to the resources on the day they were created incase I want to know this information at a later stage.\nLets get back to existing subscriptions where we cant add a landing zone for different reasons, I want to know which resources are tagged with a certain tag.\nI found this really useful blog from some guy called John Klimster, who I have met in person and is a thoroughly nice chap and has a great blog!\nIf you\u0026rsquo;re interested the post I found particularly helpful for working in KQL and using Tags was this one from John.\nI\u0026rsquo;m off to figure out what I need to do which will be hook my queries up to a Logic App and send a report via a schedule of some sort i reckon.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"28 February 2022","externalUrl":null,"permalink":"/2022/02/28/see-whats-changed-in-azure-using-resource-graph/","section":"Posts","summary":"","title":"See whats changed in Azure using Resource Graph","type":"posts"},{"content":"So I reckon if you are reading this then its time for you to learn Bicep. I decide a few months back to start looking into, but enough about that lets get started.\nThis blog series will cover off everything I have learned so far and will teach you some Bicep and hopefully whet your appetite.\n","date":"30 January 2022","externalUrl":null,"permalink":"/learn-bicep-with-gregor/","section":"Azure Greg","summary":"","title":"Learn Bicep with Gregor","type":"page"},{"content":"I would just like to say a big huge THANK YOU! to everyone who was involved in this years Festive Tech Calendar, organisers, helpers and the people who contributed thier submissions.\nDecember is a busy time for most people trying to tie up loose ends with projects etc, and I appreciate its not a nice time to have to deliver a workshop or record a talk for our event.\nThis year we had 137 entries at the start if December but due to Covid we have had a number of people who had to withdraw. To each and every person who withdrew, I just wanted to go on record to say you never need to say sorry to anyone, health and family health goes before everything else, thank you for submitting and I hope everyone submits again next year.\nWe had a record number of people taking part this year and its been the biggest event we have ran yet so next year we will continue to do the Festive Tech Calendar, if you missed out this time please submit again next year.\nEveryone who submits gets to take part - and I do mean everyone.\nI have learned a few things running these events of the past 4 years and I plan to record some videos on how to go about running an event like this using Sessionize.com, more on that coming in February.\nThis year we decided to raise money for charity and we set a target of £5000 which was hugely ambituous.\nI am delighted to say that at the time of writing this we achieved £5000 and you can still donate https://www.justgiving.com/fundraising/festivetechcalendar\nBefore I go here are some figures thus far:-\n90 Videos 7.7k Views 514 hours worth of content watched Next year we will make some changes so that we can concentrate more on raising money for a charity as this year time ran away from us with regards to this.\nThanks for reading and I hope you all sign up again next year!.\n","date":"1 January 2022","externalUrl":null,"permalink":"/2022/01/01/festive-tech-calendar-2021-its-a-wrap/","section":"Posts","summary":"","title":"Festive Tech Calendar 2021- its a wrap","type":"posts"},{"content":"","date":"1 January 2022","externalUrl":null,"permalink":"/tags/festivetechcalendar/","section":"Tags","summary":"","title":"FestiveTechCalendar","type":"tags"},{"content":"The following will be my study guide for the exam along with the following labs:-\nhttps://azurecosmosdb.github.io/labs/\nDon’t forget to subscribe to my YouTube Channel.\nDesign and Implement Data Models (35–40%) ** Design and implement a non-relational data model for Azure Cosmos DB Core API**\ndevelop a design by storing multiple entity types in the same container develop a design by storing multiple related entities in the same document develop a model that denormalizes data across documents develop a design by referencing between documents identify primary and unique keys identify data and associated access patterns specify a default TTL on a container for a transactional store Design a data partitioning strategy for Azure Cosmos DB Core API\nchoose a partition strategy based on a specific workload choose a partition key plan for transactions when choosing a partition key evaluate the cost of using a cross-partition query calculate and evaluate data distribution based on partition key selection calculate and evaluate throughput distribution based on partition key selection construct and implement a synthetic partition key design partitioning for workloads that require multiple partition keys Plan and implement sizing and scaling for a database created with Azure Cosmos DB\nevaluate the throughput and data storage requirements for a specific workload choose between serverless and provisioned models choose when to use database-level provisioned throughput design for granular scale units and resource governance evaluate the cost of the global distribution of data configure throughput for Azure Cosmos DB by using the Azure portal Implement client connectivity options in the Azure Cosmos DB SDK\nchoose a connectivity mode (gateway versus direct) implement a connectivity mode create a connection to a database enable offline development by using the Azure Cosmos DB emulator handle connection errors implement a singleton for the client specify a region for global distribution configure client-side threading and parallelism options enable SDK logging Implement data access by using the Azure Cosmos DB SQL language\nimplement queries that use arrays, nested objects, aggregation, and ordering implement a correlated subquery implement queries that use array and type-checking functions implement queries that use mathematical, string, and date functions implement queries based on variable data Implement data access by using SQL API SDKs\nchoose when to use a point operation versus a query operation implement a point operation that creates, updates, and deletes documents implement an update by using a patch operation manage multi-document transactions using SDK Transactional Batch perform a multi-document load using SDK Bulk implement optimistic concurrency control using ETags implement session consistency by using session tokens implement a query operation that includes pagination implement a query operation by using a continuation token handle transient errors and 429s specify TTL for a documenthttps://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels retrieve and use query metrics Implement server-side programming in Azure Cosmos DB Core API by using JavaScript\nwrite, deploy, and call a stored procedure design stored procedures to work with multiple items transactionally implement triggers implement a user-defined function Design and Implement Data Distribution (5–10%) ** Design and implement a replication strategy for Azure Cosmos DB**\nchoose when to distribute data define automatic failover policies for regional failure for Azure Cosmos DB Core API perform manual failovers to move single master write regions choose a consistency model identify use cases for different consistency models evaluate the impact of consistency model choices on availability and associated RU cost evaluate the impact of consistency model choices on performance and latency specify application connections to replicated data Design and implement multi-region write\nchoose when to use multi-region write implement multi-region write implement a custom conflict resolution policy for Azure Cosmos DB Core API Integrate an Azure Cosmos DB Solution (5–10%) ** Enable Azure Cosmos DB analytical workloads**\nenable Azure Synapse Link choose between Azure Synapse Link and Spark Connector enable the analytical store on a container enable a connection to an analytical store and query from Azure Synapse Spark or Azure Synapse SQL perform a query against the transactional store from Spark write data back to the transactional store from Spark Implement solutions across services\nintegrate events with other applications by using Azure Functions and Azure Event Hubs denormalize data by using Change Feed and Azure Functions enforce referential integrity by using Change Feed and Azure Functions aggregate data by using Change Feed and Azure Functions, including reporting archive data by using Change Feed and Azure Functions implement Azure Cognitive Search for an Azure Cosmos DB solution Optimize an Azure Cosmos DB Solution (15–20%) ** Optimize query performance in Azure Cosmos DB Core API**\nadjust indexes on the database calculate the cost of the query retrieve request unit cost of a point operation or query implement Azure Cosmos DB integrated cache Design and implement change feeds for an Azure Cosmos DB Core API\ndevelop an Azure Functions trigger to process a change feed consume a change feed from within an application by using the SDK manage the number of change feed instances by using the change feed estimator implement denormalization by using a change feed implement referential enforcement by using a change feed implement aggregation persistence by using a change feed implement data archiving by using a change feed Define and implement an indexing strategy for an Azure Cosmos DB Core API\nchoose when to use a read-heavy versus write-heavy index strategy choose an appropriate index type configure a custom indexing policy by using the Azure portal implement a composite index optimize index performance Maintain an Azure Cosmos DB Solution (25–30%) ** Monitor and troubleshoot an Azure Cosmos DB solution**\nevaluate response status code and failure metrics monitor metrics for normalized throughput usage by using Azure Monitor monitor server-side latency metrics by using Azure Monitor monitor data replication in relation to latency and availability configure Azure Monitor alerts for Azure Cosmos DB implement and query Azure Cosmos DB logs monitor throughput across partitions monitor distribution of data across partitions monitor security by using logging and auditing Implement backup and restore for an Azure Cosmos DB solution\nchoose between periodic and continuous backup configure periodic backup configure continuous backup and recovery locate a recovery point for a point-in-time recovery recover a database or container from a recovery point Implement security for an Azure Cosmos DB solution choose between service-managed and customer-managed encryption keys configure network-level access control for Azure Cosmos DB configure data encryption for Azure Cosmos DB manage control plane access to Azure Cosmos DB by using Azure role-based access control (RBAC) manage data plane access to Azure Cosmos DB by using keys manage data plane access to Azure Cosmos DB by using Azure Active Directory configure Cross-Origin Resource Sharing (CORS) settings manage account keys by using Azure Key Vault implement customer-managed keys for encryption implement Always Encrypted Implement data movement for an Azure Cosmos DB solution\nchoose a data movement strategy move data by using client SDK bulk operations move data by using Azure Data Factory and Azure Synapse pipelines move data by using a Kafka connector move data by using Azure Stream Analytics move data by using the Azure Cosmos DB Spark Connector Implement a DevOps process for an Azure Cosmos DB solution\nchoose when to use declarative versus imperative operations provision and manage Azure Cosmos DB resources by using Azure Resource Manager templates (ARM templates) migrate between standard and autoscale throughput by using PowerShell or Azure CLI initiate a regional failover by using PowerShell or Azure CLI maintain index policies in production by using ARM templates Remember a lot of this content is covered in the following GitHub labs:-\nhttps://azurecosmosdb.github.io/labs/\nEnjoy!\nDon’t forget to subscribe to my YouTube Channel.\n","date":"18 October 2021","externalUrl":null,"permalink":"/2021/10/18/azure-exam-dp-420-study-guide-designing-and-implementing-cloudnative-applications-using-microsoft-azure-cosmos-db-beta/","section":"Posts","summary":"","title":"Azure Exam DP-420: Study Guide Designing and Implementing CloudNative Applications Using Microsoft Azure Cosmos DB (Beta)","type":"posts"},{"content":"","date":"18 October 2021","externalUrl":null,"permalink":"/categories/azure-exams/","section":"Categories","summary":"","title":"Azure Exams","type":"categories"},{"content":"","date":"18 October 2021","externalUrl":null,"permalink":"/tags/cosmosdb/","section":"Tags","summary":"","title":"CosmosDB","type":"tags"},{"content":"","date":"18 October 2021","externalUrl":null,"permalink":"/denormalizing-your-data-with-azure-functions-3eb53/","section":"Azure Greg","summary":"","title":"Denormalizing your data with Azure Functions and Cosmos DB’s change feed _ by Thomas Weiss _ Medium.html","type":"page"},{"content":"","date":"18 October 2021","externalUrl":null,"permalink":"/denormalizing-your-data-with-azure-functions-and-cosmos-dbs-change-feed-by-thoma/","section":"Azure Greg","summary":"","title":"Denormalizing your data with Azure Functions and Cosmos DB’s change feed _ by Thomas Weiss _ Medium.html","type":"page"},{"content":"","date":"18 October 2021","externalUrl":null,"permalink":"/denormalizing-your-data-with-azure-functions-and-cosmos-dbs-change-feed-by-thomas-weiss-medium-html/","section":"Azure Greg","summary":"","title":"Denormalizing your data with Azure Functions and Cosmos DB’s change feed _ by Thomas Weiss _ Medium.html","type":"page"},{"content":"","date":"20 September 2021","externalUrl":null,"permalink":"/categories/setup/","section":"Categories","summary":"","title":"Setup","type":"categories"},{"content":"So I am happy to report that my work from home setup is almost complete to a decent standard and I thought it might be useful to cover off what I have - how much it cost, possible alternatives and give some reviews as we go, so as they say lets jump right in.\nNote:- people have their own opinions on equipment and the following is my findings.\nWebcam\nI bought a Logitech Brio to start off with, excellent quality for the price - was about **£125 **I think. I then upgraded to a Sony A6000 Mirrorless Digital camera and the quality is a lot sharper and more professional looking - £550.\nMicrophone\nSo I have every make and model of microphone I think there is, I have a few its safe to say. I\u0026rsquo;d recommend the Blue Yet if you want to spend around £100 - decent microphone. I then upgraded this to the Shure SM7B which is £330 and also bought a Focusrite Scarlett Solo 3rd Gen which cost £110 - this is a significant step up in quality if you need to record audio, pricey but worth it.\nLighting\nTo make the background look a little niceer than a blank wall I bought some lights from Govee - https://www.amazon.co.uk/Govee-Wireless-Controlled-Lighting-Assistant/dp/B07QCMCVD7 which cost £24, the products from Govee are superb.\nOther than the above I have a Dell 49\u0026quot; UltraSharp U4919DW monitor which has been my favourtite purchase out of everything I have bought.\nI also bought the Elgato Mic Arm LP - https://www.elgato.com/en/wave-mic-arm-lp but put my DSLR camera on it which works very nicely - the arm costs £90\nI also bought a standing desk from Ikea - https://www.ikea.com/gb/en/p/idasen-desk-sit-stand-black-dark-grey-s39280943/ which cost £550.\nSo as you can see I spent a lot of my hard earned cash on these things, but I like nice things, and these are all top quality products.\nIf you have any questions regarding any of the above, please do reach out to me either here or or twitter @gregor_suttie\nDon’t forget to subscribe to my YouTube Channel.\n","date":"20 September 2021","externalUrl":null,"permalink":"/2021/09/20/work-from-home-setup-mission-accomplished/","section":"Posts","summary":"","title":"Work from home setup: mission accomplished","type":"posts"},{"content":"This December I\u0026rsquo;ll be 4 years into my Azure journey and the struggle is real.\nBefore going any further I am a very upbeat person, I love to have a laugh and wind people up, this isnt meant to sound like I am complaining, its more a personal story.\nWhat do I mean by that? Well its a similar struggle for people starting out learning Azure.\nInstead of where, and how do I get started (which is a common worry when starting out) I have thoughts like how do I stay relevant, what services should I keep an eye on, what areas should I go deep on?\nI am what\u0026rsquo;s called a T-Shaped developer, think of the letter T - I have a breadth of knowledge and go deep in the dev space.\nI never wanted to be the goto person in one area, thats just not me, I have always wanted to know something, about as much as I can, and therefor I pay a heavy price for that.\nPeople who are experts in one area will tend to do better than the person who has a good knowledge across a lot of areas. Why do I think that, I just do, It\u0026rsquo;s hard to stand out as the goto person yeah, but if you are good at one thing then you can devote all of your energy to that one thing. I have a passion for learning and I can be like that forever.\nSo my struggle invloves, what should I learn?, I love working with Azure, its my primary focus area at this time. The thing to remember is technology changes, it evolves, the Cloud changes at speed. I keep an eye on trends ans I see where the trends are heading and If I am honest - not a huge fan of some of the latest technologies.\nWe seem to be making developing a solution a lot harder than it used to be, we seem to have black boxes which our code runs on which no one really fully understands. Maybe I am just old and need to get with the cool kids who knows.\nSo as you can see the struggle is real, keeping your skills up to date isnt too hard if you have the time and energy to do it. My struggle right now is deciding what technologies I want to learn, AI and Data, AKS, Machine Learning.\nWith Ignite coming in November I\u0026rsquo;m sure things might change and VNext is the next cool thing.\nAnyways getting back to the main point, the struggle is real for all of us, not just the person getting started - we are all doing our best to stay relevant, to learn and help our customers.\nRight now I am evaluting what I want to do next, I love my job and I am very lucky to work where I do. This is a personal choice I need to make and its a struggle figuring it all out.\nWhat are you struggling with? - comment below.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"8 September 2021","externalUrl":null,"permalink":"/2021/09/08/the-struggle-is-real/","section":"Posts","summary":"","title":"The struggle is real...","type":"posts"},{"content":"I had 2 weeks off and plans fell through for the second week and so I have had some down time to figure out my next move. I\u0026rsquo;ve been searching for something of late and wasnt sure what it was and I know I have found what it was I needed.\nOff the back of finding what I needed I am creating a **To Don\u0026rsquo;t **list so that I can check this regularly just to ensure I am on track, so here goes.\nDon\u0026rsquo;t consume Twitter, use it to post and leave it there. Same with LinkedIn, share content but dont spend time scrolling through it. Don\u0026rsquo;t purchase a book from Amazon, get half way through it and put it down for good. Don\u0026rsquo;t keep saying yes to every new project that people want me to work on, work on you\u0026rsquo;re own projects. Don\u0026rsquo;t spend time gathering resources for a project and then move onto the next thing because it might be a better idea. Don\u0026rsquo;t start the podcast back up and then let it slide again, I learned a lot from speaking to people all over the globe and it was a lot of fun. Don\u0026rsquo;t spend time blogging just for the sake of blogging. Don\u0026rsquo;t work on cool Azure projects at work and not blog about them either. Don\u0026rsquo;t do any more exams unless I need to know about the thing for work, you\u0026rsquo;ve done loads, concentrate on your other projects. Ok so this was a very quick blog post to keep me in check. I will probably add to it as I go.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"5 September 2021","externalUrl":null,"permalink":"/2021/09/05/to-dont-list/","section":"Posts","summary":"","title":"To Don't List","type":"posts"},{"content":"Background\nJust before covid started I applied for a new job at a company called Intercept in the Netherlands, I had previously only met one of their employees Wesley Haakman whilst at Ignite in Orlando in 2019 I think it was. I spoke to him asking about what they were up to and then spoke to Holly Lehman and asked her opinion on the company, and by this time I was swaying towards accepting the position offered, after I spoke to Holly I was convinced it was the right move for me.\nI joined Intercept later that year on September 1st, 2020. 1 year today.\nIntercept isn\u0026rsquo;t like any other company I had worked for before, other companies were good for different reasons, but where I work now is different, more on that later.\nDuring my time here at Intercept I reckon I have worked on at the very least, 26 different projects in the last 12 months using a large variety of Azure services. My background was as a developer, devops, sre and then a development team manager.\nTech\nI chose Intercept mainly for my love of Azure and wanting to work on it day to day.\nI have worked with the following Azure technologies thus far:-\nAzure Networking, Azure Data Factory, Databricks, Event Hubs, Synapse Analytics, App Service, Azure Functions, Container Registry, Virtual Machines, Azure DevOps, Cosmos DB, MySQL, PostgreSQL, Azure SQL, Azure Active Directory, Azure AD B2C, Azure Key Vault, Security Centre, Azure Api Management, Azure API for FIHR, Azure Event Grid, Logic Apps, Noification Hubs, Service Bus, Automation, Azure Backup, Azure Lighthouse, Azure Monitor, Azure Policy, Azure Portal, Cloud Shell, Cost Management, Azure CDN, Communication Services, Azure Migrate, Site Recovery, Application Gateway, Azure Bastion, Azure DNS, Azure Firewall, Azure Front Door, ExpressRoute, Load Balancer, Traffic Manager, VPN Gateway, Azure Storage, Azure Data Lake Storage and more.\nWorkshops\nI have presented 15 or more workshops covering Azure DevOps, Github Action, Azure Fundamentals and Cost Management. During covid we have done them all remotely, cannot wait until we deliver them in person at Microsoft offices around Europe - really looking forward to that.\nCulture\nThe culture at Intercept is simply awesome, you\u0026rsquo;ll have to take my word for it, I don\u0026rsquo;t want to go on about it but I thank my lucky stars I work here regularly. We have a lot of fun and have what we call the Intercept Cafe 3 times a week where you can drop in and shoot the breeze with anyone who joins (i love this idea!).\nDays off are encouraged, we work flexible hours, everyone speaks English very well (except me of course) and we win as a team, lose as a team, but we mainly kick butt as a team.\nDay to Day\nDay to day we create designs for customer all around Europe and then we implement the design. We also help customers with improving existing solutions and have teams of people in what we call the continous improvement teams. We only do Azure at Intercept and we work mainly with ISV\u0026rsquo;s (Independent Software Vendors).\nIntercept are Hiring\nI would never normally write a blog post about work, and mention were hiring, but things are different at Intercept. I went on holiday and had ZERO stress or feeling in my stomach about returning to work and that was a first.\nWe have colleagues in the Netherlands, England, Scotland, Northern Ireland, Germany and South Africa and had a recent colleague join from South America who moved to the Netherlands - we chat, play bingo, play xbox, and more.\nTake a look at our vacancies page https://intercept.cloud/en/vacancies/\nOther Stuff\nThis summer I decided to down tools and stop studying for exams, stop blogging, stop recording content and just enjoy the summer, thankfully its been the best summer I can remember. I have enjoyed golfing and still doing my bit in the community helping people but havent been sat at my laptop anywhere near as much as I have in the past.\nI was renewed as an MCT and MVP and auditioned for being a trainer on LinkedIn Learning. The training part has been something have been thinking about doing for a while now, finding the time was impossible but not I think I may have decided thats the way I want to go.\nI realise I love helping people, and whatever that entails, helping people get a leg up, bevoming MVP\u0026rsquo;s, helping people by mentoring them etc is what I love doing.\nCareer\nPeople still ask me what I want to do, do I have any career goals? - I can honestly say at this moment I am enjoying life at Intercept. I love working with Azure, I love learning hence why I do so many exams, I have a passion for learning and a passion for helping people which will never leave me. If you\u0026rsquo;re not currently learning something you\u0026rsquo;re going backwards.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"1 September 2021","externalUrl":null,"permalink":"/2021/09/01/1-year-in/","section":"Posts","summary":"","title":"1 year in...","type":"posts"},{"content":"","date":"1 September 2021","externalUrl":null,"permalink":"/categories/community/","section":"Categories","summary":"","title":"Community","type":"categories"},{"content":"There are many ways to pass variables into an Azure Function.\nIn this quick blog post I will show you how you can test the Azure Function locally with local settings and then use app settings from the Azure Portal and then also use values stored within Azure KeyVault incase we need to store and retrive secrets.\nOk, so to run our Azure Function locally I prefer to use C# Azure Functions, they just work, I can debug them in VS Code or Visual Studio - I am a dinosaur and been using Visual Studio since it first came out so I tend to stick with using that over VS Code, yes I am that old.\nMoving on lets show how we can make use of variables whilst debugging locally, for this we just need to create a local.settings.json file like the one below:-\n{ \u0026ldquo;IsEncrypted\u0026rdquo;: false, \u0026ldquo;Values\u0026rdquo;: { \u0026ldquo;FUNCTIONS_WORKER_RUNTIME\u0026rdquo;: \u0026ldquo;dotnet\u0026rdquo;, \u0026ldquo;AzureWebJobsStorage\u0026rdquo;: \u0026ldquo;UseDevelopmentStorage=true\u0026rdquo;, \u0026ldquo;DemoUsername\u0026rdquo;: \u0026ldquo;azuregreg\u0026rdquo;, \u0026ldquo;DemoPassword\u0026rdquo;: \u0026ldquo;letmein\u0026rdquo; } }\nSo our code can now use a stored username and password to test with locally - we **don\u0026rsquo;t check this file in **as its only for testing locally (add a .gitignore file).\nOk so we can test our Azure Function with code that accesses the local variable and away we go.\nSo our function now outputs the following (remember this is from local settings) :-\nthis is gregors demo function - the username is azuregreg and the password is letmein\nNow the interesting part next is how do we store variables in Azure and make use of them.\nSo, we have some options available to us, for things like username and password we can store them in Azure KeyVault, if they are simple settings then we can store them in appsettings within the Azure Portal.\nLet\u0026rsquo;s take a look at storing these variable in the App Settings section of the Azure Portal for our Azure Functions.\nIn the screen shot above we are in the Azure Portal and clicked into our Azure Function app and then click on Configuration and then + New application setting\nNow we can add configuration values to our code, we can store setting here but sometimes we need to store secrets and for this we use Azure KeyVault, which we will return to shortly.\nSo lets add the username and password settings into the application settings and see how we can use them first of all.\nSo I went ahead and added them into the application settings section like so:-\nIn the screen shot above I clicked Show Values so that I can show you, the reader, the values I set exactly the same properties in the local.settings.json file when debugging locally - click Save.\nOk, so now we have added in some application settings, how does the code need to change to pick up these values from this area in the Portal? - well the good answer is we don\u0026rsquo;t need to change our code, it works exactly the same way as whilst using the local.settings.json file.\nSo the above works, but I hate when people say yeah but it works, yeah it works but can we make it better should always be the question - getting things working and making it as secure as it can be are different things altogether.\nSo why would we want to perhaps store the username and password in KeyVault? - glad you asked.\nMaybe there is a username and password which you don\u0026rsquo;t want everyone to know, so you can add these values to KeyVault and not give anyone access to read the values for the password for example, but your application can read and use the value from the keyvault without anyone being able to see the password in plain text - sounds good to me so lets go set this up.\nIf you want to test this out I created a C# Azure Function which is basically just the following code, reminder the local.settings.json is at the start of the blog post.\nC# Azure function code below.\n[FunctionName(\u0026ldquo;Function1\u0026rdquo;)] public static async Task Run( [HttpTrigger(AuthorizationLevel.Function, \u0026ldquo;get\u0026rdquo;, \u0026ldquo;post\u0026rdquo;, Route = null)] HttpRequest req, ILogger log) { log.LogInformation(\u0026ldquo;C# HTTP trigger function processed a request.\u0026rdquo;);\nstring username = Environment.GetEnvironmentVariable(\u0026quot;DemoUsername\u0026quot;); string password = Environment.GetEnvironmentVariable(\u0026quot;DemoPassword\u0026quot;); string responseMessage = \u0026quot;this is gregors demo function\u0026quot;; return new OkObjectResult(responseMessage); }\nFirst we need to create a KeyVault and one you\u0026rsquo;ve done that, locate it and click on Secrets and create 2 new secrets, lets call then username and **password **for simplicity - set the values like so:-\nusername: azuregregviaappsettings password: letmeinviaappsettings\nWhen we run our Azure HTTP Function this time it picks up the values from the appsettings we just updated in the app settings section of the Azure function in the portal.\nSo our function now outputs:-\nthis is gregors demo function - the username is azuregregviaappsettings and the password is letmeinviaappsettings\nLets now change our existing app settings so that we get the details from KeyVault rather than just simply storing them in our app settings (where anyone can see them) - only people with the correct RBAC user rights can see our KeyVault secrets.\nOk now that we have our 2 secrets lets try to access them from the appsettings section of our Azure Function. Go back to the Azure Function and then click on Configuration and then we will be back at the screen that shows us our current applications settings.\nNow lets edit the existing app setting called DemoUsername by finding the row and selecting the edit button as below :-\nLets past in the following @Microsoft.KeyVault(SecretUri=https://****.vault.azure.net/secrets/username) replacing **** with the name of your KeyVault like below.\nOnce you\u0026rsquo;ve done this for the username and password we can now use the values from our Azure Function.\nBefore this works we need to do a couple more steps - we need to create a managed identity and then also create an access policy within KeyVault.\nTo create a managed identity go to your Azure Function and then** under Settings, select Identity**. Change the status to On and click Save, also take a copy of the Object ID as we will need this later on.\nNext we need to create an access policy within Kay Vault, so go into you\u0026rsquo;re KeyVault and select Access Policies, and then choose the + Add Access Policy link. Where it says Select principal, click the words none selected and then paste in the Object ID we took a note of above and then select it. Then within the Secret permission drop down select **Get **and **List **and then click Add.\nNow go back to your Azure Function and select Configuration and then edit both your DemoUsername and DemoPassword app settings and then click save, They should now look like this:-\nNotice in the screen shot above the Green Tick next to the words Key vault Reference, if this is red then check your steps with the managed identity, and creating the access policy above.\nSo our function now outputs:-\nthis is gregors demo function - the username is azuregregfromkeyvault and the password is letmeinviakeyvault\nAnd that is how you can run and test or function locally, using local.settings.json but also stored environment variables in app settings but also store them in KeyVault if they are secrets.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"5 August 2021","externalUrl":null,"permalink":"/2021/08/05/how-to-set-environment-variables-for-use-with-an-azure-function/","section":"Posts","summary":"","title":"How to set environment variables for use with an Azure Function","type":"posts"},{"content":"In this blog post we will cover how to deploy your Azure Function using Azure DevOps to try to get away from the right click publish way of deploying / or deploying straight from VS Code for example (ideally we want to run tests against our code). In my case I will be deploying a PowerShell Azure Function.\nIn Azure DevOps we have a new repo project which has our Azure Function code within a repository in Azure DevOps.\nIf we choose select Create Pipeline\nWe can then choose, **Azure Repos Git **like so:-\nThen we need to select the Repo, next we select PowerShell Function App to Windows on Azure\nNext we need to select the correct Azure Subscription, and then choose an existing Function App Name, then click Validate and configure.\nSo now we have a pipeline YAML file which will build and deploy your Azure PowerShell Function to Azure itself and the Yaml looks like the following:-\nWe can set our pipeline to build and deploy the code whenever any code changes are commited to the Azure Repo. As you can see highlighted above we do this by using a trigger: - master which means any commits to this branch will run the pipeline.\nThis is pretty simple stuff but its nice to know that Azure DevOps can tell from the repo that we have a PowerShell Azure Function and can create our yaml for us.\n","date":"3 August 2021","externalUrl":null,"permalink":"/2021/08/03/deploying-your-azure-function-using-azure-devops/","section":"Posts","summary":"","title":"Deploying your Azure Function using Azure DevOps","type":"posts"},{"content":"","date":"14 May 2021","externalUrl":null,"permalink":"/categories/pro-tips/","section":"Categories","summary":"","title":"Pro Tips","type":"categories"},{"content":"I see people on Twitter saying what advice would you give to younger people or what career advice would you give people who are just getting started in their careers.\nOk, so, I have been in the I.T. industry for 25 years, I didn\u0026rsquo;t do any Computer Science courses, etc, I am a self-taught programmer and here is my advice, yep that\u0026rsquo;s right my advice, you may disagree and that\u0026rsquo;s great, be boring if we all agreed all the time.\nAsk for help, don\u0026rsquo;t be shy to ask for help always. Ask for feedback, on all types of things, feedback is important for growth, you may not like it but you\u0026rsquo;ll learn more from negative feedback than you will from positive feedback. Work like someone is watching you, never slack, put a shift in each and every day. Do something you enjoy doing, at your job you will be doing it day in and day out for a long time most likely. Find a mentor, and talk to them regularly. Be passionate about what you do. Learn something outside your comfort zone, as often as you can, staying in your comfort zone teaches you next to nothing. Don\u0026rsquo;t try and learn it all, no one knows it all, and neither will you. Pick a subject area and be someone who stands out in this area. If you are thinking about doing something and it\u0026rsquo;s a challenge, go for it, just do it, stop overthinking. If you have a job that you don\u0026rsquo;t like - find another job. Be honest and trustworthy and you will go a long way, no BS, leave that for others. Thank the people who help you. Give back when you can. Network with like-minded people, there are lots of people out there just like you. Work smart, not hard. Share failures and successes, no one wins all the time, you\u0026rsquo;ll learn more from your failures. Don’t forget to subscribe to my YouTube Channel.\n","date":"14 May 2021","externalUrl":null,"permalink":"/2021/05/14/what-advice-would-you-give/","section":"Posts","summary":"","title":"What advice would you give...","type":"posts"},{"content":"In this blog post I cover all of the resources I came across whilst studying for the AZ-102 Exam\nAI-102: AI Engineer on GitHub: - https://github.com/MicrosoftLearning/AI-102-AIEngineerhttps://github.com/MicrosoftLearning/AI-102-AIEngineer\nAnd this too:-\nhttps://microsoftlearning.github.io/AI-102-AIEngineer/\nPlan and Manage an Azure Cognitive Services Solution (15-20%) Select the appropriate Cognitive Services resource\nselect the appropriate cognitive service for a vision solution https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/overview https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/overview select the appropriate cognitive service for a language analysis solution https://docs.microsoft.com/en-us/azure/cognitive-services/luis/what-is-luis select the appropriate cognitive Service for a decision support solution https://docs.microsoft.com/en-us/azure/cognitive-services/what-are-cognitive-services#decision-apis select the appropriate cognitive service for a speech solution https://docs.microsoft.com/en-us/azure/cognitive-services/what-are-cognitive-services#speech-apis Plan and configure security for a Cognitive Services solution\nmanage Cognitive Services account keys https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Cwindows#get-the-keys-for-your-resource manage authentication for a resource https://docs.microsoft.com/en-us/azure/cognitive-services/authentication?tabs=powershell secure Cognitive Services by using Azure Virtual Network https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-virtual-networks?tabs=portal plan for a solution that meets responsible AI principles https://www.microsoft.com/en-us/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4 Create a Cognitive Services resource\ncreate a Cognitive Services resource https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account?tabs=multiservice%2Cwindows configure diagnostic logging for a Cognitive Services resource https://docs.microsoft.com/en-us/azure/cognitive-services/diagnostic-logging manage Cognitive Services costs https://docs.microsoft.com/en-us/azure/cognitive-services/plan-manage-costs monitor a cognitive service https://docs.microsoft.com/en-us/azure/search/search-monitor-usage implement a privacy policy in Cognitive Services https://docs.microsoft.com/en-us/legal/cognitive-services/computer-vision/compliance-privacy-security-2 Plan and implement Cognitive Services containers\nidentify when to deploy to a container https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-container-support containerize Cognitive Services (including Computer Vision API, Face API, Text Analytics, Speech, Form Recognizer) https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/speech-container-howto?tabs=stt%2Ccsharp%2Csimple-format Implement Computer Vision Solutions (20-25%) ** Analyze images by using the Computer Vision API**\nretrieve image descriptions and tags by using the Computer Vision API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-tagging-images identify landmarks and celebrities by using the Computer Vision API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-detecting-domain-content detect brands in images by using the Computer Vision API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-brand-detection moderate content in images by using the Computer Vision API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-detecting-adult-content generate thumbnails by using the Computer Vision API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/concept-generating-thumbnails Extract text from images\nextract text from images by using the OCR API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/overview-ocr extract text from images or PDFs by using the Read API https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/overview-ocr#read-api convert handwritten text by using Ink Recognizer https://docs.microsoft.com/en-us/previous-versions/azure/cognitive-services/Ink-Recognizer/quickstarts/csharp extract information from forms or receipts by using the pre-built receipt model in Form Recognizer https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/concept-receipts build and optimize a custom model for Form Recognizer https://docs.microsoft.com/en-us/azure/cognitive-services/form-recognizer/build-training-data-set Extract facial information from images\ndetect faces in an image by using the Face API https://docs.microsoft.com/en-us/azure/cognitive-services/face/face-api-how-to-topics/howtodetectfacesinimage recognize faces in an image by using the Face API https://docs.microsoft.com/en-us/azure/cognitive-services/face/quickstarts/client-libraries?tabs=visual-studio\u0026amp;pivots=programming-language-csharp o configure persons and person groups https://docs.microsoft.com/en-us/rest/api/cognitiveservices/face/persongroupperson/create analyze facial attributes by using the Face API https://docs.microsoft.com/en-in/learn/modules/detect-analyze-faces/2-face-analysis-azure match similar faces by using the Face API https://docs.microsoft.com/en-us/rest/api/faceapi/face/findsimilar Implement image classification by using the Custom Vision service\nlabel images by using the Computer Vision Portal https://docs.microsoft.com/en-in/azure/cognitive-services/custom-vision-service/suggested-tags train a custom image classification model in the Custom Vision Portal https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier train a custom image classification model by using the SDK https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/quickstarts/image-classification?tabs=visual-studio\u0026amp;pivots=programming-language-csharp manage model iterations https://docs.microsoft.com/en-in/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier#manage-training-iterations evaluate classification model metrics https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier#evaluate-the-classifier publish a trained iteration of a model https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/use-prediction-api#publish-your-trained-iteration export a model in an appropriate format for a specific target https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/export-your-model consume a classification model from a client application https://docs.microsoft.com/en-us/azure/machine-learning/how-to-consume-web-service?tabs=python deploy image classification custom models to containers https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-deploy-custom-vision?view=iotedge-2018-06 Implement an object detection solution by using the Custom Vision service\nlabel images with bounding boxes by using the Computer Vision Portal https://docs.microsoft.com/en-us/azure/machine-learning/how-to-label-data#tag-images-and-specify-bounding-boxes-for-object-detection train a custom object detection model by using the Custom Vision Portal https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/get-started-build-detector train a custom object detection model by using the SDK https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio\u0026amp;pivots=programming-language-csharp manage model iterations https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/get-started-build-detector#manage-training-iterations evaluate object detection model metrics https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/get-started-build-detector#evaluate-the-detector publish a trained iteration of a model https://docs.microsoft.com/en-us/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio\u0026amp;pivots=programming-language-csharp#publish-the-current-iteration consume an object detection model from a client application https://docs.microsoft.com/en-us/ai-builder/object-detection-model-in-flow deploy custom object detection models to containers https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-container-support Analyze video by using Video Indexer\nprocess a video https://docs.microsoft.com/en-us/azure/media-services/video-indexer/upload-index-videos extract insights from a video https://docs.microsoft.com/en-us/learn/modules/extract-insights-from-videos-with-video-indexer-service/ moderate content in a video https://azure.microsoft.com/en-gb/services/cognitive-services/content-moderator customize the Brands model used by Video Indexer https://docs.microsoft.com/en-us/azure/media-services/video-indexer/customize-brands-model-with-website customize the Language model used by Video Indexer by using the Custom Speech service https://docs.microsoft.com/en-us/azure/media-services/video-indexer/customize-language-model-with-website customize the Person model used by Video Indexer https://docs.microsoft.com/en-us/azure/media-services/video-indexer/customize-person-model-with-website extract insights from a live stream of video data https://www.youtube.com/watch?v=wAHRBpqxpOg Implement Natural Language Processing Solutions (20-25%) ** Analyze text by using the Text Analytics service**\nretrieve and process key phrases https://docs.microsoft.com/en-in/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-keyword-extraction retrieve and process entity information (people, places, urls, etc.) https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-entity-linking?tabs=version-3-preview retrieve and process sentiment https://docs.microsoft.com/en-us/azure/databricks/scenarios/databricks-sentiment-analysis-cognitive-services?toc=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fcognitive-services%2Ftext-analytics%2Ftoc.json\u0026amp;bc=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fbread%2Ftoc.json detect the language used in text https://docs.microsoft.com/en-us/azure/cognitive-services/text-analytics/how-tos/text-analytics-how-to-language-detection Manage speech by using the Speech service\nimplement text-to-speech https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/text-to-speech customize text-to-speech https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/how-to-custom-voice implement speech-to-text https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started-speech-to-text?tabs=windowsinstall\u0026amp;pivots=programming-language-csharp improve speech-to-text accuracy https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/tutorial-tenant-model Translate language\ntranslate text by using the Translator service https://docs.microsoft.com/en-us/azure/cognitive-services/translator/translator-info-overview translate speech-to-speech by using the Speech service https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started-speech-translation?tabs=script%2Cwindowsinstall\u0026amp;pivots=programming-language-csharp translate speech-to-text by using the Speech service https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started-speech-to-text?tabs=windowsinstall\u0026amp;pivots=programming-language-csharp Build an initial language model by using Language Understanding Service (LUIS)\ncreate intents and entities based on a schema, and then add utterances https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-add-intents create complex hierarchical entities https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-concept-entity-types o use this instead of roles https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-collaborate train and deploy a model https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-train Iterate on and optimize a language model by using LUIS\nimplement phrase lists https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-concept-feature#create-a-phrase-list-for-a-concept implement a model as a feature (i.e. prebuilt entities) https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-add-features#model-as-a-feature manage punctuation and diacritics https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-reference-application-settings#punctuation-normalization implement active learning https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-concept-review-endpoint-utterances monitor and correct data imbalances https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-use-dashboard#review-data-imbalance implement patterns https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-tutorial-pattern Manage a LUIS model\nmanage collaborators https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-collaborate manage versioning https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-manage-versions publish a model through the portal or in a container https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-how-to-publish-app export a LUIS package https://docs.microsoft.com/en-us/azure/cognitive-services/luis/luis-container-howto?tabs=v3#export-packaged-app-from-luis deploy a LUIS package to a container https://docs.microsoft.com/en-us/azure/cognitive-services/containers/azure-container-instance-recipe?tabs=portal integrate Bot Framework (LUDown) to run outside of the LUIS portal https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Ludown#ludown Implement Knowledge Mining Solutions (15-20%) Implement a Cognitive Search solution\ncreate data sources https://docs.microsoft.com/en-us/rest/api/searchservice/create-data-source define an index https://docs.microsoft.com/en-us/azure/search/search-what-is-an-index create and run an indexer https://docs.microsoft.com/en-us/azure/search/search-howto-create-indexers#run-the-indexer query an index https://docs.microsoft.com/en-us/azure/search/search-query-overview configure an index to support autocomplete and autosuggest https://docs.microsoft.com/en-us/azure/search/search-add-autocomplete-suggestions boost results based on relevance https://docs.microsoft.com/en-us/azure/search/index-add-scoring-profiles implement synonyms https://docs.microsoft.com/en-us/azure/search/search-synonyms Implement an enrichment pipeline\nattach a Cognitive Services account to a skillset https://docs.microsoft.com/en-us/azure/search/cognitive-search-attach-cognitive-services select and include built-in skills for documents https://docs.microsoft.com/en-us/azure/search/cognitive-search-predefined-skills implement custom skills and include them in a skillset https://docs.microsoft.com/en-us/azure/search/cognitive-search-custom-skill-interface Implement a knowledge store\ndefine file projections https://docs.microsoft.com/en-us/azure/search/knowledge-store-projections-examples#projecting-to-file define object projections https://docs.microsoft.com/en-us/azure/search/knowledge-store-projections-examples#projecting-to-objects define table projections https://docs.microsoft.com/en-us/azure/search/knowledge-store-projections-examples#projecting-to-tables query projections https://docs.microsoft.com/en-us/azure/search/knowledge-store-projection-overview Manage a Cognitive Search solution\nprovision Cognitive Search https://docs.microsoft.com/en-us/azure/search/search-create-service-portal configure security for Cognitive Search https://docs.microsoft.com/en-us/azure/search/search-security-overview configure scalability for Cognitive Search https://docs.microsoft.com/en-us/azure/search/search-performance-optimization Manage indexing\nmanage re-indexing https://docs.microsoft.com/en-us/rest/api/searchservice/update-index\nrebuild indexes https://docs.microsoft.com/en-us/azure/search/search-howto-reindex\nschedule indexing https://docs.microsoft.com/en-us/azure/search/search-howto-schedule-indexers\nmonitor indexing https://docs.microsoft.com/en-us/azure/search/search-howto-monitor-indexers\nimplement incremental indexing https://docs.microsoft.com/en-us/azure/search/cognitive-search-incremental-indexing-conceptual\nmanage concurrency https://docs.microsoft.com/en-us/azure/search/search-howto-concurrency\npush data to an index https://docs.microsoft.com/en-us/azure/search/search-what-is-data-import#pushing-data-to-an-index\ntroubleshoot indexing for a pipeline https://docs.microsoft.com/en-us/azure/search/search-indexer-troubleshooting Implement Conversational AI Solutions (15-20%) Create a knowledge base by using QnA Maker\ncreate a QnA Maker service https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/set-up-qnamaker-service-azure?tabs=v1#create-a-new-qna-maker-service\ncreate a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base?tabs=v1\nimport a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/tutorials/migrate-knowledge-base#migrate-a-knowledge-base-from-qna-maker\ntrain and test a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base?tabs=v1#save-and-train\npublish a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base?tabs=v1#publish-the-knowledge-base\ncreate a multi-turn conversation https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/multiturn-conversation\nadd alternate phrasing https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/edit-knowledge-base#add-alternate-questions\nadd chit-chat to a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/chit-chat-knowledge-base?tabs=v1\nexport a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/tutorials/migrate-knowledge-base\nadd active learning to a knowledge base https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/how-to/use-active-learning?tabs=v1\nmanage collaborators https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/concepts/role-based-access-control\nDesign and implement conversation flow\ndesign conversation logic for a bot https://docs.microsoft.com/en-us/azure/bot-service/bot-service-design-conversation-flow?view=azure-bot-service-4.0 create and evaluate *.chat file conversations by using the Bot Framework Emulator https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-debug-transcript?view=azure-bot-service-4.0 add language generation for a response https://docs.microsoft.com/en-us/composer/concept-language-generation design and implement adaptive cards https://docs.microsoft.com/en-us/adaptive-cards/sdk/designer Create a bot by using the Bot Framework SDK\nimplement dialogs https://docs.microsoft.com/en-us/azure/bot-service/skill-actions-in-dialogs?view=azure-bot-service-4.0\u0026amp;tabs=cs maintain state https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-state?view=azure-bot-service-4.0 implement logging for a bot conversation https://docs.microsoft.com/en-us/azure/bot-service/using-trace-activities?view=azure-bot-service-4.0\u0026amp;tabs=csharp implement a prompt for user input https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-primitive-prompts?view=azure-bot-service-4.0\u0026amp;tabs=csharp add and review bot telemetry https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-telemetry?view=azure-bot-service-4.0\u0026amp;tabs=csharp implement a bot-to-human handoff https://docs.microsoft.com/en-us/azure/bot-service/bot-service-design-pattern-handoff-human?view=azure-bot-service-4.0 troubleshoot a conversational bot https://docs.microsoft.com/en-us/azure/bot-service/bot-service-troubleshoot-general-problems?view=azure-bot-service-4.0 add a custom middleware for processing user messages https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-concept-middleware?view=azure-bot-service-4.0 manage identity and authentication https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0\u0026amp;tabs=aadv2%2Ccsharp implement channel-specific logic https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-channeldata?view=azure-bot-service-4.0 publish a bot https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-tutorial-deploy-basic-bot?view=azure-bot-service-4.0\u0026amp;tabs=csharp Create a bot by using the Bot Framework Composer\nimplement dialogs https://docs.microsoft.com/en-us/composer/concept-dialog maintain state https://docs.microsoft.com/en-us/composer/concept-memory implement logging for a bot conversation https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-telemetry?view=azure-bot-service-4.0\u0026amp;tabs=csharp implement prompts for user input https://docs.microsoft.com/en-us/composer/how-to-ask-for-user-input troubleshoot a conversational bot https://docs.microsoft.com/en-us/azure/bot-service/bot-service-troubleshoot-bot-configuration?view=azure-bot-service-4.0 test a bot by using the Bot Framework Emulator https://docs.microsoft.com/en-us/azure/bot-service/bot-service-debug-emulator?view=azure-bot-service-4.0\u0026amp;tabs=csharp publish a bot https://docs.microsoft.com/en-us/composer/how-to-publish-bot Integrate Cognitive Services into a bot\nintegrate a QnA Maker service https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-qna?view=azure-bot-service-4.0\u0026amp;tabs=cs integrate a LUIS service https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-luis?view=azure-bot-service-4.0\u0026amp;tabs=csharp integrate a Speech service https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-connector-text-to-speech?view=azure-bot-service-4.0 integrate Dispatch for multiple language models https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-tutorial-dispatch?view=azure-bot-service-4.0\u0026amp;tabs=cs manage keys in app settings file https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-luis?view=azure-bot-service-4.0\u0026amp;tabs=csharp#update-the-settings-file ","date":"13 May 2021","externalUrl":null,"permalink":"/2021/05/13/ai-102-azure-study-guide/","section":"Posts","summary":"","title":"AI-102 Azure Study Guide","type":"posts"},{"content":"I got some great advice from my sister when I was younger regarding networking with people and it stayed with me.\nI get people saying to me that I know everyone, I smile at that because that means my hard work is paying off, what do I mean by hard work?\nI am different to a lot of people - a lot of people look at things like Twitter and see numbers of followers, etc and they say they don\u0026rsquo;t care about numbers, I believe them, I really do. I on the other hand think of it differently, I see social media as a way to people network. If I have the opportunity to engage with people who I can help or they can help me then I am going to grab that opportunity always.\nIf you walked into a conference and you know people and people know you, there is an ice breaker for starters, but not everyone is a social butterfly, trust me neither am I, but I am working on it.\nImagine you could find all of the like-minded people who can help you day to day with questions you may have and explanations without ever leaving your seat or having to troll through wrong stack overflow answers.\nGoing back to the whole everyone knows you, I took some time to find the people I want to connect with, I work with Azure daily, I looked for all the people who work at Microsoft and are Azure minded people - I follow them and that way I learn more than you would think.\nWhen I went to Ignite 2019 I recognized a lot of people and that was amazing, I spoke to people I had interacted with a little bit on Twitter and now I chat with them regularly.\nSummary\nThere is no ego here, If you have an ego then we can\u0026rsquo;t be friends. I don\u0026rsquo;t follow people to get numbers up, although the image below does crack me up, I follow people so that I can network, as networking brings opportunities, wide-ranging opportunities at that.\nI have had more opportunities than I could ever imagine, I\u0026rsquo;ve spent the Covid time saying mostly no to people. Networking has meant I have been able to help a lot of people with the Azure exams and also get started learning Azure.\nMy 2 cents is to network your backside off.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"8 May 2021","externalUrl":null,"permalink":"/2021/05/08/people-networking/","section":"Posts","summary":"","title":"People Networking","type":"posts"},{"content":"Plan and Implement Data Platform Resources (15-20%) Deploy resources by using manual methods\nDeploy database offerings on selected platforms https://docs.microsoft.com/en-us/azure/sql-database/sql-database-single-database-get-started?tabs=azure-portal\u0026amp;?WT.mc_id=AZ-MVP-5003451 configure customized deployment templates https://docs.microsoft.com/en-us/azure/templates/microsoft.sql/servers?tabs=json\u0026amp;?WT.mc_id=AZ-MVP-5003451 apply patches and updates for hybrid and IaaS deployment https://docs.microsoft.com/en-us/azure/sql-database/sql-database-single-database-get-started?tabs=azure-portal\u0026amp;WT.mc_id=AZ-MVP-5003451 Recommend an appropriate database offering based on specific requirements\nevaluate requirements for the deployment https://docs.microsoft.com/en-us/azure/devops/pipelines/targets/azure-sqldb?view=azure-devops\u0026amp;tabs=yaml\u0026amp;WT.mc_id=AZ-MVP-5003451 evaluate the functional benefits/impact of possible database offerings https://docs.microsoft.com/en-us/azure/sql-database/sql-database-paas-vs-sql-server-iaas?WT.mc_id=AZ-MVP-5003451 evaluate the scalability of the possible database offering https://techcommunity.microsoft.com/t5/azure-sql-database/azure-sql-database-8211-scalability/ba-p/386201?WT.mc_id=AZ-MVP-5003451 evaluate the HA/DR of the possible database offering https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-high-availability-dr?WT.mc_id=AZ-MVP-5003451 evaluate the security aspects of the possible database offering https://docs.microsoft.com/en-us/azure/sql-database/sql-database-security-overview?WT.mc_id=AZ-MVP-5003451 Configure resources for scale and performance\nconfigure Azure SQL database/elastic pools for scale and performance https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-introduction\nconfigure Azure SQL managed instances for scale and performance https://docs.microsoft.com/en-us/azure/azure-sql/database/scale-resources?WT.mc_id=AZ-MVP-5003451\nconfigure SQL Server in Azure VMs for scale and performance https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-performance?WT.mc_id=AZ-MVP-5003451\ncalculate resource requirements https://docs.microsoft.com/en-us/sharepoint/administration/storage-and-sql-server-capacity-planning-and-configuration?WT.mc_id=AZ-MVP-5003451\nevaluate database partitioning techniques, such as database sharding https://docs.microsoft.com/en-us/azure/architecture/patterns/sharding?WT.mc_id=AZ-MVP-5003451\nset up SQL Data Sync https://docs.microsoft.com/en-us/azure/azure-sql/database/sql-data-sync-sql-server-configure?WT.mc_id=AZ-MVP-5003451\nEvaluate a strategy for moving to Azure\nevaluate requirements for the migration https://docs.microsoft.com/en-us/azure/dms/pre-reqs?WT.mc_id=AZ-MVP-5003451 evaluate offline or online migration strategies https://azure.microsoft.com/en-gb/services/database-migration/?WT.mc_id=AZ-MVP-5003451 evaluate requirements for the upgrade https://docs.microsoft.com/en-us/sql/database-engine/install-windows/supported-version-and-edition-upgrades-version-15?view=sql-server-ver15#pre-upgrade-checklist\u0026amp;WT.mc_id=AZ-MVP-5003451 evaluate offline or online upgrade strategies https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-application-rolling-upgrade?WT.mc_id=AZ-MVP-5003451 Implement a migration or upgrade strategy for moving to Azure\nimplement an online migration strategy https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-azure-sql-online?WT.mc_id=AZ-MVP-5003451 implement an offline migration strategy https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-to-azure-sql?WT.mc_id=AZ-MVP-5003451 implement an online upgrade strategy https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-application-rolling-upgrade?WT.mc_id=AZ-MVP-5003451 implement an offline upgrade strategy https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-to-a-different-edition-of-sql-server-setup?view=sql-server-ver15?WT.mc_id=AZ-MVP-5003451 Implement a Secure Environment (15-20%)\nConfigure database authentication by using platform and database tools\nconfigure Azure AD authentication https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication-configure?tabs=azure-powershell?WT.mc_id=AZ-MVP-5003451 create users from Azure AD identities https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-configure?tabs=azure-powershell#create-contained-users-mapped-to-azure-ad-identities\u0026amp;WT.mc_id=AZ-MVP-5003451 configure security principals https://techcommunity.microsoft.com/t5/azure-sql-database/azure-ad-service-principal-authentication-to-sql-db-code-sample/ba-p/481467?WT.mc_id=AZ-MVP-5003451 Configure database authorization by using platform and database tools\nconfigure database and object-level permissions using graphical tools https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/getting-started-with-database-engine-permissions?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 apply principle of least privilege for all securables https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/authorization-and-permissions-in-sql-server?WT.mc_id=AZ-MVP-5003451 Implement security for data at rest\nimplement Transparent Data Encryption (TDE) https://docs.microsoft.com/en-us/azure/sql-database/transparent-data-encryption-azure-sql?tabs=azure-portal\u0026amp;WT.mc_id=AZ-MVP-5003451 implement object-level encryption https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vault?tabs=azure-powershell\u0026amp;WT.mc_id=AZ-MVP-5003451 implement Dynamic Data Masking https://docs.microsoft.com/en-us/azure/sql-database/sql-database-dynamic-data-masking-get-started-portal?WT.mc_id=AZ-MVP-5003451 implement Azure Key Vault and disk encryption for Azure VMs https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disk-encryption-portal-quickstart?WT.mc_id=AZ-MVP-5003451 Implement security for data in transit\nconfigure server and database-level firewall rules https://docs.microsoft.com/en-us/azure/azure-sql/database/firewall-configure#server-level-versus-database-level-ip-firewall-rules?WT.mc_id=AZ-MVP-5003451 implement Always Encrypted https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted?WT.mc_id=AZ-MVP-5003451 Implement compliance controls for sensitive data\napply a data classification strategy https://docs.microsoft.com/bs-latn-ba/azure/cloud-adoption-framework/govern/policy-compliance/data-classification?WT.mc_id=AZ-MVP-5003451 configure server and database audits https://docs.microsoft.com/en-us/azure/sql-database/sql-database-auditing?WT.mc_id=AZ-MVP-5003451 implement data change tracking https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/enable-and-disable-change-tracking-sql-server?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform a vulnerability assessment https://docs.microsoft.com/en-us/azure/sql-database/sql-vulnerability-assessment?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Monitor and Optimize Operational Resources (15-20%)\nMonitor activity and performance\nprepare an operational performance baseline https://docs.microsoft.com/en-us/sql/relational-databases/performance/establish-a-performance-baseline?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 determine sources for performance metrics https://docs.microsoft.com/en-us/azure/azure-monitor/platform/data-sources?WT.mc_id=AZ-MVP-5003451 interpret performance metrics https://docs.microsoft.com/en-us/azure/sql-database/sql-database-query-performance?WT.mc_id=AZ-MVP-5003451 assess database performance by using Intelligent Insights for Azure SQL Database and Managed Instance https://docs.microsoft.com/en-us/azure/sql-database/sql-database-intelligent-insights?WT.mc_id=AZ-MVP-5003451 configure and monitor activity and performance at the infrastructure, server, service, and database levels https://docs.microsoft.com/en-us/azure/azure-sql/database/monitor-tune-overview?WT.mc_id=AZ-MVP-5003451 Implement performance-related maintenance tasks\nimplement index maintenance tasks https://docs.microsoft.com/answers/questions/129461/automating-azure-sql-database-index-maintenance.html?WT.mc_id=AZ-MVP-5003451 implement statistics maintenance tasks https://docs.microsoft.com/en-us/sql/relational-databases/maintenance-plans/update-statistics-task-maintenance-plan?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 configure database auto-tuning https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automatic-tuning-enable?WT.mc_id=AZ-MVP-5003451 automate database maintenance tasks https://docs.microsoft.com/en-us/azure/azure-sql/database/automation-manage?WT.mc_id=AZ-MVP-5003451 manage storage capacity https://docs.microsoft.com/en-us/azure/sql-database/sql-database-file-space-management?WT.mc_id=AZ-MVP-5003451 Identify performance-related issues\nconfigure Query Store to collect performance data https://docs.microsoft.com/en-us/azure/sql-database/sql-database-query-performance?WT.mc_id=AZ-MVP-5003451 identify sessions that cause blocking https://azure.microsoft.com/en-in/blog/finding-blocking-queries-in-sql-azure?WT.mc_id=AZ-MVP-5003451 assess growth/fragmentation of databases and logs https://docs.microsoft.com/en-us/azure/azure-sql/database/monitor-tune-overview?WT.mc_id=AZ-MVP-5003451 assess performance-related database configuration parameters https://docs.microsoft.com/en-us/azure/azure-sql/database/performance-guidance?WT.mc_id=AZ-MVP-5003451 Configure resources for optimal performance\nconfigure storage and infrastructure resources https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-storage-configuration?WT.mc_id=AZ-MVP-5003451 configure server and service account settings for performance https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-windows-service-accounts-and-permissions?WT.mc_id=AZ-MVP-5003451 configure Resource Governor for performance https://azure.microsoft.com/en-in/blog/resource-governance-in-azure-sql-database/?WT.mc_id=AZ-MVP-5003451 Configure a user database for optimal performance\nimplement database-scoped configuration https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql?view=sql-server-ver15 configure compute resources for scaling https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-manage-compute-overview?WT.mc_id=AZ-MVP-5003451 configure Intelligent Query Processing (IQP) https://docs.microsoft.com/en-us/sql/relational-databases/performance/intelligent-query-processing?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Optimize Query Performance (5-10%)\nReview query plans\ndetermine the appropriate type of execution plan https://docs.microsoft.com/en-us/sql/relational-databases/performance/live-query-statistics?view=sql-server-ver15?WT.mc_id=AZ-MVP-5003451 identify problem areas in execution plans https://docs.microsoft.com/en-us/sql/relational-databases/performance/analyze-an-actual-execution-plan?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 extract query plans from the Query Store https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-query-store-plan-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Evaluate performance improvements\ndetermine the appropriate Dynamic Management Views (DMVs) to gather query performance information https://docs.microsoft.com/en-us/azure/azure-sql/database/monitoring-with-dmvs#monitoring-query-performance?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 identify performance issues using DMVs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs?WT.mc_id=AZ-MVP-5003451 identify and implement index changes for queries https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-index-design-guide?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 recommend query construct modifications based on resource usage https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 assess the use of hints for query performance https://docs.microsoft.com/en-us/azure/azure-sql/database/performance-guidance#query-tuning-and-hinting?WT.mc_id=AZ-MVP-5003451 Review database table and index design\nidentify data quality issues with duplication of data https://docs.microsoft.com/en-us/sql/data-quality-services/data-matching?view=sql-server-ver15?WT.mc_id=AZ-MVP-5003451 identify normal form of database tables https://docs.microsoft.com/en-us/office/troubleshoot/access/database-normalization-description?WT.mc_id=AZ-MVP-5003451 assess index design for performance https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-index-design-guide?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 validate data types defined for columns https://docs.microsoft.com/en-us/t-sql/data-types/data-types-transact-sql?WT.mc_id=AZ-MVP-5003451 recommend table and index storage including filegroups https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver15#Recommendations\u0026amp;WT.mc_id=AZ-MVP-5003451 evaluate table partitioning strategy https://docs.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning?WT.mc_id=AZ-MVP-5003451 evaluate the use of compression for tables and indexes https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-estimate-data-compression-savings-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Perform Automation of Tasks (10-15%)\nCreate scheduled tasks\nmanage schedules for regular maintenance jobs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-job-automation-overview?WT.mc_id=AZ-MVP-5003451 configure multi-server automation https://docs.microsoft.com/en-us/sql/ssms/agent/automated-administration-across-an-enterprise?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 configure notifications for task success/failure/non-completion https://docs.microsoft.com/en-us/sql/ssms/agent/notify-an-operator-of-job-status?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Evaluate and implement an alert and notification strategy\ncreate event notifications based on metrics https://docs.microsoft.com/en-us/azure/mysql/howto-alert-on-metric?WT.mc_id=AZ-MVP-5003451 create event notifications for Azure resources https://docs.microsoft.com/en-us/sql/t-sql/statements/create-event-notification-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 create alerts for server configuration changes https://docs.microsoft.com/en-us/azure/azure-sql/managed-instance/alerts-create?WT.mc_id=AZ-MVP-5003451 create tasks that respond to event notifications https://docs.microsoft.com/en-us/azure/azure-monitor/learn/tutorial-response?WT.mc_id=AZ-MVP-5003451 Manage and automate tasks in Azure\nperform automated deployment methods for resources https://docs.microsoft.com/en-us/azure/devops/pipelines/targets/azure-sqldb?view=azure-devops\u0026amp;tabs=yaml\u0026amp;WT.mc_id=AZ-MVP-5003451 automate backups https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automated-backups?tabs=single-database\u0026amp;WT.mc_id=AZ-MVP-5003451 automate performance tuning and patching https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-automated-patching?WT.mc_id=AZ-MVP-5003451 implement policies by using automated evaluation modes https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/administer-servers-by-using-policy-based-management?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Plan and Implement a High Availability and Disaster Recovery (HADR) Environment (15-20%)\nRecommend an HADR strategy for a data platform solution\nrecommend HADR strategy based on RPO/RTO requirements https://azure.microsoft.com/en-in/blog/understanding-and-leveraging-azure-sql-database-sla?\u0026amp;WT.mc_id=AZ-MVP-5003451 evaluate HADR for hybrid deployments https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-high-availability-dr#hybrid-it-disaster-recovery-solutions?\u0026amp;WT.mc_id=AZ-MVP-5003451 evaluate Azure-specific HADR solutions https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-high-availability-dr#azure-only-disaster-recovery-solutions?\u0026amp;WT.mc_id=AZ-MVP-5003451 identify resources for HADR solutions https://docs.microsoft.com/en-us/azure/azure-sql/virtual-machines/windows/business-continuity-high-availability-disaster-recovery-hadr-overview?\u0026amp;WT.mc_id=AZ-MVP-5003451 Test an HADR strategy by using platform, OS, and database tools\ntest HA by using failover https://docs.microsoft.com/en-us/azure/sql-database/sql-database-configure-failover-group?tabs=azure-portal\u0026amp;WT.mc_id=AZ-MVP-5003451 test DR by using failover or restore https://docs.microsoft.com/en-us/azure/sql-database/sql-database-disaster-recovery?WT.mc_id=AZ-MVP-5003451 Perform backup and restore a database by using database tools\nperform a database backup with options https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-database-backup-options-page?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform a database restore with options https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform a database restore to a point in time https://azure.microsoft.com/en-in/blog/azure-sql-database-point-in-time-restore?WT.mc_id=AZ-MVP-5003451 configure long-term backup retention https://docs.microsoft.com/bs-cyrl-ba/azure/sql-database/sql-database-long-term-backup-retention-configure?WT.mc_id=AZ-MVP-5003451 Configure HA/DR by using OS, platform, and database tools\nconfigure replication https://docs.microsoft.com/en-us/azure/sql-database/replication-to-sql-database?WT.mc_id=AZ-MVP-5003451 create an Availability Group https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-portal-sql-availability-group-tutorial?WT.mc_id=AZ-MVP-5003451 configure auto-failover groups https://docs.microsoft.com/en-us/azure/azure-sql/database/auto-failover-group-overview?tabs=azure-powershell\u0026amp;WT.mc_id=AZ-MVP-5003451 integrate a database into an Availability Group https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-add-a-database?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 configure quorum options for a Windows Server Failover Cluster https://docs.microsoft.com/en-us/windows-server/failover-clustering/manage-cluster-quorum?WT.mc_id=AZ-MVP-5003451 configure an Availability Group listener https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/create-or-configure-an-availability-group-listener-sql-server?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Perform Administration by Using T-SQL (10-15%)\nExamine system health\nevaluate database health using DMVs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs?WT.mc_id=AZ-MVP-5003451 evaluate server health using DMVs https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/system-dynamic-management-views?view=sql-server-ver15?WT.mc_id=AZ-MVP-5003451 perform database consistency checks by using DBCC https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Monitor database configuration by using T-SQL\nassess proper database autogrowth configuration https://docs.microsoft.com/en-us/troubleshoot/sql/admin/considerations-autogrow-autoshrink?WT.mc_id=AZ-MVP-5003451 report on database free space https://docs.microsoft.com/en-us/sql/relational-databases/databases/display-data-and-log-space-information-for-a-database?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 review database configuration options https://docs.microsoft.com/en-us/sql/relational-databases/databases/change-the-configuration-settings-for-a-database?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 Perform backup and restore a database by using T-SQL\nprepare databases for Always On Availability Groups https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/manually-prepare-a-secondary-database-for-an-availability-group-sql-server?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform transaction log backup https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform restore of user databases https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-database-backup-using-ssms?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 perform database backups with options https://docs.microsoft.com/en-us/sql/t-sql/statements/backup-transact-sql?view=sql-server-ver15#Additional_Considerations?WT.mc_id=AZ-MVP-5003451 Manage authentication by using T-SQL\nmanage certificates https://docs.microsoft.com/en-us/sql/relational-databases/security/sql-server-certificates-and-asymmetric-keys?WT.mc_id=AZ-MVP-5003451 manage security principals https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance-aad-security-tutorial?WT.mc_id=AZ-MVP-5003451 Manage authorization by using T-SQL\nconfigure permissions for users to access database objects https://docs.microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 configure permissions by using custom roles https://docs.microsoft.com/en-us/sql/t-sql/statements/create-role-transact-sql?view=sql-server-ver15\u0026amp;WT.mc_id=AZ-MVP-5003451 ","date":"6 March 2021","externalUrl":null,"permalink":"/2021/03/06/azure-dp-300-exam-study-guide/","section":"Posts","summary":"","title":"Azure DP-300 Exam Study guide","type":"posts"},{"content":"","date":"6 March 2021","externalUrl":null,"permalink":"/categories/sql-server/","section":"Categories","summary":"","title":"SQL Server","type":"categories"},{"content":"","date":"25 February 2021","externalUrl":null,"permalink":"/categories/azuredevops/","section":"Categories","summary":"","title":"AzureDevOps","type":"categories"},{"content":"A customer at work had an issue upgrading from TFS 2017 to TFS 2019 with a view to moving to Azure DevOps today, so I thought I would blog the issue and the fix in case anyone else runs into the same sort of issue. I learned how to resolve such issues like the one we had shown below: -\nTF400917: The current configuration is not valid for this feature was the error message, googling takes you to this link: - https://docs.microsoft.com/en-us/azure/devops/reference/xml/process-configuration-xml-element?view=azure-devops-2020\nFrom here we can download and run a tool called witadmin, you can read more here -\u0026gt; https://docs.microsoft.com/en-us/azure/devops/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work?view=azure-devops-2020\nIf you downlod this tool and export the config like so:-\nwitadmin exportprocessconfig /collection:CollectionURL /p:ProjectName [/f:FileName]\nWe can export the processconfig and check for invalid items, in our case there was duplicate State values within the xml. So I exported the xml and made a change by hand and then imported the file with the removed duplicate item using the following command: -\nwitadmin importprocessconfig /collection:CollectionURL /p:ProjectName [/f:FileName] /v\nFor both of the commands above you have to supply the CollectionURL, ProjectName and a FileName and then by importing the config this fixed the issue. The devil here is in the detail, find the invalid details, in our case it was a duplicate State of Completed, I had to remove one and save, nope not that one, so I added it back in and removed the other and re-imported the config - problem solved.\nNote You can also download an add-on for Visual Studio which can help with the task of migrating from TFS to Azure DevOps which is called the TFS Process Template Editor. The link to download this is https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor\nWith the above tool, you can visualize the config for your TFS setup which can help you see what\u0026rsquo;s going on under the hood a little better - a useful tool!.\nKudos to https://twitter.com/samsmithnz for telling me about this - Sam rocks!\n","date":"25 February 2021","externalUrl":null,"permalink":"/2021/02/25/tfs-tf400917-upgrading-tfs-to-move-to-azure-devops/","section":"Posts","summary":"","title":"TFS TF400917 - Upgrading TFS to move to Azure Devops","type":"posts"},{"content":"In this blog post, I wanted to cover how to go about troubleshooting an App Service in Aure which is a web app with a SQL server backend whereby users have reported issues with the slow performance of the website.\nThe first thinh I tend to look at is the backend store, in this case, Azure SQL Server and we have some really great tooling we can use to troubleshoot perforamce issues with Azure SQL.\nThe first port of call was to open up the Azure Portal and go to the Resource Group with the issues and click on the SQL Server database and head to the Intelligent Performance section on the left-hand menu as highlight below: -\nPerformance Overview This currently has a recommendations area that suggests adding 5 different Indexes which are all set as HIGH impact.\nIndexes can sometimes cause adverse effects so it\u0026rsquo;s recommended to look at the suggestions, copy the script from the recommendations and consider if this Index will indeed help with the performance of queries.\nQuery Performance Insight The second area I look at is query performance insight and from here we can see the average CPU, Data IO, Log IO on the SQL Server database across the last 24 Hours as an average. We also get an insight into what queries are running and taking the longest time to complete.\nI changed the graph above to show the last 7 days and I can see CPU is maxed out at 100% for a long period within the last 7 days as seen below:-\nLong Running Queries This area identifies queries which are taking a long time to complete and always worth checking on this regularly. The following is a screen shot of long running queries within the database for the past week. To find this information select the database instance in the portal and then select Query Performance Insight and select Long running queries, then I chose custom and changed the time period to Past week.\nWe can see above the yellow query is the database query which has the longest duration this past week, you can click on the yellow area and it will show you the details of the query which is a long running query.\nAutomatic Tuning\nAzure SQL Database built-in intelligence automatically tunes your databases to optimize performance. What can automatic tuning do for you?\nAutomated performance tuning of databases Automated verification of performance gains Automated rollback and self-correction Tuning history Tuning action Transact-SQL (T-SQL) scripts for manual deployments Proactive workload performance monitoring Scale out capability on hundreds of thousands of databases Positive impact to DevOps resources and the total cost of ownership I would recommend that FVN turn this on and leave it like the following:-\nThis means that Azure will tune the indexes using built in intelligence and create indexes when it thinks you need them based on usage patterns. A word of caution here as these recommendations aren\u0026rsquo;t always correct so please bare this in mind.\nLog Analytics I always recommend adding the Azure SQL Analytics workspace solution to the subscription and this gives us further insight into the SQL Server in Azure. Once you turn this on you need to wait sometime before it can gather a decent amount of data.\nThe screen shot below shows us the type of information we can get from it, this screen shot was taken not long after being turned on so if you wait some time it will have much more useful details:-\nFrom here we can get more information about deadlocks, timeouts, etc.\nNow lets take a look at the website which is in an App Service in Azure and see what tool we can use to help us troubleshoot issues with the performance.\nI always recommned adding Application Insights into Azure for resources when possible, and here if we click on the App Insights for the web app we can instantly get soe basic info. If you click on the Application Dashboard as seen below we get a high level vue of whats going on in our App Service.\nThe Application dashboard for a typical web app might look something like this: -\nOk, so let\u0026rsquo;s now do some further investigation into our app service issues. This time I chose the App Service itself and then I chose Diagnose and solve problems from the left-hand menu. This feature is underused in my opinion and is very useful indeed, not sure if many people have looked at it but it can be pretty helpful with recommendations and also pointing out some things that you may want to think about remediating.\nOnce in the Diagnose and solve problems area I usually click on Availability and Performance within the Troubleshooting categories section and if you do, you\u0026rsquo;ll see something like this: -\nIn the image above we can see that we have some App Performance issues to go and investigate. Clicking into the App Performance section we get in-depth** details about the Performance and we get Observations that** say things like Slow Request Execution with details of the web page, average latency, total execution time, etc. The detail here is very helpful in tracking down potential issues in the code, or the configuration of your web application. There are a number of options to check within each section of the 6 troubleshooting categories, an example is shown below for the Availbility and Performance section: -\nSummary In summary, there are a number of really awesome tools to aid us with troubleshooting App Service perormance issues, go check them out the next time your web app is running poorly.\n","date":"22 February 2021","externalUrl":null,"permalink":"/2021/02/22/troubleshooting-app-services-in-azure/","section":"Posts","summary":"","title":"Troubleshooting App Services in Azure","type":"posts"},{"content":"I wrote an Azure Durable function which makes a phone call to out of hours support engineers when an alert is raised within their production Azure environment, and I wanted to talk about how I did it and what I used.\nWhen an alert is raised with the customers Azure environment I send an HTTP Post to my Azure durable function endpoint from the reporting tool we use, which is PRTG, you can do the same from Azure just as easily, we use PRTG to monitor Azure resources for things like High CPU and the amount of free disk space remaining, etc.\nDurable functions was chosen so that I can make use of what\u0026rsquo;s called an orchestration durable function - you can read more about durable functions: - https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview?tabs=csharp\nIf you read the above articles you\u0026rsquo;ll get a good grasp of what an orchestrator in durable functions can do, to convey why I used them I have the following workflow requirements:-\nReceive details of the alert. Retrieve the support people\u0026rsquo;s phone numbers. If an alert is raised call the first number 3 times in 5 minutes, if answered by a human, read out the alert message and some extra content and ask the user to acknowledge the issue by pressing 1 on the keypad. If the support engineer doesn\u0026rsquo;t answer after 3 attempts then move onto the next number. If the support engineer answers and presses 1 stop the orchestration. 1 - Receive details of the alert This is really easy to do, here I have a template set up in PRTG which forwards the details of the alert to my durable function like so:-\n2 - Retrieve the support people\u0026rsquo;s phone numbers I am storing the support people\u0026rsquo;s phone numbers in a CSV file which is uploaded to a simple Azure storage account, this allows the customer to edit the support numbers easily.\n3 - Making the call Here I make use of Twilio Rest API and I create a CallResource object and then call the Create method, Twilio has a thing called Twiml which you can create a message of your own out of and it will read this message out to the person who picks up the phone call. All of the details about who you call, what the call says, and the action they need to take are stored in config so it can be very easily changed for different customers.\nThe code to make a call is actually really simple.\nvar call = CallResource.Create(twiml: new Twilio.Types.Twiml($\u0026quot;{messageToReadToUser}\u0026quot;), to: to, from: from);\n4 / 5 - Answering the call This was the tricky part, figuring out if they had picked up the call was my initial challenge and I tried numerous things from the Twilio docs which were misleading, didn\u0026rsquo;t seem to work as I expected. The samples for this part of the documentation are sadly lacking. Now when the call comes in the support engineer is asked to press 1 to acknowledge they have received the call and the orchestration can end, part of this involves having a callback URL so that Twilio can send you details back to a URL of your choice so that you can get the details of the call, things like call length, etc and if they pressed 1 during the call.\nOrchestration The orchestration part was pretty tricky for me to get right, huge thanks to @marcduiker he was an enormous help to me on this, figuring out how to do some of the steps proved tricky but very interesting!\nMarc is putting together an Azure Functions University series where you can go and learn all about Azure Functions - please go check that out.\nThe orchestration logic was something like the following:-\n**MainOrchestrator **- this function\u0026rsquo;s job is to be the orchestrator, within this function we call sub orchestrators, and also activity functions, think of an activity function as a separate function that does something, I had a GetNumbersFromStorage activity function and a SendNotification activity function. so the idea behind durable functions is to be able to call multiple azure functions using patterns, one of which is the orchestrator pattern.\nRetryOrchestrator - this function\u0026rsquo;s job is to work out what to do when the call wasn\u0026rsquo;t answered the first time, do we need to make another call, how many times have we called this number, and have we ensured that the calls are spread out of 5 minutes so we don\u0026rsquo;t make multiple calls at the same time.\nTwilio To make this all work I created a Twilio account and purchased a number, this means you can use this number to make the calls. It costs 2 pence per call and 7 pence per call if you want to detect if someone answered the call using answering machine detection, so there are options available.\nSummary Durable functions have a lot of great use cases, definetly check them out and build something yourself to get a handle on how they work. The Azure durable function docs are really good.\n","date":"15 February 2021","externalUrl":null,"permalink":"/2021/02/15/azure-durable-functions-support-caller/","section":"Posts","summary":"","title":"Azure Durable Functions - Support Caller","type":"posts"},{"content":"","date":"15 February 2021","externalUrl":null,"permalink":"/tags/azure-functions/","section":"Tags","summary":"","title":"Azure Functions","type":"tags"},{"content":"","date":"20 January 2021","externalUrl":null,"permalink":"/categories/aks/","section":"Categories","summary":"","title":"AKS","type":"categories"},{"content":"Richard Hooper and I have started a new series called AKS Zero to Hero, the aim here is for Richard to teach me AKS from zero to knowledge to hopefully becoming a hero when it comes to AKS.\nWe see a lot of customers either already using AKS or wanting help getting started with AKS so it\u0026rsquo;s about time I got up to speed. If you are new to AKS or a seasoned professional we will be covering as much AKS content as we possibly can, the aim is to try to have content out each week.\nWe will be taking an asp.net core project which will be open-sourced on GitHub at https://github.com/CloudFamily/AKS_Zero_to_Hero and we will deploy this to AKS and cover as many areas of AKS as we can possibly cover. The series will run for a while so please hit subscribe and click on the bell notification to be alerted when a new video drops.\nThe YouTube playlist for all of our videos thus far can be found below.\nhttps://www.youtube.com/playlist?list=PLDShAwQSfax4CKD9Y-q55FF119Ymnh_xk\nPlease give us feedback, ask questions etc and we can try and answer them in an ask me anything session which we will be planning within the next month.\nDon’t forget to subscribe to my own YouTube Channel.\n","date":"20 January 2021","externalUrl":null,"permalink":"/2021/01/20/aks-zero-to-hero-series-for-everyone/","section":"Posts","summary":"","title":"AKS Zero To Hero - Series for everyone","type":"posts"},{"content":"In this blog post, I wanted to quickly cover how you can keep the Azure CLI up to date on your local system and within Azure. I use the Azure CLI as my go-to choice for writing deployment scripts in Azure. The reason you want to keep this up to date is for new additions as we all bug fixes for previous versions.\nThe Azure command-line interface (Azure CLI) is a set of commands used to create and manage Azure resources. The Azure CLI is available across Azure services and is designed to get you working quickly with Azure, with an emphasis on automation.\nIts super simple to keep this up to date and you can do this by opening a PowerShell or Bash script window and typing:-\naz upgrade\nBut instead of doing this maybe you want to keep it up to date without having to keep checking, you can also do this by using the following command:-\naz config set auto-upgrade.enable=yes\nBut even better yet you can keep the Azure CLI up to date without ever being prompted by using the following command:-\naz config set auto-upgrade.prompt=no\nAnd that\u0026rsquo;s it, no you no longer need to worry about am I using the latest version of the Azure CLI.\nYou can read more on this at the following URL: - https://docs.microsoft.com/en-us/cli/azure/update-azure-cli?WT.mc_id=AZ-MVP-5003451\nDon’t forget to subscribe to my YouTube Channel.\n","date":"1 January 2021","externalUrl":null,"permalink":"/2021/01/01/using-the-latest-version-of-the-azure-cli/","section":"Posts","summary":"","title":"Using the latest version of the Azure CLI","type":"posts"},{"content":"Over the summer this past year, I and Richard Hooper were interviewing people around the world on Azure related content and it has been an absolute blast, it has been so much fun chatting to some very talented individuals who have a passion for their profession.\nWe talked about all things Azure and threw in some fun questions along the way. If you haven\u0026rsquo;t checked out the content its around 30 minutes per video and we have slides and demo\u0026rsquo;s galore.\nCheckout the speakers and content -\u0026gt; SkyLines Summer Sessions\nHuge thank you to the amazing people who work at Skylines Academy, Amy, Brette, and Nick - thanks for setting this up and organizing it.\nThomas Maurer talks to us about Azure Arc with a very cool demo. # Richard Hooper ** talks to us about AKS with a very cool little demo.** # Dwayne-Natwick talks to us about Virtual Machine Scale sets and Virtual Machine Availability Sets # Peter De Tender ** talks to us about Terraform on Azure.** # Maarten Goet** talks to us about Azure Sentinel.** # Wesley Haakman talks to us about Cloud Solution Providers (CSPs) and Managed Service Providers (MSPs) # Shannon Kuehn talks to us about Azure VMware Solution (AVS). # Joe Carlyle talks to us about Azure FireWall. # April Edwards talks to us about A/B Testing in Azure. # Adam Bertram talks to us about PowerShell # Sarah Lean talks to us about Datacenter Migration \u0026amp; Azure Migrate # Sam Smith talks to us about common mistakes with DevOps. # Gwyneth Peña talks to us about her journey to becoming an Azure MVP and a Cloud Engineer. # Wim Matthyssen\nWim talks to us about Azure spend and how to take control.\nPete Gallagher\nPete talks to us about Azure IoT.\nMichael Levan # Michael talks to us about using Octopus Deploy with Azure.\n","date":"30 December 2020","externalUrl":null,"permalink":"/2020/12/30/skylines-summer-sessions/","section":"Posts","summary":"","title":"Skylines Summer Sessions","type":"posts"},{"content":"Wow what a year its been.\nStarted a new job as An Azure Architect @ Intercept Gave workshops at work on GitHub Actions, Azure PaaS, and Azure Governance. Renewed as an MVP Helped 9 people become an MVP. 53 User Group talks / took part in. Helped Organise this year\u0026rsquo;s Festive Tech Calendar, Global Azure Bootcamp UK / Ireland, Skylines Summer Sessions. Spoke at Scottish Summit. Passed the following exams: -AI-900 Azure AI Fundamentals. DP-900 Azure Data Fundamentals DP-200 Implementing an Azure Data Solution. DP-201 Designing an Azure Data Solution. AZ-104 Azure Administrator Associate. Became a Microsoft Certified Trainer.Started my own YouTube channel.Started the CloudFamily Podcast with Richard Hooper - https://anchor.fm/cloudfamilyBlogging - made a conscious effort to slow down blogging to spend time on other things, still managed over 10,000 views each month.\nWhats next I hear you ask.\nSpeaking at Scottish Summit 2021 Azure AI-100 Designing and Implementing an Azure AI Solution DP-300 Administering Relational Databases on Microsoft Azure PL-900: Microsoft Power Platform Fundamentals I don\u0026rsquo;t have much more planned than that.\nThank you I have way too many people to thank in 2020, honestly, I am very fortunate to know some amazing people from the communities, everyone I work with day to day, shout out to everyone who I speak with on Twitter, everyone involved in running User Groups, event organizers, etc. I am grateful to each and every person who I speak to, I do my best to get back to everyone and help where I can. I have noticed that none of you sleep, most of you are up at silly hours of the night.\nHighlights this year This one is easy, helping people who are passionate about helping others is something I will take time out of my day to help people with.\nSummary Next year, more of the same, helping people get started, sharing people\u0026rsquo;s content as it\u0026rsquo;s tough to create content and people spend a lot of time on this. I\u0026rsquo;d like to see events that focus on newcomers to our communities and highlight their work.\nIts been a horrid year for everyone, keep safe and keep your chin up and a smile on your face as much as you can.\nGregor\n","date":"20 December 2020","externalUrl":null,"permalink":"/2020/12/20/review-of-the-year/","section":"Posts","summary":"","title":"Review of the year","type":"posts"},{"content":"I wanted to see how easy it would be to create a Logic App to call an API and return data from it and then translate the contents into a CSV file, any excuse to learn something new and play with Logic Apps, which is not something I have done a lot of, to be honest.\nSo my goal was to pick an api, call it using a GET request, grab the json from the Api and then convert this to a csv file and then create a file on blob storage. In this blog post I will show you how I went about it.\nI want my Logic App to do this each month and grab the data from the api and create a new blob so lets take a look at the end result and go through it step by step.\nSo we have 5 steps to accomplish this task.\n**Recurrence **- this is just going to run the logic app on a schedule, so I am running this once each month. **HTTP **- here is where I give it the API URL which in my case is https://geocatalogus.nl/api/3/action/datastore_search?resource_id=ecbe6732-5a6b-4858-84db-b03c410ff7aa and I set the Request type to GET. **Parse JSON **- Here I grab the JSON response from the HTTP step above and then parse it by supplying an example of the body from the JSON returned in the HTTP step. This looks like so:-\nThe Body (green part in the screen shot) is taken from the Dynamic Content where I just typed Body and then clicked on it. Create CSV Table - now I want to interrogate the Parsed JSON from above and find the part of the JSON I am interested in and for this API I want the part called record which is the data I am interested in.\nAgain I clicked on the From part above and chose Dynamic content which lists the parts of the JSON returned and from there I chose records, I left the Columns as Automatic and thats all I needed to do here. Create Blob - Now I want to create a new blob in Azure Storage soI chose that for my last step and gave it the connection details to my Azure Storage Blob container like so:-\nI run the Logic App and it calls the API within the HTTP step, parses the returned JSON from the API, I then use the Create CSV Table step to format the data and then save the output from that step by using a Create Blob step.\nAnd that is all there is to it, I did this just to learn something new and remind myself how cool Logic Apps are and how easy they are to use.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"3 December 2020","externalUrl":null,"permalink":"/2020/12/03/azure-logic-app-api-call-save-a-file-to-blob-storage/","section":"Posts","summary":"","title":"Azure Logic App Api call save a file to Blob Storage","type":"posts"},{"content":"","date":"31 October 2020","externalUrl":null,"permalink":"/categories/docker/","section":"Categories","summary":"","title":"Docker","type":"categories"},{"content":"At work, I was trying to take a C++ ISAPI DLL project and see if I can get it running in a windows container. In this blog post, I will cover my findings when working with Windows Containers - for anyone who doesn\u0026rsquo;t know there is no GUI so my blog post will cover how to do some steps using PowerShell. The end goal here is to containerize a Windows IIS legacy web app and move it to AKS without re-writing it.\nI had never used Docker on a real project until now so had barely used it (please bear this in mind), please note there may and probably is a better way to do some of the following, I have written this to give you a starter for 10 if you need to work with a windows container and might need to do some legacy work.\nThe following are some tips on how to do stuff using windows containers and what I have been learning the last 2 weeks.\nYou have the option to use all manner of Windows Containers, for the work I was doing I was using the following: -\nFROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016\nSHELL [\u0026ldquo;powershell\u0026rdquo;] COPY SetupGregor.ps1 . RUN powershell -File .\\SetupGregor.ps1 COPY Setup C:/Setup\nRUN reg import .\\odbcinistuff.reg RUN Start-Process -FilePath msodbcsql.msi -ArgumentList \u0026ldquo;IACCEPTMSSQLCMDLNUTILSLICENSETERMS=YES\u0026rdquo;\nRUN Set-ItemProperty -path \u0026lsquo;HKLM:\\SYSTEM\\CurrentControlSet\\Services\\InetInfo\\Parameters\u0026rsquo; -Name PoolThreadLimit -Value 512 -Type DWord\n# Install windows features RUN Install-WindowsFeature NET-Framework-45-ASPNET ; Install-WindowsFeature Web-Asp-Net45 ; Install-WindowsFeature Web-Static-Content ; Install-WindowsFeature Web-Http-Errors ; Install-WindowsFeature Web-Default-Doc ; Install-WindowsFeature Web-ISAPI-Filter ; Install-WindowsFeature Web-Stat-Compression ; Install-WindowsFeature Web-ISAPI-Ext ; Install-WindowsFeature Web-ISAPI-Filter # IIS stuff RUN Install-WindowsFeature Web-Mgmt-Service; New-ItemProperty -Path HKLM:\\software\\microsoft\\WebManagement\\Server -Name EnableRemoteManagement -Value 1 -Force; Set-Service -Name wmsvc -StartupType automatic; # Add user for Remote IIS Manager Login RUN net user iisadmin /ADD; net localgroup administrators iisadmin /add;\nCOPY Setup/LogMonitor.exe c:/LogMonitor COPY Setup/LogMonitorConfig.json c:/LogMonitor\nCMD Write-Host IIS Started\u0026hellip; ; while ($true) { Start-Sleep -Seconds 3600 }\nThe above are just samples of whats possible, lets cover them one by one below.\nFROM mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2016 - here I am saying use the windowsservercore-ltsc2016 windows image. SHELL [\u0026ldquo;powershell\u0026rdquo;] - here since I am using a windows container I want to use the PowerShell shell. COPY SetupGregor.ps1 . - here I just copy a single file into my container. RUN powershell -File .\\SetupGregor.ps1 - here I am running a powershell file. COPY Setup C:/Setup -*** here I am copying a full folder into the container***. RUN reg import .\\odbcinistuff.reg -*** here I exported a registry file from a test server so that I can import this into my container and use it to setup ODBC System DSN\u0026rsquo;s that I needed.*** RUN Start-Process -FilePath msodbcsql.msi -ArgumentList \u0026ldquo;IACCEPTMSSQLCMDLNUTILSLICENSETERMS=YES\u0026rdquo; - here I am running an msi silently in my container to install ODBC sql drivers RUN Set-ItemProperty -path \u0026lsquo;HKLM:\\SYSTEM\\CurrentControlSet\\Services\\InetInfo\\Parameters\u0026rsquo; -Name PoolThreadLimit -Value 512 -Type DWord - here is a sample on how to set a new registry key inside my windows container. RUN Install-WindowsFeature NET-Framework-45-ASPNET; - yep you guessed it I\u0026rsquo;m installing windows features in my windows container. RUN Install-WindowsFeature Web-Mgmt-Service; New-ItemProperty -Path HKLM:\\software\\microsoft\\WebManagement\\Server -Name EnableRemoteManagement -Value 1 -Force; \\ - here I am setting up the ability to connect remotely into IIS running on my container - this helps enormously when you can see the IIS settings etc from outside your windows container. Set-Service -Name wmsvc -StartupType automatic; - here I make sure the service starts automatically. RUN net user iisadmin /ADD; \\net localgroup administrators iisadmin /add; - here I create a user I can use to connect into IIS on the container - I also run the app pool using this account. COPY Setup/LogMonitor.exe c:/LogMonitor COPY Setup/LogMonitorConfig.json c:/LogMonitor - here I am copying LogMonitor (https://github.com/microsoft/windows-container-tools/tree/master/LogMonitor) This is an opensource .exe which you can use to monitor logs like IIS and the event viewer etc, its a C++ project which I have built, in case you don\u0026rsquo;t have the tooling handy - you can find that here - https://github.com/gsuttie/LogMonitor CMD Write-Host IIS Started\u0026hellip; ; while ($true) { Start-Sleep -Seconds 3600 } - here I keep the windows container running as long as IIS is running, if you stop IIS the container will shut down (restart the app-pool instead if you need to make changes, saves you having to restart the container.) Buld your container using a Dockerfile like the one above:-\ndocker image build \u0026ndash;tag win2016GregorsDemo .\nStart your Docker image\nDocker run \u0026ndash;name remoteiisGregor -d -p 8000:80 win2016GregorsDemo\nIt will start up instantly then you can get the ipaddres like so\ndocker inspect \u0026ndash;format \u0026lsquo;{{ .NetworkSettings.Networks.nat.IPAddress }}\u0026rsquo; remoteiisGregor\nNow you can connect to IIS on the container from your local desktop\nAdd in the IP Address and then when asked for a username and password, the username is in the Dockerfile.\nUsername: IISadmin Password: ********* (whatever you add in the dockerfile)\nAnd viola - you should now be able to connect to IIS running inside a windows container.\nNow to check settings within the container you can connect to the container doing the following:-\nDocker ps -a\nThis will give you the containerId like the following:-\nNow you can grab the first 3 letters of the container id and type this\nDocker exec -it 32d powershell\nAnd now you can connect to the container with a powershell shell windows and check folders, run commands etc.\nSummary You may ask why? - Whay am I doing this, well when a customer asks if they can go to AKS with an existing solution and it needs to run on windows containers, I thought yeah let;s get it working.\nThis is brief blog post which doesnt go into huge detail, if you have questions please just ask, I dont have much time under my belt with Docker but I learned a lot and figure out a number of things.\n","date":"31 October 2020","externalUrl":null,"permalink":"/2020/10/31/windows-docker-containers/","section":"Posts","summary":"","title":"Windows Docker containers","type":"posts"},{"content":"","date":"21 September 2020","externalUrl":null,"permalink":"/categories/cloud-computing/","section":"Categories","summary":"","title":"Cloud Computing","type":"categories"},{"content":"As part of Serverless September there is a very cool event happening on September 30th (starting at 08:00 am Pacific Daylight time) to which I would like to draw your attention.\nAs you can read above it a one of a kind live event, and who doesnt like a live event right?.\nSome of the brightest minds come together to present to you on a number of sessions throughout the day.\nIf you haven\u0026rsquo;t looked at anything serverless before, or haven\u0026rsquo;t kept up to date with what\u0026rsquo;s new then this is your chance for one day to ramp up your learning by learning from the best.\nThere are sessions on all sorts serverless related including: -\n**OSS Developer hacks Serverless Best Practices Low-code Serverless Applications Serverless Security **\nCheck out the list of speakers which include:-\nSimon Cotin Allison Kunz Linda Nichols Dona Sarkar Jennifer Davis Marie Hoeger Gwyneth Peña S Lian Li Floor Drees Nitya Narasimhan\nCheck out the website for much more detail at: -https://createserverless2020.splashthat.com/\nGo Sign up now and let you\u0026rsquo;e friends and colleagues know about it too.\nThanks Gregor!.\n","date":"21 September 2020","externalUrl":null,"permalink":"/2020/09/21/create-serverless-event-sept-30th/","section":"Posts","summary":"","title":"Create Serverless event Sept 30th","type":"posts"},{"content":"","date":"21 September 2020","externalUrl":null,"permalink":"/categories/serverless/","section":"Categories","summary":"","title":"Serverless","type":"categories"},{"content":"","date":"21 September 2020","externalUrl":null,"permalink":"/categories/training/","section":"Categories","summary":"","title":"Training","type":"categories"},{"content":"If you have storage blobs containing things like backups or files then Azure now has Immutable storage available for Azure Storage Blobs generally available in all public regions.\nImmutable means that it is unable to change or be changed and this means that if a customer has let\u0026rsquo;s say a backup then they can store this unchanged which for some companies is very nice to have.\nTo take advantage or to test out immutable storage lets go through what we need to do to test it out.\nFirst of all, create a storage account. Click on **Containers **and create a new container, give it a name and choose Private (no anonymous access). Once created click on the name of your new container and then upload some files. Once you have uploaded some files click on Access Policy on the left-hand side, notice we have 2 sections, Stored access policies and Immutable blob storage, under Immutable blob storage, select Add policy. We now have 2 options to choose fromTime-based retention Legal hold Time-based retention allows us to add a number of days value between 1 day and 400 years, this also makes the files immutable.\nNote:- You cannot change this value to 0 at any time. Once the interval you add expires - Upon the expiration of the retention interval, the data will continue to be in a non-modifiable state but can be deleted. Retention policy changes may require some time to take effect. 5 edits are permitted to the policy.\nLegal hold retention means you add a tag to the blob container - each legal hold policy needs to be associated with 1 or more tags. Tags are used as a name identifier, such as a case ID, to categorize and view records.\nYou **cannot **delete or modify any files with the container whilst there is either a Time-based retention policy or a Legal hold policy, however if you delete the legal hold policy you can then delete or modify files with the container. With Time-based retention, you can allow additionally protected appends and change the retention interval. Time-based retentions need to be locked in order to be active and to add a lock click on the 3 dots and choose Lock policy.\nNote:- Once you apply the lock you cannot delete the lock and just before you click save on applying the lock you will see the following reminder:-\nSummary I can see some people having the need to keep backups and have them immutable for a number of legal reasons and this new feature will be very handy for them.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"7 September 2020","externalUrl":null,"permalink":"/2020/09/07/immutable-storage-for-azure-storage-blobs/","section":"Posts","summary":"","title":"Immutable storage for Azure Storage Blobs","type":"posts"},{"content":"Hi folks, this blog post comes to you as part of the Azure Back to School community event ran by Dwayne Natwick.\nMany thanks to **Dwayne **for allowing me to take part.\nYou can read more about the event on the official website\nI am talking to you today about Azure Certification Prep, let\u0026rsquo;s not waste any more time and dive right in.\nWhether your starting your Azure certification journey or along ways down the road the first thing you need to do is some homework on the exams:-\nWhich exam is the right one for you at this time? Have you read the official exam page from Microsoft? Have you read up on any changes about the exam that may have taken place? I **always **suggest people start with the AZ-900 Azure fundamentals exam and this is for everyone, including experienced Azure users. This exam will set you up for the following if you are new to the exams or haven\u0026rsquo;t done any exams in a while:-\nLearn to study (learn to take notes and try to remember the content you\u0026rsquo;ve read) Get you into the habit of reading, trying to recall information, sitting practice tests. There is also the no small feat of booking the actual exam and sitting it, lots of people put this off and dread exams. Skills Measured This area is key to your success in the actual exam, the content in this section is in essence what Microsoft will be testing you on, ensure you are comfortable with all of this content before taking the exam. Exams are usually broken down into 4 maybe areas and you\u0026rsquo;ll see a percentage scoring next to each section. An example of this would be the AZ-900 exam which has the following:-\nDescribe Cloud Concepts (15-20%)\nThis means that 15-20% of your exam will be on this subject area, some exams have areas as much as 35-45% so this is the area you want to be very sharp on as lots of questions will be around this area.\nAdvice Whilst studying you tend to get a feel for how it is going, I would advise you try some practice tests and try to gauge from them if your ready or not. Book your exam as this will then help concentrate your mind and ensure you study, nothing like an exam deadline coming up to make you want to read the content, learn and pass your exam.\nSo a this point we have checked out the official exam guide, we know what topics we are going to be tested on, lets assume we are sitting the exams at home, we have to know what to expect when sitting an exam from home.\nSitting an exam in your house\nThere are some rules which you need to adhere to when taking an exam from your office / home and some of these are as follows: -\nThere is no bit of paper allowed for taking notes so if you need to take notes then there is a way to do this on-screen within the test, get familiar as you may need this. No one is allowed to enter the room at any time during your exam, and you cant leave either. You\u0026rsquo;re not allowed to read the exam questions out loud, cover your face or leave the webcam perimeter box for any reason, if you do you\u0026rsquo;re very likely to fail. You have to take photos of your identification and the desk your siting at, behind where you are sitting, to the left, and to the right of where you are sitting. The rules are there for people to read so be sure you know what you can and cannot do otherwise you run the risk of an instant failure which would not be fun. Advice Ensure your pc / laptop is charged, arrive 30 minutes early and go through your identification steps as soon as you can as it can be a little unsettling at times and you don\u0026rsquo;t want to be flustered before the exam begins.\nLearning Resources I always go in search of good learning resources for an exam and I always start off with Microsoft Learn. Here you will find learning paths for your exam and you can go through them at your own pace, make sure not to miss these as they really are excellent.\nMy favorite Learning Resources\nMicrosoft Learn for Certifications - Microsoft Learn for Certifications Build5nines Free Azure Certification Exam Self Assessment Tool - https://build5nines.com/free-oss-exam-self-assessment-tool/ Microsoft Partner Training - https://partner.microsoft.com/en-US/training/assets#/?type=Exam AzureCharts - just go check it out (all of it) - https://azurecharts.com/ Cloudfamily Azure Study Guides - https://cloudfamily.info/study_guides/ Github Azure Resources - https://github.com/gsuttie/AzureResources Practice Tests Whilst studying I always think its a good idea to do some knowledge checks, you may read some content week 1 and forget it week 2, practice tests help reinforce my learning and help me recall things I need to know for each exam. I have used practice tests from several different places and here are some of the people who have good training as well as good practice tests:-\nSkylines Academy - https://www.skylinesacademy.com/ Pluraslight - https://www.pluralsight.com/ Udemy - https://www.udemy.com/ A Cloud Guru / Linux Academy - https://acloudguru.com/ WhizLabs - https://www.whizlabs.com/ Clouskills - https://cloudskills.io/ Advice\nDon\u0026rsquo;t start studying and then put it off would be my advice, you\u0026rsquo;re likely to forget some of what you learned. Book the exam 2 weeks out and then this will focus your mind. Read the questions carefully even in the practice tests. No exam question has answers which are wildly wrong, Microsoft don\u0026rsquo;t do this anymore so you wont be able to rule lets say 2 from 4 answers right away for being wildly wrong with regards to the question. Take the exam once your fairly confident you know what the answers to most of the questions, you wont get them all right but try to wait till your at least some what confident in your knowledge. ALWAYS check the official exam page in case the skills measure area has been updated - exams are updated regularly and you don\u0026rsquo;t want caught out. Wrap Up No one likes sitting exams, but just think of the amount of things you have learned, and don\u0026rsquo;t be afraid to fail an exam, I have failed 3 and it just made me more determined to pass the next time and learn what I didn\u0026rsquo;t know the first time around.\nIf you need advice about anything exam related, please do reach out on twitter.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"3 September 2020","externalUrl":null,"permalink":"/2020/09/03/azure-certification-prep/","section":"Posts","summary":"","title":"Azure Certification Prep","type":"posts"},{"content":"In this blog post series I am going to cover my journey to learning about GitHub Actions.\nTo get started with learning about GitHub Actions lets start by describing what they are.\nSo what exactly are GitHub Actions?\n“GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.”\nGitHub Actions help you automate your software development workflows in the same place you store code and collaborate on pull requests and issues. You can write individual tasks, called actions, and combine them to create a custom workflow.\nYou can write your own actions to use in your workflow or share the actions you build with the GitHub community\nWorkflows are custom automated processes that you can set up in your repository to build, test, package, release, or deploy any code project on GitHub.\nTo get started with learning about GitHub Actions lets start off by listing some of the best resources I have come across for getting started.\nGitHub Actions Documentation - https://help.github.com/en/actions GitHub Actions: Hello World - https://lab.github.com/githubtraining/github-actions:-hello-world Building custom GitHub Actions - https://app.pluralsight.com/library/courses/building-custom-github-actions/table-of-contents DevOps with GitHub Actions - https://lab.github.com/githubtraining/paths/devops-with-github-actions GitHub Actions by Sam Smith - https://samlearnsazure.blog/2019/12/13/github-actions/ Don’t forget to checkout my YouTube Channel.\n","date":"30 August 2020","externalUrl":null,"permalink":"/2020/08/30/github-actions-101/","section":"Posts","summary":"","title":"GitHub Actions 101","type":"posts"},{"content":"","date":"30 August 2020","externalUrl":null,"permalink":"/categories/githubactions/","section":"Categories","summary":"","title":"GitHubActions","type":"categories"},{"content":"I\u0026rsquo;m very excited to share with you the news that I have accepted a position as an Azure Architect at a company in the Netherlands called Intercept.\nIntercept has very recently been awarded Microsoft Partner of the Year 2020 in the Netherlands beating off strong competition from 18 other companies.\nIntercept are Microsoft Azure Management Elite Partners and Gold Partners in 7 areas at present which is pretty impressive.\nI start my new role on September 1st, I will be working in and around Azure daily and that is what I want to be doing, so to say I am excited is an understatement.\nDuring Covid-19 I was furloughed due to a customer not being able to support remote workers and during this time a great number of people from Twitter and LinkedIn reached out to me asking if I would be interested in working with them. I thank each and every one of you as being furloughed was not much fun but to be asked if I would like to work with you and your companies, that was neat, to say the least.\nI interviewed at a number of companies and had numerous fantastic offers given to me but ultimately my new role ticked more boxes than the rest and I couldn\u0026rsquo;t say no.\nThe job role as well as the **people **I had spoken to at Intercept were the deciding factors for me.\nAgain thank you to everyone who reached out to me, you have no idea how much I appreciated it, beers are on me if we manage to meet in person, going forward.\nSo I look forward to rolling my sleeves up again and changing career direction ever so slightly. I am a renewed Azure MVP and that\u0026rsquo;s where I want to be working and learning day to day. I cannot wait to get started and helping people even more in the future.\nNovember 2017 I set myself a goal of becoming an Azure Architect and gaining as much knowledge as I could with Azure - the exams have helped and I look forward to using Azure daily.\nI remind myself that I am less than 3 years into my journey, I have a blog, YouTube channel, 11 Azure certification badges as below and I all whilst being a development manager of 10+ people and not using Azure daily.\nAll it takes is hard work, goals, determination and you can do anything.\nDon’t forget to subscribe to my YouTube Channel and you can find me on twitter @gregor_suttie.\n","date":"28 August 2020","externalUrl":null,"permalink":"/2020/08/28/a-new-adventure/","section":"Posts","summary":"","title":"A New Adventure","type":"posts"},{"content":"","date":"6 August 2020","externalUrl":null,"permalink":"/tags/dp-900/","section":"Tags","summary":"","title":"DP-900","type":"tags"},{"content":"Happy to share that I sat the Beta for this exam and passed - here is a link to my study guide https://gregorsuttie.com/2020/06/09/dp-900-microsoft-azure-data-fundamentals-exam-study-guide/\nAnother exam done, and the data side of Azure is something I would love to explore further if I ever get the chance.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"6 August 2020","externalUrl":null,"permalink":"/2020/08/06/dp-900-azure-data-fundamentals/","section":"Posts","summary":"","title":"DP-900 Azure Data Fundamentals","type":"posts"},{"content":"I have been lucky enough to work with one manager who was very good at being disciplined and I wanted to share with you some of my learnings and talk about some stuff I have seen of late which really isn\u0026rsquo;t helpful and how easy they are to remediate.\nSo what is IT industry discipline, well it\u0026rsquo;s not something you read much about or will find in books, for example, it\u0026rsquo;s just something you pick up as you progress in your career and is much easier to pick examples of what not to do and then have a way to make things better.\nMaking things better should always be at the back of your mind in the IT industry, how can we make things better. I have a developer background so most of what I will talk about will cover some basic stuff yet I still see it on almost every project that I come across.\nIf you think about the above paragraph of making things better here is a good rule of thumb, imagine the next person who comes along has even less knowledge about whatever the thing is your doing, how can you help make their lives a little bit easier?\nHere is a list of some examples\nDon\u0026rsquo;t leave server folders lying around like New Folder, New Folder(1) - instead, have a proper naming convention and stick to it (think of the next person coming along). Don\u0026rsquo;t leave crap lying around with xxx appended to the start or have **DELETEME **items lying around anywhere - instead source code everything and delete the rest (think of the next person coming along). Don\u0026rsquo;t leave old deployments lying around instead archive them off, or have a process to delete the last x number of deployments (think of the next person coming along). Don\u0026rsquo;t have one person having vital knowledge about a system in their head, document it, and share with as many people deemed reasonable - instead document everything, yes everything, there I said it, we all have things we should have documented yet we don\u0026rsquo;t (think of the next person coming along). Don\u0026rsquo;t let people leave your company without doing a proper handover - companies have on-boarding processes, where is your off-boarding process? (think of the next person coming along). Don\u0026rsquo;t move to the Cloud and suddenly we don\u0026rsquo;t have any diagrams - instead diagram your architecture and keep it up to date, have a process in place to check this diagram is still valid (think of the next person coming along). The above is much more than technical debt, everyone has technical debt but this is about thinking about the next person.\nWe can improve, we should improve processes today not tomorrow or next week. Small improvements over time make a big difference.\nI am going to be adding to this blog post over time as more things come to me but for now, think of the next person each time you do something on a project or when its related to work - go that little bit extra and before you know it you\u0026rsquo;ll enjoy working on the project when the processes in place are right.\nDon’t forget to subscribe to my YouTube Channel.\n","date":"27 July 2020","externalUrl":null,"permalink":"/2020/07/27/think-of-the-next-person/","section":"Posts","summary":"","title":"Think of the next person","type":"posts"},{"content":"I had a task at work where I was asked if I could ensure that all new Azure Virtual Machines created had the default of being set up for English (United Kingdom) rather than English (United States), not an unreasonable request by any stretch, so last week I had a look into doing just that.\nThe customer project I am working on uses Virtual Machines for people to do their work and the new Virtual Machines are deployed using Octopus Deploy with some ARM templates and PowerShell - all good so far.\nMy initial thought was I wonder why you can\u0026rsquo;t have this as an option to choose when installing a new Virtual Machine from the portal, turns out its unlikely because in fact there are a number of settings you need to change in order for the new Virtual Machine to truly be set up for English (United Kingdom) rather than English (United States).\nI started off by looking at running some PowerShell into a custom extension and running that when the Virtual Machine starts, after a lot of fiddling around and trying things it does work.\nThe PowerShell I was using looked something like this:-\nSet-WinSystemLocale en-GB Set-WinUserLanguageList -LanguageList en-GB -Force Set-Culture -CultureInfo en-GB Set-WinHomeLocation -GeoId 242 Set-TimeZone \u0026ldquo;GMT Standard Time\u0026rdquo;\nrestart virtual machine to apply regional settings to current user. You could also do a logoff and login. # Start-sleep -Seconds 40 Restart-Computer\nNote that the above PowerShell works, the only caveat to this is that once the Virtual Machine is available to connect to you can check the system local from\nControl Panel \u0026gt; Clock and Region \u0026gt; Region \u0026gt; Administrative Tab \u0026gt;\nAbove, we can see that the Virtual Machine still defaults to English (United States) but with a reboot that will change to English (United Kingdom).\nWe want this to be the case for all users who might log onto the Virtual Machine, we could use PowerShell DSC (desired state config) to do this or a number of other ways.\nWhen I reached out to twitter for some help and guidance on this I had a number of replies but this one was the solution I went for https://twitter.com/stuartpreston/status/1284096930981847045\nStuart was very kind to even create a GitHub repo to tackle this issue and you can find his solution to the problem there, he adds a custom script variable, passes in the commands to run and a timezone variable and \u0026ldquo;it\u0026rsquo;s basically using a combination of stuffing your script into customdata and having additionalUnattendContent run that script in a first logon.\u0026rdquo;\nTo wrap this up it works: -\nusing PowerShell\nusing a custom extension with a PowerShell script\nor by adding content to an Arm Template that runs a script upon user logon\nDon\u0026rsquo;t forget to checkout my YouTube Channel.\n","date":"24 July 2020","externalUrl":null,"permalink":"/2020/07/24/changing-azure-vms-default-locale/","section":"Posts","summary":"","title":"Changing Azure VM's Default Locale","type":"posts"},{"content":"A while back I took part in a really cool **hackathon **at the Microsoft offices in Edinburgh and part of it was displaying data on an Azure Map. Now we found the docs a little less than straightforward so I put together a quick blog post and a GitHub repo\nLog into Azure and create an Azure Maps Account, once you have done this gran the authentication key from the Authentication area and then grab the primary key, and then I pasted this into the html file.\nI used this in the Azure Advent Calendar Maps page just zoom in to see more people.\nAnyways Azure Maps has a tonne of functionality which you can read about a bit more.\nDon\u0026rsquo;t forget to checkout my YouTube channel.\nEnjoy!\n","date":"24 July 2020","externalUrl":null,"permalink":"/2020/07/24/quickstart-how-to-get-started-with-azure-maps/","section":"Posts","summary":"","title":"QuickStart: How to get started with Azure Maps","type":"posts"},{"content":"Describe core data concepts (15-20%)\nDescribe types of core data workloads\ndescribe batch data https://docs.microsoft.com/en-us/azure/architecture/data-guide/technology-choices/batch-processing describe streaming data https://docs.microsoft.com/en-us/learn/paths/implement-data-streaming-with-asa/ describe the difference between batch and streaming data https://thenewstack.io/the-big-data-debate-batch-processing-vs-streaming-processing/ describe the characteristics of relational data https://binaryterms.com/relational-data-model.html Describe data analytics core concepts\ndescribe data visualization (e.g., visualization, reporting, business intelligence https://www.tableau.com/learn/articles/data-visualization\ndescribe basic chart types such as bar charts and pie charts https://chartio.com/learn/charts/how-to-choose-pie-chart-vs-bar-chart/\ndescribe analytics techniques (e.g., descriptive, diagnostic, predictive, prescriptive, cognitive) https://www.investopedia.com/terms/d/data-analytics.asp#:~:text=Data%20analytics%20is%20the%20science,raw%20data%20for%20human%20consumption.\ndescribe ELT and ETL processing https://www.xplenty.com/blog/etl-vs-elt/#:~:text=ETL%20is%20Extract%2C%20Transform%20and,No%20data%20staging%20is%20needed.\ndescribe the concepts of data processing https://www.mbaknol.com/management-information-systems/concept-of-data-processing/\nDescribe how to work with relational data on Azure (25-30%)\nDescribe relational data workloads\nidentify the right data offering for a relational workload https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-overview describe relational data structures (e.g., tables, index, views) https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-overview Describe relational Azure data services\ndescribe and compare PaaS, IaaS, and SaaS delivery models https://www.nigelfrank.com/blog/iaas-vs-saas-vs-paas-a-guide-to-azure-cloud-service-types/ describe Azure SQL Database https://azure.microsoft.com/en-gb/services/sql-database/#product-overview describe Azure Synapse Analytics https://azure.microsoft.com/en-gb/services/synapse-analytics/ describe SQL Server on Azure Virtual Machine https://azure.microsoft.com/en-gb/services/virtual-machines/sql-server/#overview describe Azure Database for PostgreSQL, Azure Database for MariaDB, and Azure Database for MySQL https://azure.microsoft.com/en-us/services/postgresql/ https://azure.microsoft.com/en-us/services/mariadb/ https://azure.microsoft.com/en-gb/services/mysql/#product-overview describe Azure SQL Managed Instance https://docs.microsoft.com/en-us/azure/azure-sql/managed-instance/sql-managed-instance-paas-overview Identify basic management tasks for relational data\ndescribe provisioning and deployment of relational data services https://docs.microsoft.com/en-gb/azure/azure-sql/database/sql-database-paas-overview\ndescribe method for deployment including ARM templates and Azure Portal https://docs.microsoft.com/en-us/azure/azure-sql/database/arm-templates-content-guide?tabs=single-database\nidentify data security components (e.g., firewall, authentication) https://docs.microsoft.com/en-us/azure/azure-sql/database/secure-database-tutorial\nidentify basic connectivity issues (e.g., accessing from on-premises, access with Azure VNets, access from Internet, authentication, firewalls) https://docs.microsoft.com/en-us/azure/azure-sql/database/troubleshoot-common-errors-issues\nidentify query tools (e.g., Azure Data Studio, SQL Server Management Studio, sqlcmd utility, etc.) https://docs.microsoft.com/en-us/azure/azure-sql/database/connect-query-ssms\nDescribe query techniques for data using SQL language\ncompare DDL versus DML https://www.geeksforgeeks.org/difference-between-ddl-and-dml-in-dbms/ query relational data in PostgreSQL, MySQL, and Azure SQL Database https://azure.microsoft.com/en-gb/blog/fast-and-easy-dev-with-azure-db-for-mysql-and-azuredb-for-postgresql/ Describe how to work with non-relational data on Azure (25-30%)\nDescribe non-relational data workloads\ndescribe the characteristics of non-relational data https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data describe the types of non-relational and NoSQL data https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data recommend the correct data store determine when to use non-relational data https://www.pluralsight.com/blog/software-development/relational-non-relational-databases Describe non-relational data offerings on Azure\nidentify Azure data services for non-relational workloads https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-overview describe Azure Cosmos DB APIs https://docs.microsoft.com/en-us/learn/modules/choose-api-for-cosmos-db/ describe Azure Table storage https://azure.microsoft.com/en-gb/services/storage/tables/ describe Azure Blob storage https://azure.microsoft.com/en-gb/services/storage/blobs/ describe Azure File storage https://azure.microsoft.com/en-gb/services/storage/files/ Identify basic management tasks for non-relational data\ndescribe provisioning and deployment of non-relational data services https://www.edx.org/course/databases-in-azure describe method for deployment including ARM templates and Azure Portal https://docs.microsoft.com/en-us/azure/cosmos-db/manage-table-with-resource-manager identify data security components (e.g., firewall, authentication) https://docs.microsoft.com/en-us/azure/cosmos-db/database-security identify basic connectivity issues (e.g., accessing from on-premises, access with Azure VNets, access from Internet, authentication, firewalls) https://docs.microsoft.com/en-us/azure/cosmos-db/troubleshoot-dot-net-sdk identify management tools for non-relational data https://azure.microsoft.com/en-gb/overview/nosql-database/ Describe an analytics workload on Azure (25-30%)\nDescribe analytics workloads\ndescribe transactional workloads https://docs.microsoft.com/en-us/azure/cosmos-db/analytical-store-introduction describe the difference between a transactional and an analytics workload describe the difference between batch and real time describe data warehousing workloads https://azure.microsoft.com/en-gb/updates/workload-importance-for-azure-sql-data-warehouse-is-now-generally-available/ determine when a data warehouse solution is needed Describe the components of a modern data warehouse\ndescribe Azure data services for modern data warehousing such as Azure Data Lake, Azure Synapse Analytics, Azure Databricks, and Azure HDInsight https://azure.microsoft.com/en-gb/solutions/data-lake/ https://azure.microsoft.com/en-gb/services/synapse-analytics/ https://azure.microsoft.com/en-gb/services/databricks/ https://docs.microsoft.com/en-us/azure/hdinsight/ describe modern data warehousing architecture and workload\nDescribe data ingestion and processing on Azure\ndescribe common practices for data loading https://techcommunity.microsoft.com/t5/datacat/azure-sql-data-warehouse-loading-patterns-and-strategies/ba-p/305456 describe the components of Azure Data Factory (e.g., pipeline, activities, etc.) https://www.youtube.com/watch?v=UQpAZVrRrzs#:~:text=some%20of%20the%20high%2Dlevel,ultimate%20end%20product%20for%20consumption. describe data processing options (e.g., HDI, Azure Databricks, Azure Synapse Analytics, Azure Data Factory) https://docs.microsoft.com/en-us/azure/architecture/data-guide/technology-choices/data-storage Describe data visualization in Microsoft Power BI\ndescribe the role of paginated reporting https://docs.microsoft.com/en-us/power-bi/paginated-reports/paginated-reports-report-builder-power-bi describe the role of interactive reports https://powerbi.microsoft.com/en-us/desktop/#:~:text=Create%20interactive%20reports%20customized%20for,open%20source%20custom%20visuals%20framework. describe the role of dashboards https://docs.microsoft.com/en-us/power-bi/create-reports/service-dashboards describe the workflow in Power BI https://curbal.com/blog/lesson/power-bi-workflow ","date":"9 June 2020","externalUrl":null,"permalink":"/2020/06/09/dp-900-microsoft-azure-data-fundamentals-exam-study-guide/","section":"Posts","summary":"","title":"DP-900 Microsoft Azure Data Fundamentals exam Study Guide","type":"posts"},{"content":"","date":"9 June 2020","externalUrl":null,"permalink":"/tags/azure-cli/","section":"Tags","summary":"","title":"AZURE CLI","type":"tags"},{"content":"If you are using the Azure Portal to do some tasks it may be time to take a look at using the Azure CLI (Command Line Interface) as this can be a good way to learn to start automating some tasks. Handily the Azure CLI has an interactive mode.\n\u0026ldquo;You can use Azure CLI in interactive mode by running the az interactive command. This mode places you in an interactive shell with auto-completion, command descriptions, and examples\u0026rdquo;\nRead the blog post and then checkout my video tutorial at the bottom of the article.\nYou can read more on the Azure CLI interactive mode docs.\nIf like me you like to automate tasks (for numerous reasons) then the Azure CLI can be harassed to script out repetitive tasks into lets say a deployment script.\nImagine the scenario where I need to work with Virtual Machines and I want to learn the Azure CLI commands for listing the VM\u0026rsquo;s I have and then go ahead and create a brand new VM. Lets take a look at how to do that below: -\nCreate a Resource Group using the Azure CLI az group create \u0026ndash;name myDemoRG \u0026ndash;location westeurope\nCreate a Resource Group using AZ CLI interactive mode az \u0026raquo; group create \u0026ndash;name myDemoRG \u0026ndash;location westeurope\nThe difference here is something called scoping and you can learn about scoping. It\u0026rsquo;s the same command we type but we don\u0026rsquo;t need the az at the start as we are currently scoped at the top level.\nIf you have read about scoping in the above link lets now take a look at working with virtual machines.\nCreate a Virtual Machine using the Azure CLI az vm create \u0026ndash;resource-group myDemoRG \u0026ndash;name myDemoVM \u0026ndash;image win2019datacenter \u0026ndash;admin-username gsuttie\nCreate a Virtual Machine using AZ CLI interactive mode az vm\u0026raquo; create \u0026ndash;name myDemoVM \u0026ndash;resource-group myDemoRG \u0026ndash;image win2019datacenter \u0026ndash;admin-username gsuttie\nThe difference here is something called scoping and you can learn about scoping. It\u0026rsquo;s the same command but this time in the Azure CLI interactive mode we are scoped to working with Virtual Machines, this is accomplished by typing %%vm and means we can create, list, delete VM\u0026rsquo;s whilst scoped to using Virtual Machines.\nSummary If your not familiar with using the Azure CLI then take a look at trying out the Interactive mode which will give you defaults and examples.\nhttps://youtu.be/5REvbNYHtks\nLear more :-\nhttps://docs.microsoft.com/en-us/cli/azure/ https://build5nines.com/azure-cli-kung-fu-tips-and-tricks/ ","date":"9 June 2020","externalUrl":null,"permalink":"/2020/06/09/azure-cli-interactive-mode/","section":"Posts","summary":"","title":"Azure CLI - Interactive Mode","type":"posts"},{"content":"Today I am announcing my official Azure Greg YouTube channel - this is where I will be recording demo videos and showing tips and tricks I pick up as I go - feel free to subscribe and get notified of the content as I release it.\nI have a few videos up already which include the following: -\nRehearse your talk with PowerPoint Coach - Here I show off how to use a feature in PowerPoint called Research with coach, this helps you when rehearsing your talks. The AI feature listens to you as you present and gives you feedback during and a report at the end with tips on how to improve. PowerToys - how to install and start using it for Windows. Learn about Hugo - How to get up to speed once Hugo is installed, you can use this to create your first ever blog using Hugo. How to install and customize the Windows Terminal - In this video, I take you through how to install and then customize the Windows Terminal. Azure Resource Graph - In this video, I demo Azure Resource Graph and talk about an example JSON file you can use for any subscription which will give you an excellent inventory of your Azure resources. If there is something you would really like to have me cover in a short video please do let me know. I will conduct twitter polls from time to time to ask what people would like to see.\nThank you to the current subscribers - there is a lot more content on the way.\n","date":"3 June 2020","externalUrl":null,"permalink":"/2020/06/03/azure-greg-youtube-channel/","section":"Posts","summary":"","title":"Azure Greg - YouTube Channel","type":"posts"},{"content":"","date":"3 June 2020","externalUrl":null,"permalink":"/categories/tools/","section":"Categories","summary":"","title":"Tools","type":"categories"},{"content":"Today we kick off what we have called Skylines Summer Sessions.\nOver the Summer months, Skylines Academy, myself and Richard Hooper will be interviewing guests from around the world on Azure related subjects, we get to ask them some fun questions and guests will also be giving us a demo on their subject which will be available on YouTube Live for you to ask questions :)\nYou can catch our first episode with Thomas Maurer who is talking to us and giving a demo on Azure Arc today!\nJoin us at 6pm GMT +1 - https://www.youtube.com/watch?v=n164SSoC388\u0026amp;feature=youtu.be\nTune in, ask your questions, and learn about Azure every Tuesday throughout Summer. You can find out more over at the site.\n","date":"2 June 2020","externalUrl":null,"permalink":"/2020/06/02/introducing-skylines-summer-sessions/","section":"Posts","summary":"","title":"Introducing Skylines Summer Sessions","type":"posts"},{"content":"","date":"24 May 2020","externalUrl":null,"permalink":"/categories/powertoys/","section":"Categories","summary":"","title":"PowerToys","type":"categories"},{"content":"If you haven\u0026rsquo;t heard of or used **PowerToys **then this blog post is for you.\nMicrosoft PowerToys is a set of utilities for power users to tune and streamline their Windows experience for greater productivity. Inspired by the Windows 95 era PowerToys project, this reboot provides power users with ways to squeeze more efficiency out of the Windows 10 shell and customize it for individual workflows.\nTo get up to speed with **PowerToys **then check out my YouTube video below.\nhttps://youtu.be/EpVPLprZ2W0\nYou can find the source code for **PowerToys **here: - https://github.com/microsoft/PowerToys\nI hope you find **PowerToys **useful.\n","date":"24 May 2020","externalUrl":null,"permalink":"/2020/05/24/powertoys/","section":"Posts","summary":"","title":"PowerToys","type":"posts"},{"content":"","date":"24 May 2020","externalUrl":null,"permalink":"/categories/productivity/","section":"Categories","summary":"","title":"Productivity","type":"categories"},{"content":"I have had a fair bit of time recently and spent most of my time learning the content I wanted to learn, nice to have that time right?\nI have been going through the Azure Tips n Tricks website and videos created by Michael Crump, you can follow Michael on Twitter and please also check out his twitch stream which is a lot of fun.\nThere are currently around 260+ blog posts and videos which cover a number of Azure tips and tricks and I reckon everyone will learn something by checking them out, I have learned a tonne of new things already.\nHere are a list of some of my favorites so far: -\nAdding Extensions to Web Apps in Azure App Service https://microsoft.github.io/AzureTipsAndTricks/blog/tip21.html Load Testing web apps with Azure App Services https://microsoft.github.io/AzureTipsAndTricks/blog/tip26.html Configure a Backup for your Azure App Service and Database https://microsoft.github.io/AzureTipsAndTricks/blog/tip28.html Access Cosmos DB through a .NET application https://microsoft.github.io/AzureTipsAndTricks/blog/tip68.html Add Azure Cloud Shell to Visual Studio Code https://microsoft.github.io/AzureTipsAndTricks/blog/tip49.html Plenty more to go through, but I do recommend everyone has a look at them as you will absolutely learn something new.\n","date":"7 May 2020","externalUrl":null,"permalink":"/2020/05/07/azure-tips-n-tricks/","section":"Posts","summary":"","title":"Azure Tips n Tricks","type":"posts"},{"content":"I wanna show you how you can take an existing Azure DevOps project and use this as a template for any new project within Azure DevOps. So let\u0026rsquo;s say you create a brand new project within Azure DevOps and set up a default Wiki and add a dashboard etc. (think of your ideal DevOps project setup).\nOk, now that you have this in place you can actually export the entire project - why might you want to do that I hear you ask?\nThis is so we can effectively clone this best practice project and use, again and again, heck you can even source control the template if you so wish.\nSo how do you export your best practice website template with you lovely custom process flow, wiki, etc in place? - this is where the following link comes in handy.\nhttps://vstsdemodata.visualstudio.com/AzureDevOpsDemoGenerator/_wiki/wikis/AzureDevOpsGenerator.wiki/58/Build-your-own-template\nFrom this above link check the part that says Building a new custom template and you\u0026rsquo;ll see a link that is basically this:-\nhttps://azuredevopsdemogenerator.azurewebsites.net/?enableextractor=true\nLog in and then look for the link top right that says Build your own template\nNow select the **Organization **you want to use and select the project you wish to use as the best practice template project.\nIgnore the error about query items, seems to be a bug, Click Generate Artifacts and you should now have a zip file containing several JSON files.\nSo now we have the project template JSON files exported how do we create a new project based on this zip file? - well, unfortunately, you need to use the AzureDevopsDemoGenerator tool again.\nLog back into the **AzureDevopsGenerator **and click on the \u0026lsquo;choose template\u0026rsquo; button as seen below:-\nand then click **Private **and then choose your zip file which is the file you exported.\nNow fill in the last screen like the screen below and boom!\nYou now have a new Azure DevOps project which is based on your best practice project like so.\nPlease give this a try and let me know your thoughts on how useful this is for ya - enjoy!\nGregor\n","date":"30 April 2020","externalUrl":null,"permalink":"/2020/04/30/azure-devops-best-practice-template-project/","section":"Posts","summary":"","title":"Azure DevOps Best Practice Template Project","type":"posts"},{"content":"So April 2020 has been an interesting month for me personally, the project I was doing at work got paused due to the customer not being able to support remote working, work had nothing in the pipeline for me to do so I got furloughed, wow talk about being kicked in the nuts, but rather than complain, let\u0026rsquo;s use this opportunity to learn.\nThank you to everyone who has reached out to me, they know who they are and it\u0026rsquo;s hugely appreciated.\nIf you know me then you know that I am always learning, always setting myself goals for the months ahead and so I decided to not write blog posts or produce content for the time I\u0026rsquo;m furloughed and spend it learning. If I had to write down everything I wanted to learn and read about it would turn into a book itself.\nSo that being said I wanted to learn containers and GitHub Actions as the first 2 port of calls and fit in some extra community work in between that.\nI have probably done more community work this month than in the past 3 or 4 combined and it been amazing - being able to work from home and just get on a call with folk wanting to learn something or getting on a call to help someone figure out an issue has been very sweet. Being able to moderate Michael Crump\u0026rsquo;s Twitch stream has been super cool, twitch is something I think has a very bright future.\nWorking from home (albeit not actually working) is amazing, its so much more productive than working in an office or out on-site*** at a customer.***\nThe following is a list of just a few of the things I\u0026rsquo;ve accomplished this month, it doesn\u0026rsquo;t cover the hours, the calls, the number of times I had to change the schedule fo the gav event - would I change what I did if I had the month over - nope!.\nGlobal Azure Virtual 2020 - One of the organisers, website creation, speaker sign-ups, chasing people for content, updating the schedule. Also a moderator on the 3 day which was the Live Stream (9 hours). Moderator and participant in Michael Trumps Twitch Streams covering Azure app config, Live Share, GitHub Actions, WSL, and other more general fun topics. Spoke at the Belgium User Group - on Supercharging your Azure Learning as part of the Belgium Community Week Spoke at the Boston User Group - on Supercharging your Azure Learning. Time spent doing Pluralsight this month learning GitHub Actions. Completed Cloudskills course on - Docker Jumpstart. Microsoft Learn learning - 3 modules complete. Microsoft Products Groups (10 PGI\u0026rsquo;s) Mentoring several people with starting blogs, learning Hugo, exam study guides, and people looking for advice on how to become an MVP. Created a DP-300 Administering Relational Databases on Microsoft Azurestudy guide: - https://gregorsuttie.com/2020/04/19/azure-dp-300-study-guide/ Spoke 1-1 with more a number of community people which a probably the best part of being off. In May I plan to brush up on my SQL and PowerBI skills and looking forward to that, it\u0026rsquo;s been a few months since I touched either.\nStill **amazes **me just how many great people I have spoken to this past month and it\u0026rsquo;s been a blast.\n","date":"28 April 2020","externalUrl":null,"permalink":"/2020/04/28/what-have-i-been-up-to-since-i-was-furloughed/","section":"Posts","summary":"","title":"What have I been up to since I was furloughed?","type":"posts"},{"content":" The following I will be using to study for the DP-300 exam, now I am no SQL Server expert, far from it, some of these links might not be the best fit for that particular area, use them at your peril! :)\nIf your looking for extra study material or amazing SQL Server Workshops then check this out https://microsoft.github.io/sqlworkshops/\nHopefully this is of some use to people - if you find more accurate links let me know and I\u0026rsquo;ll update.\nPlan and Implement Data Platform Resources (15-20%)\nDeploy resources by using manual methods • deploy database offerings on selected platforms https://docs.microsoft.com/en-us/azure/sql-database/sql-database-paas-vs-sql-server-iaas • configure customized deployment templates https://docs.microsoft.com/en-us/azure/sql-database/sql-database-resource-manager-samples?tabs=single-database • apply patches and updates for hybrid and IaaS deployment https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-automated-patching\nRecommend an appropriate database offering based on specific requirements\n• evaluate requirements for the deployment • evaluate the functional benefits/impact of possible database offerings • evaluate the scalability of the possible database offering • evaluate the HA/DR of the possible database offering • evaluate the security aspects of the possible database offering\nConfigure resources for scale and performance\n• configure Azure SQL database/elastic pools for scale and performance https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-pool-manage • configure Azure SQL managed instances for scale and performance https://docs.microsoft.com/en-us/azure/sql-database/sql-database-managed-instance • configure SQL Server in Azure VMs for scale and performance https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-performance • calculate resource requirements https://docs.microsoft.com/en-us/sharepoint/administration/storage-and-sql-server-capacity-planning-and-configuration • evaluate database partitioning techniques, such as database sharding https://docs.microsoft.com/en-us/azure/architecture/best-practices/data-partitioning\nEvaluate a strategy for moving to Azure\n• evaluate requirements for the migration https://docs.microsoft.com/en-us/sql/dma/dma-assesssqlonprem?view=sql-server-ver15 • evaluate offline or online migration strategies https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-to-azure-sql • evaluate requirements for the upgrade https://docs.microsoft.com/en-us/sql/database-engine/install-windows/supported-version-and-edition-upgrades-version-15?view=sql-server-ver15 • evaluate offline or online upgrade strategies https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-application-rolling-upgrade\nImplement a migration or upgrade strategy for moving to Azure\n• implement an online migration strategy https://datamigration.microsoft.com/scenario/sql-to-azuresqldb?step=1 • implement an offline migration strategy https://docs.microsoft.com/en-us/azure/dms/tutorial-sql-server-to-azure-sql • implement an online upgrade strategy https://docs.microsoft.com/en-us/azure/sql-database/sql-database-manage-application-rolling-upgrade • implement an offline upgrade strategy https://docs.microsoft.com/en-us/sql/database-engine/install-windows/upgrade-to-a-different-edition-of-sql-server-setup?view=sql-server-ver15\nImplement a Secure Environment (15-20%)\nConfigure database authentication by using platform and database tools\n• configure Azure AD authentication https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication-configure?tabs=azure-powershell • create users from Azure AD identities https://docs.microsoft.com/en-us/azure/sql-database/sql-database-aad-authentication • configure security principals https://docs.microsoft.com/en-us/sql/relational-databases/security/securing-sql-server?view=sql-server-ver15\nConfigure database authorization by using platform and database tools\n• configure database and object-level permissions using graphical tools https://docs.microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-ver15 • apply principle of least privilege for all securables https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/authorization-and-permissions-in-sql-server\nImplement security for data at rest\n• implement Transparent Data Encryption (TDE) https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption?view=sql-server-ver15 • implement object-level encryption https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/encrypt-a-column-of-data?view=sql-server-ver15 • implement Dynamic Data Masking https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver15 • implement Azure Key Vault and disk encryption for Azure VMs https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disk-encryption-key-vault\nImplement security for data in transit\n• configure SQL DB and database-level firewall rules https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure • implement Always Encrypted https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine?view=sql-server-ver15 • configure Azure Data Gateway https://docs.microsoft.com/en-us/azure/analysis-services/analysis-services-gateway\nImplement compliance controls for sensitive data\n• apply a data classification strategy https://docs.microsoft.com/en-us/sql/relational-databases/security/sql-data-discovery-and-classification?view=sql-server-ver15\u0026amp;tabs=t-sql • configure server and database audits https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/create-a-server-audit-and-database-audit-specification?view=sql-server-ver15 • implement data change tracking https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/track-data-changes-sql-server?view=sql-server-ver15 • perform vulnerability assessment https://docs.microsoft.com/en-us/sql/relational-databases/security/sql-vulnerability-assessment?view=sql-server-ver15\nMonitor and Optimize Operational Resources (15-20%)\nMonitor activity and performance\n• prepare an operational performance baseline https://docs.microsoft.com/en-us/sql/relational-databases/performance/establish-a-performance-baseline?view=sql-server-ver15 • determine sources for performance metrics https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15 • interpret performance metrics https://docs.microsoft.com/en-us/sql/relational-databases/performance/performance-monitoring-and-tuning-tools?view=sql-server-ver15 • assess database performance by using Azure SQL Database Intelligent Performance https://docs.microsoft.com/en-us/azure/sql-database/sql-database-query-performance • configure and monitor activity and performance at the infrastructure, server, service, and database levels https://docs.microsoft.com/en-us/sql/relational-databases/performance/query-profiling-infrastructure?view=sql-server-ver15\nImplement performance-related maintenance tasks\n• implement index maintenance tasks https://docs.microsoft.com/en-us/sql/relational-databases/maintenance-plans/rebuild-index-task-maintenance-plan?view=sql-server-ver15 • implement statistics maintenance tasks https://docs.microsoft.com/en-us/sql/relational-databases/maintenance-plans/update-statistics-task-maintenance-plan?view=sql-server-ver15 • configure database auto-tuning https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automatic-tuning-enable • automate database maintenance tasks\nAzure SQL agent jobs, Azure automation, SQL server agent jobs https://docs.microsoft.com/en-us/sql/relational-databases/maintenance-plans/use-the-maintenance-plan-wizard?view=sql-server-ver15 • manage storage capacity https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-ver15 Identify performance-related issues\n• configure Query Store to collect performance data https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15 • identify sessions that cause blocking https://support.microsoft.com/en-gb/help/224453/inf-understanding-and-resolving-sql-server-blocking-problems • assess growth/fragmentation of databases and logs https://docs.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver15 • assess performance-related database configuration parameters\nincluding AutoClose, AutoShrink, AutoGrowth https://support.microsoft.com/en-gb/help/315512/considerations-for-the-autogrow-and-autoshrink-settings-in-sql-server Configure resources for optimal performance\n• configure storage and infrastructure resources\noptimize IOPS, throughput, and latency optimize tempdb performance optimize data and log files for performance https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-storage-configuration • configure server and service account settings for performance https://support.microsoft.com/en-gb/help/319942/how-to-determine-proper-sql-server-configuration-settings • configure Resource Governor for performance https://docs.microsoft.com/en-us/sql/relational-databases/resource-governor/resource-governor?view=sql-server-ver15 Configure a user database for optimal performance • implement database-scoped configuration https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql?view=sql-server-ver15 • configure compute resources for scaling https://docs.microsoft.com/en-us/azure/sql-database/sql-database-single-database-scale • configure Intelligent Query Processing (IQP) https://docs.microsoft.com/en-us/sql/relational-databases/performance/intelligent-query-processing?view=sql-server-ver15\nOptimize Query Performance (5-10%)\nReview query plans • determine the appropriate type of execution plan - live Query Statistics, Actual Execution Plan, Estimated Execution Plan, Showplan https://docs.microsoft.com/en-us/sql/relational-databases/performance/execution-plans?view=sql-server-ver15 • identify problem areas in execution plans https://docs.microsoft.com/en-us/sql/relational-databases/performance/analyze-an-actual-execution-plan?view=sql-server-ver15 • extract query plans from the Query Store https://docs.microsoft.com/en-us/sql/relational-databases/performance/monitoring-performance-by-using-the-query-store?view=sql-server-ver15\nEvaluate performance improvements • determine the appropriate Dynamic Management Views (DMVs) to gather query performance information https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs • identify performance issues using DMVs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs • identify and implement index changes for queries https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-index-design-guide?view=sql-server-ver15 • recommend query construct modifications based on resource usage https://docs.microsoft.com/en-us/sql/relational-databases/performance/upgrade-dbcompat-using-qta?view=sql-server-ver15 • assess the use of hints for query performance https://docs.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-query?view=sql-server-ver15\nReview database table and index design • identify data quality issues with duplication of data https://docs.microsoft.com/en-us/sql/data-quality-services/introduction-to-data-quality-services?view=sql-server-ver15 • identify normal form of database https://docs.microsoft.com/en-us/office/troubleshoot/access/database-normalization-description • assess index design for performance https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-index-design-guide?view=sql-server-ver15 • validate data types defined for columns https://www.mssqltips.com/sqlservertip/4799/validate-integer-and-decimal-values-in-sql-server/ • recommend table and index storage including filegroups • evaluate table partitioning strategy https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-files-and-filegroups?view=sql-server-ver15 • evaluate the use of compression for tables and indexes https://docs.microsoft.com/en-us/sql/relational-databases/data-compression/enable-compression-on-a-table-or-index?view=sql-server-ver15\nPerform Automation of Tasks (10-15%)\nCreate scheduled tasks • manage schedules for regular maintenance jobs https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-ver15 • configure multi-server automation https://docs.microsoft.com/en-us/sql/ssms/agent/automated-administration-across-an-enterprise?view=sql-server-ver15 • configure notifications for task success/failure/non-completion https://docs.microsoft.com/en-us/sql/ssms/agent/notify-an-operator-of-job-status?view=sql-server-ver15\nEvaluate and implement an alert and notification strategy • create event notifications based on metrics https://docs.microsoft.com/en-us/azure/sql-database/sql-database-insights-alerts-portal\n• create event notifications for Azure resources https://docs.microsoft.com/en-us/sql/relational-databases/service-broker/event-notifications?view=sql-server-ver15\n• create alerts for server configuration changes https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-add-alert-transact-sql?view=sql-server-ver15 • create tasks that respond to event notifications https://docs.microsoft.com/en-us/sql/relational-databases/service-broker/event-notifications?view=sql-server-ver15\nManage and automate tasks in Azure • perform automated deployment methods for resources https://docs.microsoft.com/en-us/azure/devops/pipelines/targets/azure-sqldb?view=azure-devops\u0026amp;tabs=yaml • automate Backups https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automated-backups?tabs=single-database • automate performance tuning and patching https://docs.microsoft.com/en-us/azure/sql-database/sql-database-automatic-tuning • implement policies by using automated evaluation modes https://docs.microsoft.com/en-us/sql/relational-databases/policy-based-management/administer-servers-by-using-policy-based-management?view=sql-server-ver15\nPlan and Implement a High Availability and Disaster Recovery (HADR) Environment (15-20%)\nRecommend an HADR strategy for a data platform solution • recommend HADR strategy based on RPO/RTO requirements https://docs.microsoft.com/en-us/azure/sql-database/sql-database-business-continuity • evaluate HADR for hybrid deployments https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-high-availability-dr • evaluate Azure-specific HADR solutions https://docs.microsoft.com/en-us/azure/sql-database/sql-database-high-availability • identify resources for HADR solutions https://www.sqlskills.com/blogs/erin/sql-server-hadr-features/\nTest an HADR strategy by using platform, OS and database tools • test HA by using failover https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/perform-a-planned-manual-failover-of-an-availability-group-sql-server?view=sql-server-ver15 • test DR by using failover or restore https://docs.microsoft.com/en-us/azure/sql-database/sql-database-disaster-recovery\nPerform backup and restore a database by using database tools • perform a database backup with options https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/create-a-full-database-backup-sql-server?view=sql-server-ver15#TsqlProcedure • perform a database restore with options https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver15 • perform a database restore to a point in time https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/restore-a-sql-server-database-to-a-point-in-time-full-recovery-model?view=sql-server-ver15 • configure long-term backup retention https://docs.microsoft.com/en-us/azure/sql-database/sql-database-long-term-retention\nConfigure DR by using platform and database tools • configure replication https://docs.microsoft.com/en-us/sql/relational-databases/replication/tutorial-preparing-the-server-for-replication?view=sql-server-ver15 • configure Azure Site Recovery for a database offering https://docs.microsoft.com/en-us/azure/site-recovery/site-recovery-sql\nConfigure HA using platform, OS and database tools • create an Availability Group https://docs.microsoft.com/en-us/sql/t-sql/statements/create-availability-group-transact-sql?view=sql-server-ver15 • integrate a database into an Availability Group https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-add-a-database?view=sql-server-ver15 • configure quorum options for a Windows Server Failover Cluster https://docs.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/wsfc-quorum-modes-and-voting-configuration-sql-server?view=sql-server-ver15 • configure an Availability Group listener https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/create-or-configure-an-availability-group-listener-sql-server?view=sql-server-ver15\nPerform Administration by Using T-SQL (10-15%)\nExamine system health • evaluate database health using DMVs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs#monitoring-query-performance • evaluate server health using DMVs https://docs.microsoft.com/en-us/azure/sql-database/sql-database-monitoring-with-dmvs • perform database consistency checks by using DBCC https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15\nMonitor database configuration by using T-SQL • assess proper database autogrowth configuration https://www.red-gate.com/simple-talk/sql/database-administration/sql-server-database-growth-and-autogrowth-settings/ • report on database free space https://docs.microsoft.com/en-us/sql/relational-databases/databases/display-data-and-log-space-information-for-a-database?view=sql-server-ver15#TsqlProcedure • review database configuration options https://docs.microsoft.com/en-us/sql/relational-databases/databases/change-the-configuration-settings-for-a-database?view=sql-server-ver15#TsqlProcedure\nPerform backup and restore a database by using T-SQL • prepare databases for AlwaysOn Availability Groups https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/manually-prepare-a-secondary-database-for-an-availability-group-sql-server?view=sql-server-ver15 • perform transaction log backup https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-a-transaction-log-sql-server?view=sql-server-ver15#using-transact-sql • perform restore of user databases https://docs.microsoft.com/en-us/sql/t-sql/statements/restore-statements-transact-sql?view=sql-server-ver15 • perform database backups with options https://docs.microsoft.com/en-us/sql/t-sql/statements/backup-transact-sql?view=sql-server-ver15\nManage authentication by using T-SQL • manage certificates https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-certificate-transact-sql?view=sql-server-ver15 • manage security principals https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/principals-database-engine?view=sql-server-ver15\nManage authorization by using T-SQL • configure permissions for users to access database objects https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/grant-a-permission-to-a-principal?view=sql-server-ver15 • configure permissions by using custom roles https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-an-application-role?view=sql-server-ver15#TsqlProcedure\nGood luck with the Exam!\n","date":"19 April 2020","externalUrl":null,"permalink":"/2020/04/19/azure-dp-300-study-guide/","section":"Posts","summary":"","title":"Azure DP-300 Study Guide","type":"posts"},{"content":"","date":"19 April 2020","externalUrl":null,"permalink":"/categories/studyguides/","section":"Categories","summary":"","title":"StudyGuides","type":"categories"},{"content":"The European Cloud Conference will take place on October 27-29, 2020 in Nice, France and is Europe’s leading Independent Microsoft Azure Conference.\nBook your tickets for this amazing Azure conference and make sure to sign up for the mailing list so you don\u0026rsquo;t miss out on any news.\nThe conference will be Europe’s first annual conference dedicated exclusively to Microsoft Azure.\nSo who should attend? - If you\u0026rsquo;re a technology leader or have an interest across any area within Azure this is the go-to event for you. If your a Developer, work in Operations, Infrastructure or DevOps, manager, security expert or even at C-Level management then this is the conference you need to attend in 2020.\n8 Full day Expert Azure Tutorials have been announced\nAzure Security Best Practices\nMustafa Toroman, MVP, MCT Authority Partners, Bosnia And Herzegovina\nTop 3 Highlights of Attending your this Tutorial:\nLearn about Identity in cloud Network security Data protection Level: 400 Topic: Security Category: IT Pro\nKubernetes on Azure Vishwas Lele, MVP, Microsoft Regional Director Ais, United States\nTop 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:\nLearn about Key Kubernetes Concepts Deep dive into AKS Learn how AKS integrates with other Azure services Level: 400 Topic: Azure Migrations Category: Developers\nAzure Messaging – From 0 to 100 in One Day Sean Feldman, MVP Particular Software, Canada\nTop 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:\nBalanced tutorial between theory and hands on exercises Practical Azure messaging knowledge distilled in one day Learn from an Azure Messaging expert and MVP Level: 400 Topic: Messaging Category: Developers\nAzure Virtual Machines 101 Vladimir Stefanovic, AZURE MVP, MCT REGIONAL LEAD Superadmins, Serbia\nAleksandar Nikolic, MVP M.O.3.A.K. IT Consulting, Serbia\nTop 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:\nAzure VM Deep Dive Azure VMSS Deep Dive Designing VMs Architecture Level: 300 Topic: Cloud Compute Category: IT Pro\nLow-Code Cloud App Development and App Modernization Paul Swider, AZURE MVP Realactivity, LLC, United States\nTop 3 Highlights of Attending this Tutorial:\nLearn the value of low-code when migrating business apps to Azure See how Power Apps can be used as part of an Azure App Modernization strategy End to end demos of integration with Azure Services. Level: 300 Topic: Cloud Compute Category: Developers\nA Day of Customer Identity Implementation with Azure Active Directory B2C John Garland, MVP, MCT Wintellect, United States\nTop 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:\nLearn how to use Azure AD B2C to provide secure authentication for your application Go beyond the basics and see how you can customize Azure AD B2C to match both your identity needs as well as your brand Learn how to use Custom Policies in Azure AD B2C to enable advanced identity experiences Level: 300 Topic: Identity \u0026amp; Access Category: Developers\nGetting Gremlins to Improve Your Data Chad Green, MVP Scholarrx, United States\nTop 3 Highlights of Attending this European Cloud Conference 2020 Tutorial:\nUnderstand the basics of graph databases Get hands-on experience setting up, configuring, and optimizing a graph database Get hands-on experience working with graph databases in your applications Level: 300 Topic: AI Category: Developers\nMonitoring Solutions in Azure Magnus Martensson, MVP, MICROSOFT REGIONAL DIRECTOR Loftysoft, Sweden\nLevel: 300 Topic: Azure Management Category: Developers \u0026amp; IT Professionals\nBook your place now to attend.\nYou can find out more information about the venue and also make sure to check out the faqs.\n","date":"19 April 2020","externalUrl":null,"permalink":"/2020/04/19/european-cloud-conference/","section":"Posts","summary":"","title":"European Cloud Conference","type":"posts"},{"content":"I have been working with VS Code and learning GitHub Actions recently and was working through a great Pluralsight course on the subject which can be found here -\u0026gt; https://www.pluralsight.com/courses/building-custom-github-actions\nNow I had been working away and pushing code quite the thing when I came towards the very end of the course and I got this error: -\n! [remote rejected] master -\u0026gt; master (refusing to allow an OAuth App to create or update workflow .github/workflows/build.yml without workflow scope)error: failed to push some refs to \u0026lsquo;https://github.com/gsuttie/auto-release-draft.git'\nI was stumped for some time until I came across the answer here https://github.com/gitextensions/gitextensions/issues/4916#issuecomment-557509451 by Mike-E-wins\nTo fix this I regenerated a Personal Access Token from within GitHub and then went into Credential Manager within Windows and reset the password to the new personal access token and bingo - I can now push the code once more.\nBig thanks for Mike adding the solution as I had tried a number of things without success.\n","date":"14 April 2020","externalUrl":null,"permalink":"/2020/04/14/github-actions-error-refusing-to-allow-an-oauth-app-to-create-or-update-workflow/","section":"Posts","summary":"","title":"GitHub Actions Error -refusing to allow an OAuth App to create or update workflow","type":"posts"},{"content":"","date":"26 March 2020","externalUrl":null,"permalink":"/categories/git/","section":"Categories","summary":"","title":"Git","type":"categories"},{"content":"In this blog post, I am going to take an existing web application that resides in Azure DevOps and port it to build and deploy within GitHub and use GitHub Actions to build and deploy the same site to GitHub.\nHere you can see I have a website in Visual Studio which is currently pointing at a repository inside Azure Devops.\nAnd here is what it looks like inside Visual Studio 2019 with the connection to Azure DevOps.\nNow I am going to remove the connection from the Azure DevOps repo by clicking on remove like so:-\nWhen I click on remove, this removes the connection from the code to the Azure DevOps repository. Then I go to the Sync area and it now asks me where do I want to push the code to.\nThis time I choose to Publish to GitHub.\nGive the new repository a name (for within GitHub) and press Publish\nThis will push the code to a new GitHub repository called AzureGlobalBootCamp2020 which you can now see below.\nNow we need to create a GitHub Action so that the code is built and pushed to Azure (like it was from within Azure DevOps previously).\nFrom within your new GitHub repo click on Actions at the top.\nI then chose Setup a new workflow yourself\nThis will take you to a screen and create a main.yaml file.\nname: Deploy ASP.NET Core app to Azure Web App\non: push: branches: - master pull_request: branches: - \u0026lsquo;*\u0026rsquo;\nCONFIGURATION # For help, go to https://github.com/Azure/Actions # # 1. Set up the following secrets in your repository: # AZURE_WEBAPP_PUBLISH_PROFILE # # 2. Change these variables for your configuration: # env: AZURE_WEBAPP_NAME: AzureGlobalBootCamp2020 # set this to your application\u0026rsquo;s name AZURE_WEBAPP_PACKAGE_PATH: \u0026lsquo;.\u0026rsquo; # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: \u0026lsquo;3.1.100\u0026rsquo; # set this to the dot net version to use\njobs: build-and-deploy: runs-on: ubuntu-latest steps:\n# Checkout the repo - uses: actions/checkout@master # Setup .NET Core SDK - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.DOTNET_VERSION }} # Run dotnet build and publish - name: dotnet build and publish run: | dotnet build --configuration Release dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' # Deploy to Azure Web apps - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name publish-profile: ${{ secrets.azureWebAppPublishProfile }} # Define secret variable in repository settings as per action documentation package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples # I then pasted this into the main.yaml file and changed the following:-\nAZURE_WEBAPP_NAME: AzureGlobalBootCamp2020 DOTNET_VERSION: \u0026lsquo;3.1.100\u0026rsquo; publish-profile: ${{ secrets.azureWebAppPublishProfile }}\nThe last entry above publish-profile requires you to create a new secret in GitHub under Settings -\u0026gt; Secrets and call it azureWebAppPublishProfile and you need to paste in the publishing profile from your Azure Web App\nThe above screen shows me in the Azure Portal and I\u0026rsquo;ve clicked into my Azure App Service and when I click on Get Publish Profile it downloads the content of the Publish profile which I paste into the new Secret with GitHub.\nAnd with that we are done, GitHub will kick off the **GitHub Action **and built and deploy my web app changes when I publish any change to GitHub right into Azure for me.\nNote To read more on using GitHub Actions with .Net you can read more on GitHub here -\u0026gt; https://github.com/actions/setup-dotnet\nFeel free to comment below if this is useful or if you have any feedback etc.\n","date":"26 March 2020","externalUrl":null,"permalink":"/2020/03/26/moving-an-azure-devops-repo-to-use-github-actions-instead/","section":"Posts","summary":"","title":"Moving an Azure DevOps repo to use Github Actions instead","type":"posts"},{"content":"If you want to create a new blog / or want to host your blog site then it\u0026rsquo;s worth taking a look at Hugo.\nHugo is a free static site generator.\nYou can install Hugo by following these steps from the docs: - https://gohugo.io/getting-started/installing/\nOnce installed you can run your content locally **first **which means you create content and see the change with a live reload - instant feedback on your changes which means you can create content to your liking rapidly.\nThe content is created using **markdown **and if you\u0026rsquo;re looking for a nice tool to help with markdown I was recommended to take a look at stackedit.io https://stackedit.io/app#, but tools like Visual Studio Code offer this also.\nI am going to assume that you have installed Hugo and have some content.\nTo run the website locally type hugo server\nThis normally shows you a screen like so:-\nWe can see the url to use (highlighted in red) so grab this url http://localhost:1313/ and paste it into your favourite browser and there you can see your new creation. (Keep updating the content and testing it out until your happy with all of the content.)\nIf your planning on hosting your site using GitHub Pages then you need to make a small change to the config of your Hugo site, locate the config.toml file within the root and add in the following line just before the [params] section (normally line 8 maybe 9)\npublishDir = \u0026ldquo;docs\u0026rdquo;\nFor the cloudfamily.info project which we host on GitHub Pages our config.toml file looks like this\nThis file and all our code for reference can be found at https://github.com/CloudFamily/CloudFamily/\n**Note:- **\nBefore we added the change to the config.toml the code would be compiled into the newly created public folder,\nIf your planning to host your Hugo site on Azure then come back for part 2 and I\u0026rsquo;ll show you how to host your new blog using Hugo on Azure.\nI\u0026rsquo;m going to assume if you\u0026rsquo;ve gotten this far **Hugo **has perhaps sparked some interest, or you\u0026rsquo;re looking into moving to use GitHub Pages.\nCreate a** new repository** in GitHub and upload all of your content from the root (including the docs folder, p.s. assuming you\u0026rsquo;re still pushing to GitHub Pages).\nTo activate GitHub Pages with the new repository you need to go to the Settings section within your new repository and make the same change as in the image below. (change the source drop-down to point to the /docs folder)\nOnce you have completed that step, you need to go back to the root of your repository within GitHub and look for the environments link like the image below: -\nThis is where the GitHub Pages are compiled and built essentially, click on this link and you\u0026rsquo;ll see the latest code being built like so: -\nAnd once that passes, click on View deployment to see your new site in action.\nNote: -\nYou may notice that there are some issues with the look of the site, there are 2 things to check in order to resolve.\nPotential Issue 1\nFirst, add your website URL from the browser into the top line of the config.toml file like so (changing out username and repository name for either the URL or your website name if you have a custom domain name).\nbaseURL = \u0026ldquo;https://.github.io//\nSo for the https://cloudfamily.info/ website our top line in the config.toml file looks like this:-\nbaseURL = \u0026ldquo;https://cloudfamily.info\u0026rdquo;\nOnce you make this change, go back to the command prompt or PowerShell and run the command from the root folder Hugo\nThis recompiles your changes, then cd into the docs folder and do the following:-\ngit add. git commit -a -m \u0026ldquo;updating config.toml file\u0026rdquo; git push -u origin master Potential Issue 2\nDepending on what **theme **you chose, you may have to add it in as a submodule, an example of this is if you chose the minimal theme then you have to run the following command from the root folder of your repo:-\n$ git submodule add https://github.com/calintat/minimal.git themes/minimal $ git submodule init $ git submodule update\nOnce you make this change, go back to the command prompt or PowerShell and run the command from the root folder Hugo\nThis recompiles your changes, then cd into the docs folder and do the following:-\ngit add. git commit -a -m \u0026ldquo;updating config.toml file\u0026rdquo; git push -u origin master That should be you up and running, just remember the following if you make changes and want them to be compiled and ran on your GitHub Pages: -\nGo to the root folder within the command prompt or PowerShell\nType **Hugo **to compile Change dir into the **Docs **folder and then git add. git commit -a -m \u0026ldquo;updating config.toml file\u0026rdquo; git push -u origin master Note - many thanks to people who have pointed me in the direction of Netlify and other tools, I\u0026rsquo;ll look at Netlify next and the next post will cover hosting a Hugo site in Azure.\nPlease get in touch if you have issues with Hugo.\nhttps://youtu.be/-N2UhNXVFmM\n","date":"23 March 2020","externalUrl":null,"permalink":"/2020/03/23/hosting-your-blog-on-github-pages-using-hugo/","section":"Posts","summary":"","title":"Hosting your blog on Github Pages using Hugo","type":"posts"},{"content":" So I wanted to take a look into GitHub Action\u0026rsquo;s and deploy a .Net Web App, this is my first real look into them and will be blogging about them a lot more in the future, below are the steps I took to do this.\nCreate a basic .Net MVC Web App using .Net Core 3.1 Run the app and make sure all is working as expected. Deploy this to Azure web app to Azure and check it runs ok. I then go into my Resource Group, locate the app service and from the click on \u0026lsquo;Get publish profile\u0026rsquo; - download the file and keep handy. Then I added the code to GitHub in a new repo which you can find here: - https://github.com/gsuttie/GHActionsWebApp1 Next, I need to create a **secret **from within GitHub, so once you have your code in a new repository within Github go click on **Settings **and then **Security **and click Add a new secret, call it azureWebAppPublishProfile if you want to use the YAML below. Then I click on Actions and create my first workflow, I chose, Setup a workflow yourself. And then from here - https://github.com/actions/setup-dotnet I used the YAML and pasted in so that my main.yaml file looks like this name: Deploy ASP.NET Core app to Azure Web App\non: push: branches: - master pull_request: branches: - \u0026lsquo;*\u0026rsquo;\nCONFIGURATION # For help, go to https://github.com/Azure/Actions # # 1. Set up the following secrets in your repository: # AZURE_WEBAPP_PUBLISH_PROFILE # # 2. Change these variables for your configuration: # env: AZURE_WEBAPP_NAME: dummywebsite # set this to your application\u0026rsquo;s name AZURE_WEBAPP_PACKAGE_PATH: \u0026lsquo;.\u0026rsquo; # set this to the path to your web app project, defaults to the repository root DOTNET_VERSION: \u0026lsquo;3.1.100\u0026rsquo; # set this to the dot net version to use\njobs: build-and-deploy: runs-on: ubuntu-latest steps:\n# Checkout the repo - uses: actions/checkout@master # Setup .NET Core SDK - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: ${{ env.DOTNET_VERSION }} # Run dotnet build and publish - name: dotnet build and publish run: | dotnet build --configuration Release dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' # Deploy to Azure Web apps - name: 'Run Azure webapp deploy action using publish profile credentials' uses: azure/webapps-deploy@v2 with: app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name publish-profile: ${{ secrets.azureWebAppPublishProfile }} # Define secret variable in repository settings as per action documentation package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' For more samples to get started with GitHub Action workflows to deploy to Azure, refer to https://github.com/Azure/actions-workflow-samples # If you plan to use the Yaml from the above, mind and change the one setting which is AZURE_WEBAPP_NAME - I set this to **dummywebsite **so rename that to whatever your app service is called. Save that, and then start your new GitHub workflow. If all is well then your good to go, push a change to the web app and it should build and deploy automatically using your new GitHub Action. ","date":"22 March 2020","externalUrl":null,"permalink":"/2020/03/22/using-github-actions-to-deploy-a-net-web-app/","section":"Posts","summary":"","title":"Using GitHub Actions to deploy a .Net Web App","type":"posts"},{"content":"Azure is an ever-changing platform, its amazing just how often its updated, it\u0026rsquo;s also really hard to stay up to date with the numerous new services and the changes to existing services.\nIt\u0026rsquo;s also very hard to keep abreast of all of the Azure news throughout the year, months and weeks.\nAzure weekly is a great way to keep up to date with what\u0026rsquo;s new each and every week.\nAzure weekly is brought to you by the folks from Endjin - they do a number of amazing things with Azure and are a company worth checking out.\nThey are up to week 264 at this time of writing this article, so what are you waiting for? - go find out what\u0026rsquo;s new recently, subscribe and don\u0026rsquo;t miss a thing going forward.\nYou can also contribute content to Azure Weekly, so if you have a blog post and have Azure content contact them and you may end up appearing in the weekly newsletter.\nYou can also follow Azure Weekly on twitter at @AzureWeekly\nPlease let me know what you think of Azure Weekly.\n","date":"3 March 2020","externalUrl":null,"permalink":"/2020/03/03/azure-weekly/","section":"Posts","summary":"","title":"Azure Weekly","type":"posts"},{"content":"On March 4-5th I will be attending and speaking at the Ignite Tour, Zurich and will be talking about Deployment Practices for Greater Reliability as part of the Ops learning path.\nWithin the talk I will cover how to move toward a more **reliable **deployment of software and infrastructure as code, I\u0026rsquo;ll cover testing and talk about what good looks like and show some demo\u0026rsquo;s of what an up to date app deployment looks like using services like AKS and Azure Devops.\nI have never been to Zurich and speaking at conferences was one of my goals for this year, I am really looking forward to seeing some friends during my trip and be able to present.\nI have been using Presenter Coach which is built into PowerPoint if you use PowerPoint online and will record a quick demo of this if people think it would be worthhwile.\nIf you\u0026rsquo;re attending let me know and I will come and say hi, maybe even see you at my talk.\nAny questions let me know in the comments below.\n","date":"11 February 2020","externalUrl":null,"permalink":"/2020/02/11/speaking-at-microsoft-ignite-the-tour-zurich/","section":"Posts","summary":"","title":"Speaking At Microsoft Ignite the Tour, Zurich","type":"posts"},{"content":"I have been familiar with Azurecharts.com long before it was mentioned on twitter by Mark Russinovich who you are all hopefully following on twitter.\nThe site is written by Alexey Polkovnikov and is one I keep coming back to and always point people to. There is a lot of very useful links on here.\nThe site has a number of features that I wanted to cover and you can read about what it can be used for in the about page.\nThe main concept is that you can go here and see what is new in each area of Azure right down to the actual azure service itself and this is continually updated for you.\nI wanted to cover the areas which I think are incredibly useful that you may have missed within the site, so lets dive right in.\nHighlights Highlights allow you to choose a job role and it will highlight the azure services most likely to be of interest for that role.\nOverview The overview lists all of the Azure services and you can click on each to be taken to the relevant azure docs page to learn more.\nSLA The SLA section shows you the SLA (service level agreement for Azure services which has an SLA.\nStatus This screen shows us which services are Generally Available or in Preview.\nTimeline This screen shows us the timeline for when we can expect to see the feature rolled out to the particular region show for the service.\nRegions This screen allows us to compare services by region, and will shows us the timeline and the status for the service you click on.\nPresence Presence shows us how many regions the service you click on is present within and can show future availability stats for some services.\nSolutions Solutions are where you can choose a service and then from the drop-down at the top make a choice and it will take you to the docs for the selection you make - so for example, if I select the Azure Cosmos DB service I can then choose from the solutions drop down like so: -\nStories Stories are where you can select an azure service and read customer stories on how they implemented the service and has some very interesting ideas and usages of the technology.\nFun Within the fun screen there is an azure quiz and an azure menu covering starters, main dishes, and desserts, go take a look.\nSummary In summary, this is a great site with a tonne of useful information and one to share with your team or on twitter, etc. - huge thanks to Alexey for putting this together and keeping it up to date.\n","date":"9 February 2020","externalUrl":null,"permalink":"/2020/02/09/azurecharts-com/","section":"Posts","summary":"","title":"AzureCharts.com","type":"posts"},{"content":"Microsoft Learn in my eyes is highly under rated, I want to show you why there is more to it than you have probably realised.\nLearning Paths Learning paths are a great way to explore a topic, there are currently around 1000 learning paths, so what are you waiting for, there is something for everyone in there, which means you. #alwaysbelearning\nFilter You can filter your learning by -\nProduct Roles Levels Type (Learning Paths or Modules) Bookmarks Bookmark your learning choices and come back to them, you owe it to yourself to have learning goals and to finish the learning path or module, don\u0026rsquo;t start it and leave it, become good at finishing and not good at starting.\nCollections Collections are where you can group your own collection of learning paths and modules which might relate to a specific learning goal you have. This is perfect if you are studying for an exam or want to know more about a more general topic like server-less as an example.\nAchievements If you complete a module within a learning path you earn points and badges along the way and you can see these listed under achievements which can be found under your profile and looks like so: -\nI myself have realised I haven\u0026rsquo;t been using Microsoft Learn for a while and there is a lot of great new content which I am off to check out now.\nLet me know which level your on - I\u0026rsquo;m currently on level 8.\n","date":"25 January 2020","externalUrl":null,"permalink":"/2020/01/25/microsoft-learn/","section":"Posts","summary":"","title":"Microsoft Learn","type":"posts"},{"content":"Saturday April 25th, 2020 is the date for this years Global Azure BootCamp Glasgow edition, in conjunction with the Glasgow Azure user Group.\nYou can read about last year\u0026rsquo;s event and learn about whats involved and the format for the day, were looking for 6 speakers to come to Glasgow on April 25th and give a 60 minute talk on anything Azure related.\nThe call for speakers page to submit a talk is now open\nThe page for signing up to attend will go live Monday 20/01/2010.\nWe hope to see you there!\n","date":"13 January 2020","externalUrl":null,"permalink":"/2020/01/13/global-azure-bootcamp-2020-glasgow-edition/","section":"Posts","summary":"","title":"Global Azure BootCamp 2020 - Glasgow Edition","type":"posts"},{"content":"The #azureadventcalendar was a shared idea between myself and @pixel_robots\nSome quick stats as I write this: -\n15,800 thousand YouTube views 15,000 website views from over 120 countries 1,300 hours of videos watched 1,200 subscribers\nWe set out with the idea of asking the Azure community for 25 videos / blog posts with a Christmas theme, with the idea in mind that it would give people the chance to show off their skills, learn new skills and contribute back to the community over December.\nWe asked people via twitter who would like to contribute to this idea in the middle of September to give people time to decide if they could manage to contribute in December (a 20-30 minute video isn\u0026rsquo;t easy, especially towards that time of year).\nBefore we knew it we had more than 25 filled up and it was clear that this might be a bit more popular than first thought, we increased it to 50 and before you know it we had increased it to 75. In order to avoid too many duplicate subjects we decided to cap it at 75.\n**Wow! **75 videos/blog post contributions would be pretty amazing.\nWe considered several ideas but wanted to keep it simple: -\nAnyone could contribute We could have had advertisements but kept it without as it was a community project for the community by the community and this was important to us both. I would create the website and keep that up to date daily, and chase people for content, Richard was looking after our YouTube channel and scheduling the videos to go out at midnight.\nRichard also designed the logo which I loved the second I saw it and we decided to use this as the brand and he also created video thumbnails for each video for people to use on twitter, videos and blog posts.\nNow the real reason this was successful was due to the contributors, we were both blown away by the quality of content from each contributor and the Christmas theme just made it pretty cool.\nRichard and I both had our Twitter and LinkedIn full with tweets and articles with the above logo in it, very regularly throughout the month which was super cool to see.\nSetup The website was basic and I was updating it daily with links to blog posts and using a very simple .Net Web app, and using Azure DevOps to build and deploy the web app to Azure, I also made use of staging slots to deploy the changes, check the links etc worked and then swapped the staging slot for production - super easy to do and well worth it.\nRichard had the YouTube channel setup with the logo and scheduled the videos to be released using a schedule which was pretty sweet. He also created a thumbnail for each video for the contributor to use as they saw fit.\nHighlights The highlights for me were many, but one that stands out for me personally was seeing people who had never taken part in something like this, some had never created a blog post, many had never created a video before.\nThe hard part of the project was chasing people for content, especially when it was mid December and everyone is busy!\nTo end this post I want to mention the next project which you should keep your eye on by Joe Carlyle and Thomas Thornton called the #AzureSpringCleanup - personally looking forward to see more azure community coming together and creating awesome new content.\nPlease leave any feedback you have on the #azureadventcalendar below.\n","date":"3 January 2020","externalUrl":null,"permalink":"/2020/01/03/azure-advent-calendar-wrap-up/","section":"Posts","summary":"","title":"Azure Advent Calendar wrap-up","type":"posts"},{"content":"","date":"3 January 2020","externalUrl":null,"permalink":"/tags/community/","section":"Tags","summary":"","title":"Community","type":"tags"},{"content":"I have started a GitHub repository for a place to put the following so that the community can benefit from resources I have came across from the community.\nAzure Exam Guides Azure Useful Resources Azure Policies Azure DevOps Resources I\u0026rsquo;m looking for **others **to contribute to this so that the community has a place to find helpful info - please take a look, add your study guides, useful links and more in here and help grow the useful resources we come across.\nIf you have an Azure Exam Study guide let me know and I\u0026rsquo;ll add a link to it from the Exam folder to your blog or create a quick pull request.\nIf you have any useful Azure Resources which aren\u0026rsquo;t listed then please either let me know or create a quick pull request.\nI\u0026rsquo;m gong to be adding to this over time throughout the year, I\u0026rsquo;m looking for contributors so we can grow this out to be something useful to a lot of people.\nLink to the GitHub Repository:- https://github.com/gsuttie/AzureResources\n","date":"30 December 2019","externalUrl":null,"permalink":"/2019/12/30/azure-resource-github-repository/","section":"Posts","summary":"","title":"Azure Resource GitHub Repository","type":"posts"},{"content":"","date":"30 December 2019","externalUrl":null,"permalink":"/tags/github/","section":"Tags","summary":"","title":"GitHub","type":"tags"},{"content":"","date":"30 December 2019","externalUrl":null,"permalink":"/tags/learning/","section":"Tags","summary":"","title":"Learning","type":"tags"},{"content":"","date":"27 December 2019","externalUrl":null,"permalink":"/tags/failure/","section":"Tags","summary":"","title":"Failure","type":"tags"},{"content":"I wanted to cover some of the failures I have endured during the year. It\u0026rsquo;s not something you read a lot about from people and its important to talk about failure(s). I tend to mention my success\u0026rsquo; but its also relevant to realise that there have been a number of failures in 2019.\nI sat a number of Azure exams last year and failed on more than one occasion. I learned from this that no matter how much you study and put in you wont always have a successful outcome.\nI wrote numerous blog posts which were sitting in my drafts folder for a long time which will never see the light of day.\nI recorded umpteen videos which I never released and I still have them on my laptop, which again will never see the light of day.\nI created PowerPoint presentations which yep you guessed it wont ever be used for talks.\nI started numerous books and never finished a single book, was asked to review 3 or 4 books and again didn\u0026rsquo;t get the job done.\nAt times throughout the year I spread myself too thin and was trying to do too much, end result was the above.\nEveryone has failure\u0026rsquo;s its part of becoming a better version of you.\nAs I reflect on this past 12 months its clear to me that failure is a good thing. Failure has taught me that each time I fail I learn something about myself which is key if you want to improve yourself.\n**Commitment **I have spent the last 2 years investing in myself, I commit myself to learning new skills and gain knowledge, with this comes failure, failure in my eyes means I am doing. It\u0026rsquo;s easy to say you want to do this or that but if your not actively doing something about it then it wont ever become a reality.\nI have never given up after failing an exam or throwing away a presentation or a video, I use it to motivate myself to do better then next time, I keep the content as reminders.\nThe trick for me is to have goals, I write my goals on a piece of paper and have that pinned above my computer monitors on the wall. Last year I failed in only one goal and then this year I knocked it out the park, I kept the paper there until I had achieved that goal and now its been replaced with a new set of goals.\n**Stop holding yourself back **I stopped holding myself back, I used to think I\u0026rsquo;d love to do x or do y but I never truly thought I had anything to offer. I spoke to some people at conferences who weren\u0026rsquo;t blogging but were right into tech and I suggested they should start, I wanted to say stop holding yourself back and just do it, they know they\u0026rsquo;re stuff and weren\u0026rsquo;t sure why they hadn\u0026rsquo;t been blogging.\nI watched people speak at user groups and conferences and I thought wow I\u0026rsquo;d love to do that, I did nothing about it, I was holding myself back, scared I would make a fool of myself, I might still, but I am going to be going after it and see where it takes me.\nEveryone has failures, you don\u0026rsquo;t hear about them, stop holding yourself back if that\u0026rsquo;s you, if your not failing regularly then perhaps your still in your comfort zone.\n","date":"27 December 2019","externalUrl":null,"permalink":"/2019/12/27/failures-and-comfort-zone/","section":"Posts","summary":"","title":"Failure(s) and comfort zone","type":"posts"},{"content":"","date":"27 December 2019","externalUrl":null,"permalink":"/categories/ideas/","section":"Categories","summary":"","title":"Ideas","type":"categories"},{"content":" I am looking to speak at more conferences in 2020, below is a list of the events at which I have spoken at as well as some of my upcoming speaking sessions: -\nGlasgow Azure User Group (Several) Azure Global Boot Camp Glasgow edition (Glasgow, April 21, 2017) MVP Days -** Getting Started with Azure DevOps** (30th Jan 2019) Scottish Summit - Super Charge your learning of Azure, including exams - Glasgow, February 29th, 2020) Microsoft Ignite The Tour, Zurich, Switzerland (March 4-5th 2020) Online User Group Talks\nBoston Azure User Group - Super Charge your learning of Azure, including exams - Thursday April 16th 2020 Spring Edition Evening MC2MC - GitHub Actions 101 - 28th May 2020 (Belgium Community) Northern Azure User Group Online - Supercharge your Azure learning - June 2020 Meetup North East Azure User Group - https://www.meetup.com/North-East-Azure-User-Group/events/271159433/ - Supercharge your Azure learning - June 18th, 2020. Azure Bern User Group (Switzerland) - https://www.meetup.com/de-DE/Microsoft-Azure-Zurich-User-Group/events/272592076/ - How to Become an Azure Expert - August 20, 2020 DevOps Squared Podcast - Episode #15 - DevOps on Azure with Gregor Suttie - https://www.listennotes.com/podcasts/devops-squared/episode-15-devops-on-azure-wNcIPDnaFAZ/ July 31st, 2020 ","date":"26 December 2019","externalUrl":null,"permalink":"/speaking/","section":"Azure Greg","summary":"","title":"Speaking","type":"page"},{"content":"[ninja_forms id=2]\n","date":"26 December 2019","externalUrl":null,"permalink":"/contact-me/","section":"Azure Greg","summary":"","title":"Contact Me","type":"page"},{"content":"This year has been an amazing year for me, too many good things to recall if I\u0026rsquo;m honest and I\u0026rsquo;ll keep it short, below are some of the highlights for me (in no particular order)\nInvited to meet Scott Guthrie at an ask me anything session in London Awarded MVP in Azure in August Helping run the Glasgow Azure User Group Ran the Azure Global Boot Camp, Glasgow Edition Attended my first ever Microsoft Ignite in Florida Attended my first ever Experts Live Europe in Prague Microsoft Certified: Azure Solutions Architect Expert Microsoft Certified: Azure DevOps Engineer Expert Microsoft Certified: Azure Developer Associate Microsoft Certified: Azure Security Engineer Associate Microsoft Certified: Azure Fundamentals Helped work become Gold Certified in a few more competences Blog has had over 200,000 hits this year (50 posts this year) The Azure Advent Calendar has been a **huge **success, more info on that later this month. Joined TechSnips.Io Started a YouTube channel Named in Nigel Frank International in the Top 20 Azure influencers on Twitter 3 podcast appearances Looking forward to 2020 which will bring the following :-\nIgnite the Tour London Ignite the Tour Zurich Scottish Summit (doing a talk and helping out) Azure Global Boot camp (organising \u0026amp; more on that next week) MVP Summit 2020 Ignite 2020 Hopefully lots more travelling Hopefully attending conferences Reach 5000 twitter followers Recording some training material It has been a huge amount of fun, learned more a lot about myself, visited a number of places.\nMy number one highlight might sound corny but meeting the people who make up the community has been incredible, Ignite and at Experts Live I met so many awesome people that I have chatted to on Twitter. I\u0026rsquo;ve met people I\u0026rsquo;ve looked up to and asked for advice from and the people who inspire me.\nIf you need help or have questions about anything please reach out to me on twitter or LinkedIn, always happy to help with anything I can.\nI could never thank everyone but trust me I\u0026rsquo;m thankful for meeting each and every one of you.\nThis #azureadventcalendar has been a fantastic way to end the year and soon I\u0026rsquo;ll be at Ignite the Tour London and then the Scottish Summit here in Glasgow at the end of February.\nHuge waves and thanks to everyone who I chatted to throughout 2019 and lets do it again next year.\nHappy Holidays! - Gregor.\n","date":"17 December 2019","externalUrl":null,"permalink":"/2019/12/17/2019-review/","section":"Posts","summary":"","title":"How I had a successful 2019","type":"posts"},{"content":"Week 1 of the Azure Advent Calendar has come and gone and we have seen some incredible content.\nContent covered includes: -\nAn Azure Poem, Azure Governance, Azure Logic Apps, Azure Service Health, Azure Container Instance, Azure Devops Pipelines, Azure NetApp Files, Azure Certification Paths, Azure AKS, Azure API Manangement, Azure Lighthouse, Azure Site Recovery, Azure Functions, Azure WebApps, Azure MFA, Azure Role Based Certification, Being Successful in Azure, Azure Migrate, Azure Key Vault, AKS monitoring with Prometheus and Terraform for Azure.\nPhew that\u0026rsquo;s a lot to learn about in just 1 week, there is a lot more to come so please subscribe to our dedicated YouTube Channel So far we have over **700 subscribers, **and there has been over 350 hours of videos watched which is absolutely awesome.\nThe Azure Advent Calendar website has been view in over 120 countries around the globe and had almost 6 thousand hits in the last 90 days.\nWe wanna take this time to thank everyone for taking part and hope that everyone is enjoying the #azureadventcalendar so far, we appreciate all of the tweets, LinkedIn coverage etc its been a blast so far, loving all the Christmas jumpers on show etc.\nThanks all from Gregor and Richard aka @Pixel_Robots\n","date":"8 December 2019","externalUrl":null,"permalink":"/2019/12/08/azure-advent-calendar-week-1-recap/","section":"Posts","summary":"","title":"Azure Advent Calendar - Week 1 recap","type":"posts"},{"content":"I attended a session at Experts Live EU 2019 which was about Azure initialization from zero to hero: on-boarding, governance \u0026amp; resources deployment and one of the subject was Azure Resource Graph.\nAzure Resource Graph is a service in Azure that is designed to extend Azure Resource Management by providing efficient and performant resource exploration with the ability to query at scale across a given set of subscriptions so that you can effectively govern your environment.\nWith Azure Resource Graph you can write queries against your Azure resource so you can gain some very insightful information into your resources., before it wasn\u0026rsquo;t possible to see all of your resources if you had more than 2000. Queries that you write can be kept private or shared, shared queries are stored within a Resource Group for other users to run.\nResource Graph Explorer allows you to open existing queries, create new queries and run them within the portal and see the results.\nAn example of a query would be like so: -\nI wont show the results for obvious reasons 👀\nThe really nice benefit I see from Azure Resource Graph is that you can save these to a dashboard and share the dashboard with members of your team/company.\nAt Experts Live EU @ExchangeGoddess shared an example dashboard which is a simple json file.\nThe beautiful thing is that the json can be exported and imported into your subscription(s), it doesn\u0026rsquo;t store subscription id\u0026rsquo;s etc as it only contains the queries. I was able to take this file and import it into a brand new dashboard and instantly see a very useful dashboard which looks like the following: -\nClicking on the charts take you to the actual query which produces the dashboard, the queries are written in a language called Kusto. You can learn more about Kusto on Pluralsight.\nYou can grab the json file which @ExchangeGoddess kindly shared from my github repo and then within dashboards insode the Azure portal simply use the upload capability to upload the json file and bingo you\u0026rsquo;ll have a nice new dashboard where you can learn about your resources and learn more from the existing Kusto queries within the dashboard you now have.\nBig thanks to @ExchangeGoddess for sharing this, enjoy!\n","date":"27 November 2019","externalUrl":null,"permalink":"/2019/11/27/azure-resource-graph-dashboards/","section":"Posts","summary":"","title":"Azure Resource Graph Dashboards","type":"posts"},{"content":"","date":"22 November 2019","externalUrl":null,"permalink":"/categories/expertsliveeu/","section":"Categories","summary":"","title":"ExpertsLiveEU","type":"categories"},{"content":"The ExpertsLiveEU 2019 conference in Prague, Czech Republic, has just finished and I am back in the hotel writing this blog post and wanted to write this before I travel back home to Scotland.\nYou can read about the 3 day conference at ExpertsLive EU.\nThe conference has about 400 attendees, with attendees from around 30 countries, the content was fantastic as were all of the speakers. There were a lot of people there who were very smart people, the caliber of speakers was very high indeed.\nI learned a lot from most of the sessions and now have a list of things I either need to start learning or ares which I need to learn more about and do a deep dive into that area further.\nThe speakers referred to being T-Shaped\nI believe I am pretty well versed in a number of areas of Azure with a breadth of topics I know a decent amount about, I plan to choose a couple of ares next year to dive deeper into.\nI love coming to conferences as you spend the day learning and asking questions, and then you socialize afterwards or during and that\u0026rsquo;s the real value for me. Making connections and networking are my favorite part and you learn so much more longer term as well.\nBeing able to speak to product owners and product managers at Microsoft has given me the most value. I speak to these types of people, make a connection, get their contact details and can ask the questions any time.\nWith Ignite 2 weeks ago, and now this conference I\u0026rsquo;ve learned the value in attending, meeting strangers, asking them about what they do, and so on and its been an absolute blast, I\u0026rsquo;m also getting less shy which can only be a good thing.\nI will definitely be back at Ignite and at ExpertsLiveEU next year all going well.\n","date":"22 November 2019","externalUrl":null,"permalink":"/2019/11/22/expertsliveeu-2019-first-time-attendee/","section":"Posts","summary":"","title":"ExpertsLiveEU 2019 - first time attendee","type":"posts"},{"content":"With this years Azure Advent Calendar I made some site improvements and also upgraded the site from .Net 2.2 to 3.0, the code built and ran locally just fine, I push it to production and boom! - sites down, **not good for a number of reasons. **\nThe take away from this is I knew better, I tried to push some changes which in hindsight could easy have broken the site and by running it locally I thought its all good, the site has no tests as its content only.\nBy upgrading the site and attempting to add in Azure Application configuration I ran into some nuget package issues which I though I had resolved.\nGet to the point of the blog post already Gregor!\nAzure has a thing called Azure Deployment Slots for Web apps and with this feature we can have the following: -\nHave 2 copies of the site running at the same time (one prod, one staging) Deploy new features to Staging ad then test (however you test) If all is good you switch slots so that the new version is now the prod version and the old prod version is switched into the staging version - if anything is borked then switch back and your back to good. That\u0026rsquo;s the short version of what deployment slots are used for, I encourage you to take a look at them and I have this now setup for the azure advent calendar and wont be so careless next time.\n","date":"19 November 2019","externalUrl":null,"permalink":"/2019/11/19/azure-web-app-staging-slots/","section":"Posts","summary":"","title":"Azure Web App Staging Slots","type":"posts"},{"content":"I have just returned from Microsoft Ignite 2019 which was held in Orlando Florida, here is my take on the experience of attending the event.\nI was staying at the Best Western Orlando Convention Centre hotel which was pretty handy for the event and meant I could walk to the venue each day (I\u0026rsquo;d recommend staying close by if you\u0026rsquo;re planning to attend next year)\nFriday I started by arriving on the Friday (which was great) I managed to get used to the location and find my way around where I was staying and figure out where everything was which I would also recommend. I managed to meet up with other people who were attending and we went out for food and drinks that night which meant chatting with a group from Germany who were mostly MVP\u0026rsquo;s, a great start to the my time in Florida.\n**Saturday **I did more of the same on Saturday and spent a good deal of the day around the Hyatt Regency hotel which is a great area to hang out as this is where a number of the Microsoft speakers were staying. We had drinks and food at the hotel bar and again I spent a good deal of time meeting attendee\u0026rsquo;s from all around the globe.\nSunday Sunday allows you to attend a Pre-day which is where you can attend a day of learning the day before the conference starts, this is normally $500 but you get this free as an MVP. This was awesome as I managed to meet a good number of Azure MVP\u0026rsquo;s from around the world and chat to them during the day.** **\nMon-Friday was going to some sessions hanging out in the Hub and the Microsoft booth\u0026rsquo;s where I asked a lot of questions with product team members (which is invaluable).\nThursday night we got to go Universal Studios and Islands of Adventure from 7:30pm until midnight and this is for the Ignite celebration, the parks are open for attendees only and there is free food and drink and all of the rides are free which was incredible.\nOverall the experience of attending Ignite was just wow, the size of the venue, the number of attendees and number of sessions was hard to comprehend. I will be going next year without a doubt and highly recommend it to anyone. The networking opportunities are endless, meeting both Microsoft staff and people I know from twitter etc.\nTips for next year: -\nArrive early and acclimatise Don\u0026rsquo;t over do it, there is a lot of walking and the fear of missing out will always be there. The parties at night are amazing so pace yourself throughout each day. If your an MVP try and be there on the Sunday. Attend sessions if you have questions, otherwise watch them at the HUB or when you get home. Be prepared for not a lot of sleep, you can sleep when you get home. Enjoy the Microsoft store and endless freebies from the vendors. Attend - honestly its off the charts good fun and the opportunities to learn and meet people are endless. If you can\u0026rsquo;t afford to attend or don\u0026rsquo;t fancy travelling to Florida then try to attend an Ignite Tour venue near you (they have already began and more coming soon)\n","date":"19 November 2019","externalUrl":null,"permalink":"/2019/11/19/microsoft-ignite-2019-my-review/","section":"Posts","summary":"","title":"Microsoft Ignite 2019 - My Review","type":"posts"},{"content":"Microsoft has recently released a new set of security tooling for Azure Devops which is called Microsoft Security Code Analysis. The Microsoft Security Code Analysis Extension is a collection of tasks for the Azure DevOps Services platform. These tasks automatically download and run secure development tools in the build pipeline. In this post I\u0026rsquo;ll cover BinSkim and how to use it.\nBinSkim BinSkim is a Portable Executable (PE) light-weight scanner that validates compiler/linker settings and other security-relevant binary characteristics. The build task provides a command line wrapper around the BinSkim.exe application. BinSkim is an open source tool.\nSetup:\nOpen your team project from your Azure DevOps Account. Navigate to the Build tab under Build and Release Select the Build Definition into which you wish to add the BinSkim build task. New - Click New and follow the steps detailed to create a new Build Definition. Edit - Select the Build Definition. On the subsequent page, click Edit to begin editing the Build Definition. Click + to navigate to the Add Tasks pane. Find the BinSkim build task either from the list or using the search box and then click Add. The BinSkim build task should now be a part of the Build Definition. Add it after the publishing steps for your build artifacts. Customizing the BinSkim Build Task:\nClick the **BinSkim **task to see the different options available within. Set the build configuration to Debug to produce *.pdb debug files. They are used by BinSkim to map issues found in the output binary back to source code. Choose Type = Basic \u0026amp; Function = Analyze to avoid researching and creating your own commandline. Target - One or more specifiers to a file, directory, or filter pattern that resolves to one or more binaries to analyze. Multiple targets should be separated by a semicolon(;).\nCan be a single file or contain wildcards.\nDirectories should always end with *\nExamples:\n.dll;.exe\n$(BUILD_STAGINGDIRECTORY)*\n$(BUILD_STAGINGDIRECTORY)*.dll;$(BUILD_STAGINGDIRECTORY)*.exe;\nMake sure the first argument to BinSkim.exe is the verb analyze using full paths, or paths relative to the source directory. For Command Line input, multiple targets should be separated by a space.\nYou can omit the /o or /output file parameter; it will be added for you or replaced.\nStandard Command Line Configuration\nanalyze $(Build.StagingDirectory)* \u0026ndash;recurse \u0026ndash;verbose\nanalyze *.dll *.exe \u0026ndash;recurse \u0026ndash;verbose\nNote that the trailing * is very important when specifying a directory or directories for the target.\n","date":"18 November 2019","externalUrl":null,"permalink":"/2019/11/18/microsoft-security-code-analysis-for-azure-devops-part-3-binskim/","section":"Posts","summary":"","title":"Microsoft Security Code Analysis for Azure Devops - Part 3 BinSkim","type":"posts"},{"content":"Microsoft has recently released a new set of security tooling for Azure Devops which is called Microsoft Security Code Analysis. The Microsoft Security Code Analysis Extension is a collection of tasks for the Azure DevOps Services platform. These tasks automatically download and run secure development tools in the build pipeline. In this post I\u0026rsquo;ll show you how to get the new extension and how to go about using it.\nCredential Scanner (aka CredScan) is a tool developed and maintained by Microsoft to identify credential leaks such as those in source code and configuration files. Some of the commonly found types of credentials are default passwords, SQL connection strings and Certificates with private keys. The CredScan build task is included in the Microsoft Security Code Analysis Extension. This page has the steps needed to configure \u0026amp; run the build task as part of your build definition.\nLets start by adding Cred Scan to a build for an existing project - I\u0026rsquo;ll use the AzureAdventCalendar project which I already have setup within my Azure Devops project at https://dev.azure.com.\nSetup:\nOpen your team project from your Azure DevOps Account. Navigate to the Build tab under Build and Release Select the Build Definition into which you wish to add the CredScan build task. New - Click New and follow the steps detailed to create a new Build Definition. Edit - Select the Build Definition. On the subsequent page, click Edit to begin editing the Build Definition. Click + to navigate to the Add Tasks pane. Find the CredScan build task either from the list or using the search box and then click Add. The Run CredScan build task should now be a part of the Build Definition. Customizing the CredScan Build Task: Available options include: -\nOutput Format – TSV/ CSV/ SARIF/ PREfast Tool Version (Recommended: Latest) Scan Folder – The folder in your repository to scan Searchers File Type - Options to locate the searchers file used for scanning. Suppressions File – A JSON file can be used for suppressing issues in the output log (more details in the Resources section). (New) Verbose Output - self explanatory Batch Size - The number of concurrent threads used to run Credential Scanners in parallel. Defaults to 20 (Value must be in the range of 1 to 2147483647). (New) Match Timeout - The amount of time to spend attempting a searcher match before abandoning the check. (New) File Scan Read Buffer Size - Buffer size while reading content in bytes. (Defaults to 524288) (New) Maximum File Scan Read Bytes - Maximum number of bytes to read from a given file during content analysis. (Defaults to 104857600) Run this task (under Control Options) - Specifies when the task should run. Choose \u0026ldquo;Custom conditions\u0026rdquo; to specify more complex conditions. *Version - Build task version within Azure DevOps. Not frequently used.\nResources\n**Local suppressions scenarios and examples **\nTwo of the most common suppression scenarios are detailed below: -\n**Suppress all occurrences of a given secret within the specified path ** The hash key of the secret from the CredScan output file is required as shown in the sample below { \u0026ldquo;tool\u0026rdquo;: \u0026ldquo;Credential Scanner\u0026rdquo;, \u0026ldquo;suppressions\u0026rdquo;: [ { \u0026ldquo;hash\u0026rdquo;: \u0026ldquo;CLgYxl2FcQE8XZgha9/UbKLTkJkUh3Vakkxh2CAdhtY=\u0026rdquo;, \u0026ldquo;_justification\u0026rdquo;: \u0026ldquo;Secret used by MSDN sample, it is fake.\u0026rdquo; } ] }\nWarning: The hash key is generated by a portion of the matching value or file content. Any source code revision could change the hash key and disable the suppression rule.\nTo suppress all secrets in a specified file (or to suppress the secrets file itself) The file expression could be a file name or any postfix portion of the full file path/name. Wildcards are not supported. Example File to be suppressed: [InputPath]\\src\\JS\\lib\\angular.js Valid Suppression Rules:[InputPath]\\src\\JS\\lib\\angular.js \u0026ndash; suppress the file in the specified path \\src\\JS\\lib\\angular.js \\JS\\lib\\angular.js \\lib\\angular.js angular.js \u0026ndash; suppress any file with the same name { \u0026ldquo;tool\u0026rdquo;: \u0026ldquo;Credential Scanner\u0026rdquo;, \u0026ldquo;suppressions\u0026rdquo;: [ { \u0026ldquo;file\u0026rdquo;: \u0026ldquo;\\files\\AdditonalSearcher.xml\u0026rdquo;, \u0026ldquo;_justification\u0026rdquo;: \u0026ldquo;Additional CredScan searcher specific to my team\u0026rdquo; }, { \u0026ldquo;file\u0026rdquo;: \u0026ldquo;\\files\\unittest.pfx\u0026rdquo;, \u0026ldquo;_justification\u0026rdquo;: \u0026ldquo;Legitimate UT certificate file with private key\u0026rdquo; } ] }\nWarning: All future secrets added to the file will also get suppressed automatically.\n**Secrets management guidelines **While detecting hard coded secrets in a timely manner and mitigating the risks is helpful, it is even better if one could prevent secrets from getting checked in altogether. In this regard, Microsoft has released CredScan Code Analyzer as part of Microsoft DevLabs extension for Visual Studio. While in early preview, it provides developers an inline experience for detecting potential secrets in their code, giving them the opportunity to fix those issues in real-time. For more information, please refer to this blog on Managing Secrets Securely in the Cloud. Below are few additional resources to help you manage secrets and access sensitive information from within your applications in a secure manner:\nAzure Key Vault Azure Active Directory Azure AD Managed Service Identity Managed Service Identity (MSI) for Azure resources Azure Managed Service Identity AppAuthentication Library **Extending search capabilities **CredScan relies on a set of content searchers commonly defined in the buildsearchers.xml file. The file contains an array of XML serialized objects that represent a ContentSearcher object. The program is distributed with a set of searchers that have been well tested but it does allow you to implement your own custom searchers too.\nA content searcher is defined as follows:\nName – The descriptive searcher name to be used in CredScan output file. It is recommended to use camel case naming convention for searcher names.\nRuleId – The stable opaque id of the searcher.\nCredScan default searchers are assigned with RuleIds like CSCAN0010, CSCAN0020, CSCAN0030, etc. The last digit is reserved for potential searcher regex group merging or division.\nRuleId for customized searchers should have its own namespace in the format of: CSCAN-{Namespace}0010, CSCAN-{Namespace}0020, CSCAN-{Namespace}0030, etc.\nThe fully qualified searcher name is the combination of the RuleId and the searcher name, e.g. CSCAN0010.KeyStoreFiles, CSCAN0020.Base64EncodedCertificate, etc.\nResourceMatchPattern – Regex of file extensions to check against searcher ContentSearchPatterns – Array of strings containing Regex statements to match. If no search patterns are defined, all files matching the resource match pattern will be returned. ContentSearchFilters – Array of strings containing Regex statements to filter searcher specific false positives. Matchdetails – A descriptive message and/or mitigation instructions to be added for each match of the searcher. Recommendation – Provides the suggestions field content for a match using PREfast report format. Severity – An integer to reflect the severity of the issue (Highest = 1). Join me in part 3 where I cover off BinSkim\n","date":"18 November 2019","externalUrl":null,"permalink":"/2019/11/18/microsoft-security-code-analysis-for-azure-devops-part-2-credential-scanner/","section":"Posts","summary":"","title":"Microsoft Security Code Analysis for Azure Devops - Part 2 Credential Scanner","type":"posts"},{"content":"Microsoft has recently released a new set of security tooling for Azure Devops which is called Microsoft Security Code Analysis. The Microsoft Security Code Analysis Extension is a collection of tasks for the Azure DevOps Services platform. These tasks automatically download and run secure development tools in the build pipeline. In this post I\u0026rsquo;ll show you what they cover below, in part 2, I\u0026rsquo;ll show you them in action in Azure Devops.\nCredential Scanner Passwords and other secrets stored in source code is currently a big problem. Credential Scanner is a static analysis tool that detects credentials, secrets, certificates, and other sensitive content in your source code and your build output.\nMore Information\nBinSkim BinSkim is a Portable Executable (PE) light-weight scanner that validates compiler/linker settings and other security-relevant binary characteristics. The build task provides a command line wrapper around the BinSkim.exe application. BinSkim is an open source tool.\nMore Information (BinSkim on GitHub)\nTSLint TSLint is an extensible static analysis tool that checks TypeScript code for readability, maintainability, and functionality errors. It is widely supported across modern editors and build systems and can be customized with your own lint rules, configurations, and formatters. TSLint is an open source tool.\nMore Information on Github\nRoslyn Analyzers Microsoft\u0026rsquo;s compiler-integrated static analysis tool for analyzing managed code (C# and VB).\nMore Information (Roslyn Analyzers on docs.microsoft.com)\nMicrosoft Security Risk Detection Security Risk Detection is Microsoft\u0026rsquo;s unique cloud-based fuzz testing service for identifying exploitable security bugs in software.\nMore Information (MSRD on docs.microsoft.com)\nAnti-Malware Scanner The Anti-Malware Scanner build task is now included in the Microsoft Security Code Analysis Extension. It must be run on a build agent which has Windows Defender already installed.\nMore Information\nAnalysis and Post-Processing of Results # The Microsoft Security Code Analysis extension has three build tasks to help you process and analyze the results found by the security tools tasks.\nThe Publish Security Analysis Logs build task preserves logs files from the build for investgiation and follow-up. The Security Report build task collects all issues reported by all tools and adds them to a single summary report file. The Post-Analysis build task allows customers to inject build breaks and fail the build should an anlysis tool report security issues found in the code that was scanned. Publish Security Analysis Logs The Publish Security Analysis Logs build task preserves the log files of the security tools run during the build. They can be published to the Azure DevOps Server artifacts (as a zip file), or copies to an accessible file share from your private build agent.\nMore Information\nSecurity Report The Security Report build task parses the log files created by the security tools run during the build and creates a summary report file with all issues found by the analysis tools. The task can be configured to report findings for specific tools or for all tools, and you can also choose what level of issues (errors or errors and warnings) should be reported.\nMore Information\nPost-Analysis (Build Break) The Post-analysis build task enables the customer to inject a build break and fail the build in case one ore more analysis tools reports findings or issues in the code. Individual build tasks will succeed, by design, as long as the tool completes successfully, whether there are findings or not. This is so that the build can run to completion allowing all tools to run. To fail the build based on security issues found by one of the tools run in the build, then you can add and configure this build task. The task can be configured to break the build for issues found by specific tools or for all tools, and also based on the severity of issues found (errors or errors and warnings).\nMore Information\n","date":"18 November 2019","externalUrl":null,"permalink":"/2019/11/18/microsoft-security-code-analysis-for-azure-devops-part-1/","section":"Posts","summary":"","title":"Microsoft Security Code Analysis for Azure Devops - Part 1","type":"posts"},{"content":" Recently Microsoft open sourced the Azure Devops Generator and recently its had some new content added which I wanted to highlight. You can use this tool to learn all sorts of Azure Devops tips and tricks from building code, seeing how it hangs together, deploying and even checking your code for vulnerabilities with arm templates and GitHub resources etc.\nI can\u0026rsquo;t stress how useful this resource has been for me to spinning up test Azure Devops Projects for blog posts, testing security add-ons, etc. (more blogs to follow very soon). Please play with this and learn, the demo generator has a lot more in it than the lat time I checked and was pleasantly surprised, its an awesome tool.\nThe following is a quick tour of what is there at present: -\n**General Tab ** The general tab is for creating projects in Azure DevOps from existing project templates, this will give you full source code, build and release pipelines, wikis, example kanban boards with issues etc and more Note: There are different types of project if you scroll down the list.\n**Devops Labs Tab **On this tab we have more sample projects, but this time they cover the concepts of things like using Terraform, Ansible, Docker, Azure Key Vault and more, if you want to learn more about these then here is a great way to give them a spin.\nMicrosoft Learn Tab Using Microsoft Learn we can learn how to do things like: -\nCreate a build pipeline with Azure Pipelines Scan code for vulnerabilities in Azure Pipelines Manage database changes in Azure Pipelines Run non-functional tests in Azure Pipelines **Microsoft Cloud Adoption ****Framework Tab **\nThe Cloud Adoption Plan template creates a backlog for managing cloud adoption efforts based on the guidance in the Microsoft Cloud Adoption Framework.\n**Private Tab **Azure DevOps Demo Generator enables users to create their own templates using existing projects and provision new projects using extracted template. The capacity to have custom templates can be helpful in many situations, such as constructing custom training content, providing only certain artifacts, etc.\nYou can even create a template from an existing project you have within Azure DevOps by selecting \u0026lsquo;Create New Template\u0026rsquo; - this is super nice, I\u0026rsquo;ll leave you to explore this further.\nEnjoy!\n","date":"14 November 2019","externalUrl":null,"permalink":"/2019/11/14/azure-devops-generator-new-content/","section":"Posts","summary":"","title":"Azure DevOps Generator - New Content","type":"posts"},{"content":"The Azure Advent Calendar kicks off on December 1st through to December 25th this year.\nFor people taking part (entry is now closed - apologies) we have setup a YouTube Channel to host your entries on your behalf, we will send you back the YouTube link once we have uploaded and scheduled the video.\nFor participants, please send us the video via a file share such as OneDrive etc. If you do not have one message @pixel_robots and he will send you a link where you can send us your video.\nOn the day of your entry please publish your blog post live to the world and just add a link back to the website which is https://azureadventcalendar.com/\nOn each individual day we will tweet out the content for each of the 3 entries and use the hashtag #azureadventcalendar\nIf your needing to add any artwork then please use the following image: - Any questions please reach out to @Gregor_Suttie or @Pixel_Robots via twitter.\n","date":"13 November 2019","externalUrl":null,"permalink":"/2019/11/13/azure-advent-calendar-information-for-people-taking-part/","section":"Posts","summary":"","title":"Azure Advent Calendar Participant Information","type":"posts"},{"content":"I was thrilled to learn that I’ve been included on Nigel Frank International’s list of the 20 best Microsoft Azure influencer\u0026rsquo;s on Twitter.\nThe line-up was revealed earlier this week, and highlighted a broad cross-section of people from around the world who’ve made a name in the Azure sphere in one way or another.\nIncluded are a host of Microsoft MVPs and personnel, from the firm’s CTO Mark Russinovich and Regional Director Carsten Rachfahl to prolific bloggers, speakers and independent voices in the Azure community, such as Jennelle Crothers and Joanne Klein.\nI’m delighted to be included alongside such esteemed professionals, and huge congratulations to everyone who made the list.\nTo read the full article, follow this link: https://www.nigelfrank.com/blog/top-20-microsoft-azure-influencers-on-twitter/\n","date":"17 October 2019","externalUrl":null,"permalink":"/2019/10/17/top-20-azure-influencers/","section":"Posts","summary":"","title":"Top 20 Azure Influencer's","type":"posts"},{"content":"This is my study plan for October for the Azure AZ-500 exam\nI\u0026rsquo;ll be using the EDX course pretty much on its own, did this for the AZ-400 Azure Devops exam and we will see how that goes.\nExam link https://www.microsoft.com/en-us/learning/exam-az-500.aspx\nQuestions: - https://www.whizlabs.com/learn/course/microsoft-azure-az-500/\nCourses: -\nEDX - https://openedx.microsoft.com/courses/course-v1:Microsoft+AZ-500.0+2019_T2/course/\nSkylines Academy - https://courses.skylinesacademy.com/p/az-500\nWeek 1 - Manage identity and access (20-25%) - Studied for it first week in October. Week 2 - Implement platform protection (35-40%) - Studied for it second week in October. Week 3 - Manage security operations (15-20%) Week 4 - Secure data and applications (30-35%)\nSit the exam\nWeek 1 - At the end of week 1 I have went through the entire section on https://openedx.microsoft.com/courses/course-v1:Microsoft+AZ-500.0+2019_T2/course/ for the Manage and Identity Access section.\n","date":"30 September 2019","externalUrl":null,"permalink":"/2019/09/30/azure-security-exam-az-500-study-plan/","section":"Posts","summary":"","title":"Azure Security Exam - AZ-500 Study plan","type":"posts"},{"content":"","date":"30 September 2019","externalUrl":null,"permalink":"/categories/api-management/","section":"Categories","summary":"","title":"API Management","type":"categories"},{"content":"I decided to make September a month of Azure Security learning for myself, the following is a list of existing articles and also new security articles which I have written: -\nAzure Policies - Learn what they are and why they are super useful and super easy to setup. Azure Managed Service Identity - Managed Service Identity allows you to securely access your Azure resources and avoid storing credentials in your code. Azure Role-Based Access Control - Role-based access control (RBAC) is a system that provides fine-grained access management of Azure resources. Azure KeyVault - The Azure KeyVault Service is where you store certificate keys, passwords and more instead of having them stored within your application. Azure Devops Open Source Scan your code - Scan your code for open source vulnerabilities and learn whats out of date within your project and also what vulnerabilities those versions may contain. Azure Devops – Secure DevOps Kit for Azure (AzSK) - The \u0026ldquo;Secure DevOps Kit for Azure\u0026rdquo; is a collection of scripts, tools, extensions, automation\u0026rsquo;s, etc. that caters to the end to end Azure subscription and resource security needs for dev ops teams using extensive automation and smoothly integrating security into native dev ops workflows helping accomplish secure dev ops. Intro to Azure Security - \u0026ldquo;Introduction to Azure Security\u0026rdquo;, is written to provide a comprehensive look at the security available with Microsoft Azure. Azure security documentation - everything you wanted to know about security within Azure. [Azure Api Management using Okta to secure using OAuth 2.0](http://Azure Api Management using Okta to secure using OAuth 2.0) - use Okta to secure your Api\u0026rsquo;s within Azure API Management Enjoy!\n","date":"30 September 2019","externalUrl":null,"permalink":"/2019/09/30/azure-security-articles-in-september/","section":"Posts","summary":"","title":"Azure Security articles in September","type":"posts"},{"content":" This blog post will cover how to move an existing or new api into Azure API Management and then secure it using Okta.\nOkta - \u0026ldquo;The Okta Identity Cloud provides secure identity management with Single Sign-On, Multi-factor Authentication, Lifecycle Management (Provisioning), and more\u0026rdquo;.\nI had access to a development tenant within Okta which looks something like this:-\nI created a new application and called it \u0026lsquo;Azure API Management\u0026rsquo; and chose Web as the platform and OpenID Connect as the sign on Method like so: -\nSo now we have filled this out we can go back and edit it and see the screen which shows us important details including Client ID, Secret and **Login redirect URI\u0026rsquo;s, **all of which are important details in order to get this working.\nAzure API Management\nWithin Azure, create a new instance of Azure API Management and once this has been created go down on the left hand menu and under Security select OAuth 2.0 and then select Add, I gave it the name Okta.\nThe client registration url is important here, you can find yours within your new Application within Okta, under the SignOn tab, look for the section that says OpenID Connect ID Token.\nThe other details which are very important are as follows (in red)\nand further down that screen where you see the ClientID and Client Secret: -\nThat\u0026rsquo;s it for Azure, so let\u0026rsquo;s switch back to Okta.\nNow we need to check the Sign On tab and take a note of some important settings\nAt this stage we haven\u0026rsquo;t added any API\u0026rsquo;s to Azure API management, so let\u0026rsquo;s do that by following this excellent example: - https://docs.microsoft.com/en-us/azure/api-management/import-and-publish\nOnce you have imported an api you can test it a number of ways including using tools like postman, but you can also use the API Management developer portal which you can launch from your Azure API Management Instance back in Azure seen in the link below: -\nNow that we have the Developer Portal open, select API\u0026rsquo;s from the header and then click on the API you imported in a previous step.\nClick the Try it Button\nSo to check things are talking to Okta to try to get a token, we need to change the drop down under the Authorization section and change it from No auth to Authorization code. This will attempt to go off to Okta and you should see a Login prompt to Okta.\nOnce you enter details and click Sign in if all is setup correctly you\u0026rsquo;ll know see something like this:-\nNow we have a bit saying when the access token will expire and also at the bottom it shows lots of **** for where the access token is added but hidden.\nOther things of note\nI had to create/edit an assigment (user) within Okta because I was setup with a username - so under assignments within your Application make sure users have a username setup.\nNote The important part here is that you can access api\u0026rsquo;s in API management and by default they\u0026rsquo;ll always just work, the trick is to make them request an Okta token. In bound policies are the magic th\nLastly we need to add whats called an in-bound policy to check the token is valid - otherwise the calls will always succeed with or without using Okta.\nTo add an in-bound policy go to your Azure API instance within Azure, then the developer portal and select your api and then select All operations (or the api call you wish to secure) and then select Inbound processing like so:-\nHere we have several options for the inbound policy and in this example I chose validate JWT and filled it out as below: -\nYou can read more here on API management policies.\nAnd that is how you go about integrating Okta with Azure API Management.\nFeel free to get in touch if you have any questions.\n","date":"25 September 2019","externalUrl":null,"permalink":"/2019/09/25/azure-api-management-using-okta-to-secure-using-oauth-2-0/","section":"Posts","summary":"","title":"Azure Api Management using Okta to secure using OAuth 2.0","type":"posts"},{"content":"In December, myself and Richard Hooper (aka @pixel_robots) will be hosting the 2019 Azure Advent Calendar.\nThe idea is that every day in December a member of the Azure community will have the chance to showcase their Azure knowledge by recording a video of 20-30 minutes in length and having it listed on the website, on the day that they have reserved a slot.\nHere are the Azure Advent Calendar rules:\nReserve a slot by contacting @Pixel_Robots or @Gregor_suttie on Twitter (with hash tag #azureadventcalendar). Record a 20-30 minute video with an Azure topic Prepare a blog post (in English) Add a link in your blog post that links back to azureadventcalendar.com, so that your readers may find the entire azure advent calendar. Publish your blog post on the specified date. Your post must be related to Azure in some way, but otherwise the content is completely up to you. Share your blog post on Twitter with hashtags #azurefamily and #azureadventcalendar Any further questions contact @Pixel_Robots or @Gregor_suttie on Twitter (with hash tag #azureadventcalendar). Check out the faq\u0026rsquo;s page Azure Advent Calendar Faq\u0026rsquo;s Page. Bonus points if its got something with a Christmas theme. Share your post on Twitter with hashtags #azurefamily and #azureadventcalendar\nPlease spread the word and if it fills up we can open up more slots.\nThank you from Richard and Gregor.\n","date":"16 September 2019","externalUrl":null,"permalink":"/2019/09/16/introducing-the-2019-azure-advent-calendar/","section":"Posts","summary":"","title":"Introducing the 2019 Azure Advent Calendar","type":"posts"},{"content":" The following, is how I go about preparing for an Azure exam which I want to study for. Hopefully this will give you an idea into how I prepare for any Azure exam.\nLets use the AZ-500 Azure Security exam as an example since this is what I will be studying for going forward.\n**Step 1 **Locate the actual Microsoft exam page which contains all the info on the actual exam: -\nhttps://www.microsoft.com/en-us/learning/exam-az-500.aspx\nI start by reading through this carefully, checking this page regularly whilst studying for it so that nothing has changed, as this can happen so remember to check back often.\nStep 2 I then make a OneNote page of all the Skills being Measured like so:-\nManage identity and access (20-25%) Implement platform protection** (35-40%)** Manage security operations (15-20%) Secure data and applications (30-35%) This exam looks to be well spread out across all 4 areas. SO now I will take each skill being measured and then copy this into my OneNote page.\n**Step 3 Now I will go and find links on docs.microsoft.com for each of the skills being measured. ** Tip:- Some people may already have done this so google for AZ-500 exam study guides and use them if you prefer doing that. my twitter friends https://twitter.com/Pixel_Robots and https://twitter.com/tamstar1234 both have excellent study guides on a number of exams.\n**Step 4 **I search for online training on Edx, Udemy, Pluralsight etc and read the reviews, of late I have solely used Edx, as those courses are specifically written with the exam skills being measured in mind (straight to the good stuff). If I want a more rounded course I\u0026rsquo;ll also check out Udemy and Pluralsight etc.\n**Step 5 **I take notes as I go and pop the main themes and big picture content into my OneNote page for brushing up just before my exam.\n**Step 6 **I have a calendar above my monitor at home and I plan out the end goal for each section with a rough idea of when I hope to have the section completed by.\n**Step 7 **Finish off the course and then I look for practice exams, I\u0026rsquo;ve used Whizlabs for the AZ-400 which was great, I\u0026rsquo;ve used Udemy for the Az-100, 200 and 300 exams. Anything I get wrong or just don\u0026rsquo;t understand I\u0026rsquo;ll review and try to find other resources, maybe Microsoft Learn or other resources.\n**Step 8 **Once I am getting 80% or above in the practice tests I book the exam soon after it and take it.\nI have done this on the last 4 or 5 exams I\u0026rsquo;ve sat and it works for me, it might work for you it might not.\n**Notes **I spend 2 hours a night studying for the exam 5 or 6 nights a week, it took a lot of dedication and hard work, not everyone has that time, I made time, I stopped doing some stuff as I wanted to learn, I get it, its not for all. I am happy to help, give advice to anyone looking for it with the exams, good luck with sitting your exam and hopefully someone find this useful.\n","date":"2 September 2019","externalUrl":null,"permalink":"/2019/09/02/azure-exam-study-guide/","section":"Posts","summary":"","title":"Azure Exam Study Guide","type":"posts"},{"content":" 18 months ago I decided to learn Azure, it was about time I learned some cloud skills (Azure for me). The following is a quick run through of my journey to where I am now, I\u0026rsquo;m really just getting started but in reflection happy with where I am heading, always to remember to invest in yourself.\nI work full-time at Sword IT in Glasgow, Scotland and have had some hands on time with Azure through work, couple of projects have helped me learn. I\u0026rsquo;ve managed to help our company get more in the way of Gold certifications this year which has been pretty cool, that means we get more benefits as a company, something I am proud of.\nWhen trying to start learning Azure, its easy to get lost in the enormity of the platform, being a dev, I decided to take a look around and formulate a plan for learning Azure. It soon became clear that the best for way me to learn something new is to work towards a goal, so my first goal was to sit and hopefully pass an Azure exam. Goals are important for me as it means I have a plan and can work towards achieving something.\nRecently I have had a number of people reach out to me asking how I went about it, what tips can I give them and how did I go about learning Azure and passing exams etc.\nWhich exam would I start with, and which exam should you start with? - well that depends on your experience and background, its not the same for everyone but here are my thoughts and how I went about it.\nI have a blog title Azure Exam Study Guide which describes my method for studying for Azure exams.\nI looked for resources to start learning Azure and read a fair bit to get me started, not too long after that I saw a blog post announcing the AZ-100 beta exam, which was only going to cost me £27 ,the problem was if I recall correctly, I had 2 weeks before the beta closed to sit the exam, it may have been a month but it wasn\u0026rsquo;t long. I created a OneNote page with all of the links and notes I took whilst I went about my study, for this exam I set a learning goal of 2 hours per night studying. I found some very handy Udemy courses from Scott Duffy and went through the entire course end to end and booked the exam. I sat my very first Azure exam (actually my first Microsoft exam since the days of the MCSD exams) so it had been a while.\nI failed the exam with a score of 671 out of 1000 (passing score was 700), for me this just whet my appetite and if you know me learning is my thing. Six days later I sat the AZ-101 beta exam and again failed with 655 out of 100 (passing score was 700). Taken 2 exams and failed them both, bummer you might say, nope, I had learned a serious amount from where I had came from and was loving learning all about Azure. Read more about\nAt this point the burning desire to learn was there, nothing was gonna stop me from passing my first Azure exam, I kept studying even though I knew these 2 exams weren\u0026rsquo;t really my cup of tea, I didn\u0026rsquo;t have much hands on experience of the content and I struggled with Azure Networking at the time.\nFast forward 2 months and the Azure Architect Beta exams (AZ-300 and AZ-301) were announced and I thought lets give them a go, I had been studying relentlessly for 2 hours a night every single night, when I say I didn\u0026rsquo;t even watch television I really didn\u0026rsquo;t watch any at all, I wanted to pass the Architect exams. I sat both, failed the AZ-300 and passed the AZ-301, I actually thought that I would pass AZ-300 and fail AZ-301, but who cares I had passed an Azure Architect exam (which does cover a lot) my studying was paying off, I had spent a lot of time doing hands on labs, finding the best resources, it was sinking in now, where previously in the other 2 exams I was still unsure to an extent.\nLet me say one thing, the feeling of passing your exam is worth all of the hard work, I was super delighted and just wanted to keep going.\nCrazy as this sounds I sat the 2 Developer beta exams 3 and 4 days later, I have a dev background, I had been using Azure on a project at work building a distributed system with these tools, I sat both exams and passed them both, I was now a certified Azure Developer, badge and all.\nNot long after that I sat the Azure Devops exam AZ-400, Devops was something I had done in a lot of previous jobs and I had a lot of experience with numerous tools. I sat the Azure Devops beta exam and failed with 685 out of 1000 (passing score was 700), man that hurt! - I didn\u0026rsquo;t put the effort in, I spent time studying but after sitting the exam realised what I had been studying wasn\u0026rsquo;t the right material, I got lazy basically, didn\u0026rsquo;t do my homework correctly by carefully looking at the Microsoft exam page and going over each link carefully on places like docs.microsoft.com, lesson learned. I passed the exam after taking some time off from studying, I was officially burned out from 2 hours a night for 3-4 months.\nIn the end I had sat 9 exams in just under 4 months, crazy yeah, not a great idea in retrospective but when you fail an exam the burning desire to pass and learn more, took over for me.\n**MVP **All whilst this was happening I had been nominated for the MVP award (I wrote about that here) and I\u0026rsquo;ll move onto cover what I was doing for that, I\u0026rsquo;ve covered all of this before in previous blog posts, which I will leave you to find but here\u0026rsquo;s a list of a few of the main things I was also up to whilst studying.\nPodcast appearances: RadioTFS and CloudSkills.fm Helping run the Glasgow Azure User Group Blogging Helping people who asked for help on twitter Organised the Azure Global Bootcamp Glasgow edition Recording videos for YouTube and Techsnips Technical reviewed an Azure Devops book Wrote online articles for a few different resources Product feedback within the Azure Management Insiders My advice for people looking to become an MVP is think of ways you can help the community, not just blogging, go further, do more, you\u0026rsquo;ll learn a lot, you\u0026rsquo;ll grow as a person by being uncomfortable, push yourself and you\u0026rsquo;ll be rewarded in many way\u0026rsquo;s.\nI\u0026rsquo;ve been lucky enough to been asked on podcasts, asked to do training videos, write books, I\u0026rsquo;ve met Scott Guthrie and a lot more just from being active in the community. Follow more people on twitter, honestly grow your network.\nNext up, I don\u0026rsquo;t share my goals, I have a few still to attain this year and next year is when I\u0026rsquo;ll start looking at doing more talks.\nI have a lot of people to thank for where I have gotten to but I have thanked them all personally or online as I haven\u0026rsquo;t met them yet, going to Ignite and the MVP Summit I hope to meet many more and also thank them personally.\nHard work pays off.\nYou can find all of posts on Azure here You can find all about the Azure exams here Please feel free to reach out to me on LinkedIn or Twitter, happy to mentor anyone if I can with anything I can.\n","date":"2 September 2019","externalUrl":null,"permalink":"/2019/09/02/learning-azure-becoming-an-mvp-failure-and-more/","section":"Posts","summary":"","title":"Learning Azure, becoming an MVP, failure and more","type":"posts"},{"content":" Hi folks, on the 1st of August I was lucky enough to achieve the MVP award from Microsoft Azure. A number of people have contacted me asking for some guidance and this post will cover that.\nLet me start with a bit of background, I started the MVP nomination process back last November, at that time you could self nominate and due to the sheer number of people self nominating this had to be changed to give the team who run the program a chance to review each nomination.\nNow that the process has changed, you need to be either nominated by an fellow MVP or by a current Microsoft employee.\nOnce you have been nominated you\u0026rsquo;re asked to fill out a form which is used to collate what community activities you have been involved in for the previous 12 months. If you don\u0026rsquo;t have 12 months previous contributions then personally I would wait until you have a solid 12 months.\nOk, so you\u0026rsquo;ve filled out your form and you have the contributions added, now you have to be very patient, it wont happen overnight, but your form will be reviewed within 90 days of submission, so you will hear something from the designated person who covers your part of the world.\nIf your looking for ideas of contributions then I will list a few of mine below and I\u0026rsquo;ll also say this, your already a community star if your helping people.\nHere are a list of some of the things you can do to help the community: -\nStart a blog, writing about topics people will find helpful Start a User Group or ask to get involved running an existing one Give a talk(s) at local User Groups Help organise events that help the community Share code on GitHub or elsewhere that showcase\u0026rsquo;s examples or helps people in some way Network on social media with people who you may be able to help, join forums like Microsoft Tech Community where you can ask and answer questions Create a YouTube channel or join Techsnips.io and record videos demoing your knowledge to help others You need to be active in the community, you shouldn\u0026rsquo;t be trying to become an MVP, you should want to be contributing to the community first and foremost.\nIf, like me, one of your goals is to try to help people in the community then you might be lucky enough to be nominated for the award.\nI have been an MVP now for 2 weeks and all I can say is that there a lot of benefits to being an MVP, the number one for me is access to a lot more information which means I will hopefully be able to help even more people going forward.\nTo end this blog post I would say do as much as you can, help as many people as you can and you\u0026rsquo;ll be on track, talk to existing MVP\u0026rsquo;s, find your local Community Progam Manager and I wish you all the very best.\nGet in touch in the comments below or get me on twitter if you have any specific questions.\n","date":"15 August 2019","externalUrl":null,"permalink":"/2019/08/15/microsoft-mvp-award-how-do-you-become-an-mvp/","section":"Posts","summary":"","title":"Microsoft MVP Award - How do you become an MVP?","type":"posts"},{"content":" Hi folks, earlier this month I wrote an article about Azure Cost Management for Nigel Frank International who are a global leader in Microsoft Recruitment, if you want to learn all about Azure Cost Management you can read my article on 8 tools to help optimise spending and maximise potential in the cloud\nI hope you find this article useful and as always leave feedback below.\n","date":"12 August 2019","externalUrl":null,"permalink":"/2019/08/12/azure-cost-management-8-tools-to-help-optimise-spending-and-maximise-potential-in-the-cloud/","section":"Posts","summary":"","title":"Azure Cost Management - 8 tools to help optimise spending and maximise potential in the cloud","type":"posts"},{"content":" The Azure Key Vault Service is where you store certificate keys, passwords and more instead of having them stored within your application.\nReducing the chance that application secrets can be leaked is always a good thing, don\u0026rsquo;t store things like access key\u0026rsquo;s and usernames and passwords in your application config files etc. - Azure Key Vault is where you will want to store these types of secrets.\nHere is a quick list of things you can use Azure Key Vault for:-\nCertificate Management Secret Management Key Management A good example of ways to improve existing code is say you have a connection string to SQL Server and you have hard-coded this connection string to use the username and password of an account to gain access to the data held within your SQL Database (back in the day this was fairly common), even encrypting the connection string isn\u0026rsquo;t as secure as it could be. Changing the code to store the connection string inside Azure Key Vault is one idea (there are a few available), this way you can lock down who can see the connection string, so that people wont be able to get access to the database unless they have the rights to read the connection string from Azure Key Vault (this is just a very simple example).\nOther useful things you can use Azure Key Vault for is to create and therefor control encryption keys, instead of doing this manually you can leverage Azure Key Vault functionality to do this on your behalf, and you can also provision and manage SSL Certificates which is extremely useful.\nWith Azure Key Vault you can control access to the Vault using policies. This means you decide who can do things like read, write, edit secrets and keys stored within the KeyVault.\nAzure Key Vault can be integrated with a number of services including: -\nSql Server Azure Functions Azure Web Apps and many more To read more about Azure Key Vault here is a link to the official documentation.\n","date":"15 July 2019","externalUrl":null,"permalink":"/2019/07/15/how-to-use-the-azure-keyvault-service/","section":"Posts","summary":"","title":"How to Use The Azure KeyVault Service","type":"posts"},{"content":" Azure Traffic Manager is a DNS-based traffic load balancer that enables you to distribute traffic optimally to services across global Azure regions, while providing high availability and responsiveness.\nWhat this mean is that you can distribute the traffic your web application receives across different regions throughout the world and this is a great Azure feature - other features like the Azure Load Balancer and Application Gateway cant distribute traffic across regions.\nAzure Traffic Manager has a number of routing methods and its important to know the options available and what you can use them for: -\nPriority: Use Priority when you want to use a primary service endpoint for all traffic, and provide backups in case the primary or the backup endpoints are unavailable. Weighted: Use Weighted when you want to distribute traffic across a set of endpoints, either evenly or according to weights, which you define. Performance: Use Performance when you have endpoints in different geographic locations and you want end users to use the \u0026ldquo;closest\u0026rdquo; endpoint in terms of the lowest network latency. Geographic: Use Geographic so that users are directed to specific endpoints (Azure, External, or Nested) based on which geographic location their DNS query originates from. This empowers Traffic Manager customers to enable scenarios where knowing a user’s geographic region and routing them based on that is important. Multivalue: Use MultiValue for Traffic Manager profiles that can only have IPv4/IPv6 addresses as endpoints. When a query is received for this profile, all healthy endpoints are returned. Subnet: Use Subnet traffic-routing method to map sets of end-user IP address ranges to a specific endpoint within a Traffic Manager profile. When a request is received, the endpoint returned will be the one mapped for that request’s source IP address. A good example of why Traffic Manager is super awesome, lets say you have your web app running in the North Europe region, all users get directed to this region, what would happen if this region were to go down, not good! - with Traffic Manager you could have a second region (lets say UK South for this example) which has a copy of the web application and If the first region (North Europe) were to go down then Traffic manager would move all of your traffic to the second region meaning your website stays up and running, your users stay happy and bingo, now you have a highly available web application, this is known as performing a failover, also note your now paying for both regions but you have the added reliability and high availability your users may demand.\nOn a project at work we had a requirement which was basically make the website responsive to users around the globe, one way to aid in this is to use Traffic Manager and implement the Performance routing method, we had a copy of the web application deployed to 3 or 4 regions and when users would hit the website they would be directed to their nearest region which helps with faster response times.\nYou can read the official documentation on Azure Traffic Manager for lots more information.\n","date":"15 July 2019","externalUrl":null,"permalink":"/2019/07/15/how-to-use-the-azure-traffic-manager/","section":"Posts","summary":"","title":"How to Use The Azure Traffic Manager","type":"posts"},{"content":" In this blog post I will cover Azure Managed Service Identity covering the basics for what you should know regarding this feature in Azure.\nManaged Service Identity allows you to securely access your Azure resources and avoid storing credentials in your code like to access these resources, think of things like adding access keys to storage accounts as an example, this is bad practice and you certainly don\u0026rsquo;t want to add them to your code bas to be checked into git for example.\nYou can create service identities for a number of Azure resources already and more are coming, examples of the resources you can create service identities include the following: -\nAzure Virtual Machines Azure Virtual Machine Scale Sets Azure App Service Azure Functions Azure Logic Apps Azure Service Bus Azure Event Hubs Azure API Management Azure Container Instances Azure Container Registry Tasks If you have some code that needs to access a storage account and you have added the access key to the code in order to access the storage account (please never do this its very bad practice and someone might gain access to your storage account if you do this), perhaps you\u0026rsquo;ve even moved the access key into Key Vault which is another option, well you could even go a step further and improve security even further. To do this you can take advantage of managed service identities and instead of using an access key you use a temporary access token, which is generated at run-time. This can then be used to assign role based access control for other resources.\nThe managed identity for the resource is generated within Azure AD.\nManaged Identities come in 2 forms: -\nSystem-assigned managed identity (enabled on an Azure service instance) User-assigned managed identity (Created for a stand alone Azure resource) You can learn more from the docs.\n","date":"12 July 2019","externalUrl":null,"permalink":"/2019/07/12/how-to-use-azure-managed-service-identity/","section":"Posts","summary":"","title":"How to Use Azure Managed Service Identity","type":"posts"},{"content":" When it comes to Azure Security there are several options available, in this blog post I\u0026rsquo;ll cover Role Based Access Control (RBAC for short).\nRBAC is about giving access to Azure resources at a granular level, you can give access to the Subscription all the way down to just a single resource within a subscription. This is perfect if you have the scenario where you have a lot of Azure resources and you may just want to give someone access to just a Virtual Machine or maybe just read-only access to say a storage account.\nAzure has built in Roles which you can assign to users, the most common of these roles are as follows: -\nOwner - Has full access to all resources including the right to delegate access to others. Contributor - Can create and manage all types of Azure resources but can’t grant access to others. Reader - Can view existing Azure resources. User Access Administrator - Lets you manage user access to Azure resources. You can also create your own custom roles which can be made of different access.\nRBAC works when assigned against what\u0026rsquo;s known as a Security Principal in other words a User, Group, Service Principal or a Managed Identity.\nRBAs is made of role definitions and these have action which are assigned to the role definition, an example of this would be say Billing Reader, this allows the user read access to Billing Data. The list of roles are seen below: -\nThe last thing we need to touch on is the Scope that the RBAC can be assigned, this can take the form of the following: -\nManagement Group Level Subscription Level Resource Group Level Resource Level At work we normally give people in the project Contributor access to a Resource Group or Groups and normally one, maybe two at most are Owners of the Subscription. If we wish to give some one read-only access to view resources then we make them a Reader.\nIf we are working on a project and want to give a new dev Contributor access to a Resource Group, then I would log in as an Owner and then find the subscription, chose the subscription and then select Access Control (IAM), and then Add a Role Assignment.\nYou can also setup alerts when an Owner gives some other user access to your Azure resources if required.\n","date":"12 July 2019","externalUrl":null,"permalink":"/2019/07/12/azure-role-based-access-control/","section":"Posts","summary":"","title":"How to Use Azure Role Based Access Control","type":"posts"},{"content":" Azure resource locks will at some point save your bacon, it will trust me. If you want to stop people being able to delete a development resource when they think it\u0026rsquo;s no longer being used, or more importantly on production resources so that they cannot be deleted (until the lock is deleted), then Azure locks are your friend\nAzure Resource Locks are often over looked, most people know about them but never implement them, its always a good idea to use them, so what are you waiting for?\nThey can be applied at different levels ranging from the Resource Group (think of a folder where your Azure resources reside), down the individual resources themselves.\nIf there are a few people in your organisation that have one of the roles where they have access privileges to delete resources then Azure resource locks might be something to look into further.\nTo add a Resource Lock to any resource, simply locate the resource and then click on Locks as per below\nAs you can see, there are 2 different types of resource locks: -\nRead-Only - means authorized users can read a resource, but they can\u0026rsquo;t delete or update the resource. Applying this lock is similar to restricting all authorized users to the permissions granted by the Reader role. Delete - means authorized users can still read and modify a resource, but they can\u0026rsquo;t delete the resource. So how do locks actually work?\nWhen you apply a lock at a parent scope, all resources within that scope inherit the same lock. Even resources you add later inherit the lock from the parent. The most restrictive lock in the inheritance takes precedence. Unlike role-based access control, you use management locks to apply a restriction across all users and roles.\nYou can read up more on Azure Locks from the documentation. Go add locks to your production resources just in case, better to be safe than sorry.\n","date":"29 June 2019","externalUrl":null,"permalink":"/2019/06/29/azure-resource-locks/","section":"Posts","summary":"","title":"Azure Resource Locks","type":"posts"},{"content":"","date":"16 June 2019","externalUrl":null,"permalink":"/categories/events/","section":"Categories","summary":"","title":"Events","type":"categories"},{"content":" On February 29th 2020, we are hosting a brand new, FREE event here in Scotland, UK which is called the Scottish Summit which will have several tracks running.\nWe are bringing over 60 sessions to you covering multiple tracks as per below:-\nDynamics for Customer Engagement Azure Big Data Power Platform Microsoft ERP Personal Development SharePoint Office 365 To find out more about the event you can view the website and see the list of speakers.\nI am giving a talk titled \u0026ldquo;Super charge your Azure learning\u0026rdquo; where I will cover how I have learned Azure and go over all the very best resources I have came across in the last 18 months of learning Azure. This talk will be for all levels, people getting started, people who know some Azure and want to learn a bit more, right up to Azure experts who might want to branch out their learning into new areas.\nTopics will include:-\nMy Journey Getting started learning Azure Azure Services Azure Devops Exams Top tips and best learning resources And much more I cant wait to welcome people from around the world to the Scottish Summit and hopefully you catch the world premier of my talk.\nIf you wish to attend then grab your **FREE **ticket - hope to see you there!\n","date":"16 June 2019","externalUrl":null,"permalink":"/2019/06/16/scottish-summit-2020/","section":"Posts","summary":"","title":"Scottish Summit 2020","type":"posts"},{"content":"The following is a quick and dirty list I made for the Architect exams so that I could read them quickly before the exam itself. This is mostly for the AZ-302 but good to know regardless of what exam your doing.\nBlob Storage is NOT for storing Virtual machine vhd files, blob storage is for block blobs and append blobs and not page blobs) You can use Traffic Manager to sit above 2 virtual machines and register endpoints, if one of the region goes down the other stays up. The following traffic routing methods are available in Traffic Manager:\nPriority: Select Priority when you want to use a primary service endpoint for all traffic, and provide backups in case the primary or the backup endpoints are unavailable. Weighted: Select Weighted when you want to distribute traffic across a set of endpoints, either evenly or according to weights, which you define. Performance: Select Performance when you have endpoints in different geographic locations and you want end users to use the \u0026ldquo;closest\u0026rdquo; endpoint in terms of the lowest network latency. Geographic: Select Geographic so that users are directed to specific endpoints (Azure, External, or Nested) based on which geographic location their DNS query originates from. This empowers Traffic Manager customers to enable scenarios where knowing a user’s geographic region and routing them based on that is important. Examples include complying with data sovereignty mandates, localization of content \u0026amp; user experience and measuring traffic from different regions. Multivalue: Select MultiValue for Traffic Manager profiles that can only have IPv4/IPv6 addresses as endpoints. When a query is received for this profile, all healthy endpoints are returned. Subnet: Select Subnet traffic-routing method to map sets of end-user IP address ranges to a specific endpoint within a Traffic Manager profile. When a request is received, the endpoint returned will be the one mapped for that request’s source IP address. App Service plan pricing Tiers\nThere are a few categories of pricing tiers:\nShared compute: Free and Shared, the two base tiers, runs an app on the same Azure VM as other App Service apps, including apps of other customers. These tiers allocate CPU quotas to each app that runs on the shared resources, and the resources cannot scale out. Dedicated compute: The Basic, Standard, Premium, and PremiumV2 tiers run apps on dedicated Azure VMs. Only apps in the same App Service plan share the same compute resources. The higher the tier, the more VM instances are available to you for scale-out. Isolated: This tier runs dedicated Azure VMs on dedicated Azure Virtual Networks, which provides network isolation on top of compute isolation to your apps. It provides the maximum scale-out capabilities. Consumption: This tier is only available to function apps. It scales the functions dynamically depending on workload. For more information, see Azure Functions hosting plans comparison Logic Apps\nTO enable high throughput on a Logic App you can go to workflow settings and then choose High Throughput and click ON, this allows up to 300,000 executions every 5 minutes.****\nApp Service Plans\nThe basic App Service Plan doesn\u0026rsquo;t support auto-scaling****\nCreate a Linux virtual machine with Accelerated Networking\nTo create a Windows VM with Accelerated Networking, see Create a Windows VM with Accelerated Networking. Accelerated networking enables single root I/O virtualization (SR-IOV) to a VM, greatly improving its networking performance. This high-performance path bypasses the host from the datapath, reducing latency, jitter, and CPU utilization, for use with the most demanding network workloads on supported VM types. The following picture shows communication between two VMs with and without accelerated networking\nAzure Migrate\nMigrate databases to Azure with familiar tools\nAzure Database Migration Service integrates some of the functionality of our existing tools and services. It provides customers with a comprehensive, highly available solution. The service uses the Data Migration Assistant to generate assessment reports that provide recommendations to guide you through the changes required prior to performing a migration. It\u0026rsquo;s up to you to perform any remediation required. When you\u0026rsquo;re ready to begin the migration process, Azure Database Migration Service performs all of the required steps. You can fire and forget your migration projects with peace of mind, knowing that the process takes advantage of best practices as determined by Microsoft.\nNote: Using Azure Database Migration Service to perform an online migration requires creating an instance based on the Premium pricing tier.\nTypes of storage accounts\nAzure Storage offers several types of storage accounts. Each type supports different features and has its own pricing model. Consider these differences before you create a storage account to determine the type of account that is best for your applications. The types of storage accounts are:\nGeneral-purpose v2 accounts: Basic storage account type for blobs, files, queues, and tables. Recommended for most scenarios using Azure Storage. General-purpose v1 accounts: Legacy account type for blobs, files, queues, and tables. Use general-purpose v2 accounts instead when possible. Block blob storage accounts: Blob-only storage accounts with premium performance characteristics. Recommended for scenarios with high transactions rates, using smaller objects, or requiring consistently low storage latency. FileStorage (preview) storage accounts: Files-only storage accounts with premium performance characteristics. Recommended for enterprise or high performance scale applications. Blob storage accounts: Blob-only storage accounts. Use general-purpose v2 accounts instead when possible. Azure Functions ARR affinity\nIf you create azure functions as part of the Basic app service plan, you can enable ARR Affinity which basically allows support for sticky sessions.\nAzure App Service Access Restrictions\nAccess Restrictions enable you to define a priority ordered allow/deny list that controls network access to your app. The list can include IP addresses or Azure Virtual Network subnets. When there are one or more entries, there is then an implicit \u0026ldquo;deny all\u0026rdquo; that exists at the end of the list.\n**Auto Swap Staging Slots (**Auto Swap isn\u0026rsquo;t supported in web apps on Linux.)\nVNet Peering - connecting VM\u0026rsquo;s within the same Azure Region\nGlobal VNet Peering - connecting VM\u0026rsquo;s across Azure Regions\nChoose between Azure messaging services - Event Grid, Event Hubs, and Service Bus\nComparison of services\nService Purpose Type When to use\nEvent Grid Reactive programming Event distribution (discrete) React to status changes\nEvent Hubs Big data pipeline Event streaming (series) Telemetry and distributed data streaming\nService Bus High-value enterprise messaging Message Order processing and financial transactions\nEvent Grid\nEvent Grid is an eventing backplane that enables event-driven, reactive programming. It uses a publish-subscribe model. Publishers emit events, but have no expectation about which events are handled. Subscribers decide which events they want to handle.\nEvent Grid is deeply integrated with Azure services and can be integrated with third-party services. It simplifies event consumption and lowers costs by eliminating the need for constant polling. Event Grid efficiently and reliably routes events from Azure and non-Azure resources. It distributes the events to registered subscriber endpoints. The event message has the information you need to react to changes in services and applications. Event Grid isn\u0026rsquo;t a data pipeline, and doesn\u0026rsquo;t deliver the actual object that was updated.\nEvent Grid supports dead-lettering for events that aren\u0026rsquo;t delivered to an endpoint.\nIt has the following characteristics:\ndynamically scalable low cost serverless at least once delivery Event Hubs\nAzure Event Hubs is a big data pipeline. It facilitates the capture, retention, and replay of telemetry and event stream data. The data can come from many concurrent sources. Event Hubs allows telemetry and event data to be made available to a variety of stream-processing infrastructures and analytics services. It is available either as data streams or bundled event batches. This service provides a single solution that enables rapid data retrieval for real-time processing as well as repeated replay of stored raw data. It can capture the streaming data into a file for processing and analysis.\nIt has the following characteristics:\nlow latency capable of receiving and processing millions of events per second at least once delivery Service Bus\nService Bus is intended for traditional enterprise applications. These enterprise applications require transactions, ordering, duplicate detection, and instantaneous consistency. Service Bus enables cloud-native applications to provide reliable state transition management for business processes. When handling high-value messages that cannot be lost or duplicated, use Azure Service Bus. Service Bus also facilitates highly secure communication across hybrid cloud solutions and can connect existing on-premises systems to cloud solutions.\nService Bus is a brokered messaging system. It stores messages in a \u0026ldquo;broker\u0026rdquo; (for example, a queue) until the consuming party is ready to receive the messages.\nIt has the following characteristics:\nreliable asynchronous message delivery (enterprise messaging as a service) that requires polling advanced messaging features like FIFO, batching/sessions, transactions, dead-lettering, temporal control, routing and filtering, and duplicate detection at least once delivery optional in-order delivery Notification Hubs\nHas an SLA of 99.99% on the Basic and Standard tiers\nRPO - Recovery Point Objective - The amount of data loss if a recovery needs to be done\nRTO - Recovery Time Objective - The amount of time it takes to complete a recovery or restore\nAzure Backup\nRecover Points\nApplication Consistent - Here the backup takes into consideration any pending i/o operations and memory content operations. This allows the application to start in a consistent state after recovery. File System Consistent - This provides a consistent backup of disk files. Here the application needs to maintain its own mechanism to manage its consistency. Crash Consistent - Happens when the VM Shuts down at the time of the backup. Data exists on the disk at the time of the backup, but not guarantee on the disk consistency. Azure Backup is good for retention periods of days, weeks, months and eve years.\nVirtual Machines SLA\u0026rsquo;s\nOne VM = 99.9% availability\nTwo or more VM\u0026rsquo;s in an Availability Zone = 99.99% availability\nTwo or more VM\u0026rsquo;s in an Availability Set = 99.95% availability\nAvailability Zones\nWithin 1 Region you may have 2 availability zones\nSo this can mean 2 Availability Zones each having 2 data centres.\nDeploy 2 copies of your vm, 1 to a datacentre in zone1, the other vm to the other availability zone\nAvailability Sets\nFault domains (3 by default), ie separate server racks which have separate power etc. Your vm is deployed to say all 3 fault domains and then if a fault domain goes down your still good on the other 2. Update Domains (5 by default), when your vm might need updating, this concept means that some copies can be updated so that others stay up If you add 6 vm\u0026rsquo;s to an availability set then the 6th vm would go into update domain 0 as the numbering starts at 0.\nAzure Load Balancer (works at layer 4)\nIs used to distribute traffic to virtual machines Increases fault tolerance and availability for your application Works at the network layer Uses a public Ip address in front of the Azure Load Balancer The back end pool is literally your Virtual Machines The load balancer uses a health probe which needs the protocol, port, interval and threshold set Important Notes:-\nThe load balancer cannot be used to route traffic between resources in different regions, only the same region. If you want to achieve a higher availability of 99.99% then you should use a Standard Load Balancer instead of a Basic Load Balancer, and have at least 2 healthy virtual machines in the backend pool of the load balancer. The vm\u0026rsquo;s should be assigned a standard static public IP address Application Gateway (works at layer 7)\nWeb Traffic Load Balancer Works at the application layer URL Routing - example would be /video goes to backendpool1, /images goes to backendpool2 SSL termination WAF (web application firewall)\nCentralized protection for your web applications from common exploits and vulnerabilities If you want to deploy an application gateway you need an empty subnet available for your virtual network. SLA 99.5% - 2 or more medium or large instances Azure Traffic Manager\nDNS based traffic load balancer\nCan Distribute traffic across regions\nYou can use different traffic routing methods\nPriority - choose which region you prefer\nGeographic - direct end users to specific endpoints based on geographic location\nMultivalue - all healthy endpoints are returned to the user\nIf your using Azure Site Recovery then you have to create an Azure Site Recovery Vault to store the data\nPremium Storage tier only allows storage of blobs, nothing else\nDefault NSG Rules - deny all inbound from internet, allow all outbound to the internet, to stop subnets having access out add a new NSG rule and add a service tag of internet, destination port ranges * and then Action Deny with a low priority value of say 100 so that it over rules the default NSG outbound security rules\nIf you want to get access to the Windows Graphic Device interface use Azure Batch\nWhen creating an Azure gateway the Ip Address has to be a public static ip address (sku standard)\nUsing Powershell to get an azure keyvault secret (Get-AZKeyVaultSecret -vaultname \u0026lsquo;myvaultname\u0026rsquo; -name \u0026lsquo;mysecretname\u0026rsquo; ).SecretValueText\nAzure AD Conditional access requires Premium Tier on Azure AD\nWhen you set up ASR in another region and point it to some VMs, it installs the Azure Site Recovery extension called Mobility Service in the source VMs\nAzure Site Recovery is for replicating Virtual or Physical Machines from various sources. It does NOT support Azure App Services. But it does support Hyper-V and VMWare Virtual Machines, and Windows or Linux Physical Machines.\nASR requires port 443 and 9443 in order to do it\u0026rsquo;s replication from the source servers\nTo replicate Hyper-V virtual machines between two on-premises data centers, you need SCVMM to be on both systems already\nASR can replicate sites between regions as long as they are in the same geography. It would not support US East machines being replicated to Japan East because it crosses a geographic boundary.\nVMs across multiple Availability Zones provides the highest Microsoft SLA at 99.99%. Using availability sets provides 99.95% SLA. Standalone VMs behind a load balancer does not provide an SLA. Using Azure Site Recovery provides Business Continuity, and not a high-availability.\nHow does SQL Database implement high availability at the Premium Tier?\nThe Premium tier of SQL Database runs the database in a 4-node Always On Availability Group Cluster. This has one primary database node with 3 secondary processes keeping copies of the data.\nUsing SQL Database Always On Encryption with Deterministic Encryption. This allows the database to perform database operations on the table such as joins and equality tests, while keeping the data encrypted in the table and from regular application reads. SQL Database Always On Encryption with Randomized Encryption does not allow table operations With Storage Queues, calling UpdateMessage can be used to extend the lease and prevent the message from being given to another process. RenewLock is for Service Bus Queue and not Storage Queues. Rearchitecting the application may not be a simple solution, although it may be wise. You can scale a web app using metrics provided by Application Insights, which needs to be implemented before you can enable such scaling Transparent Data Encryption allows the data stored on the disk to be encrypted and it supports geo-replication and geo-restore. Always Encrypted will not suffice as this is focused on transport encryption (data in transit is encrypted) Azure Confidential Compute (ACC) is only supported on the DC-Series VMs, Azure Confidential Compute allows code and data in the processor to be secured when running. Azure Confidential Compute is not supported on any other VM series except DC-series. SendGrid is an email solution which provides email functionality via distribution groups as well as metric gathering Azure AD Privileged Identity Management is a tool that will allow you to see who has elevated permissions within your environment. You can examine the history of that access, and whether they use those permissions. And you can ask users to justify the need for those elevated permissions in a security review. Azure Site Recovery (ASR) does not support the recovery of most PaaS solutions such as Azure Storage and Azure App Services. ASR is for infrastructure workloads such as Windows and Linux VM\u0026rsquo;s, SAP, VMWare, Sharepoint, IIS, and SQL Server Function Keys and Azure API Management can both protect a Function app\u0026rsquo;s public endpoint. Function keys are unique codes that can be required to be used when calling an endpoint. This only protects the endpoint when the function key is a true secret. Azure API Management can be put in front of the function and require other forms of authentication such as Azure AD or OAuth. Functions do not support Shared Access Signatures (SAS). Shared Access Signatures (SAS) and Azure API Management can both protect a Service Bus\u0026rsquo; public endpoint. Shared Access Signatures (SAS) are unique codes that can be required to be used when calling an endpoint. This is why they are called \u0026ldquo;shared\u0026rdquo;. This only protects the endpoint when the SAS is a true secret. Azure API Management can be put in front of the function and require other forms of authentication such as Azure AD or OAuth. Service Bus does not support Function Keys or Multi-Factor Authentication. Always Encrypt allows you to choose which columns to encrypt, and SQL Database will do the work for you. When using a command line, the data will come out encrypted. But a trusted application can see the data, and use it in JOINs, SELECTs, and WHERE clauses. Application side encryption will not allow JOINs, etc. A Trusted Execution Environment (TEE) is not used for SQL Database service. All data is stored at rest encrypted using TDE by default. ","date":"15 June 2019","externalUrl":null,"permalink":"/2019/06/15/azure-architect-expert-study-notes/","section":"Posts","summary":"","title":"Azure Architect Expert Study Notes","type":"posts"},{"content":"Proud to say that I now have the following exams passed: -\nAzure solutions Architect Expert Azure Devops Engineer Expert Azure Developer Associate ","date":"15 June 2019","externalUrl":null,"permalink":"/2019/06/15/azure-certification-exams-passed/","section":"Posts","summary":"","title":"Azure Certification Exams Passed","type":"posts"},{"content":"The following is a list of the best practices I have found in 18 months of learning and using Azure (not including the community blogs of course), I know best practice isn\u0026rsquo;t a great term but here are the links anyway, enjoy!\nAzure Developers Guide - https://azure.microsoft.com/en-us/campaigns/developer-guide/ Azure Architecture Centre - https://docs.microsoft.com/en-us/azure/architecture/ Azure Key Vault Developer\u0026rsquo;s Guide - https://docs.microsoft.com/en-gb/azure/key-vault/key-vault-developers-guide Azure Tips and Tricks - https://microsoft.github.io/AzureTipsAndTricks/ Azure Security Best Practices and Patterns - https://docs.microsoft.com/en-us/azure/security/security-best-practices-and-patterns Azure Citadel - https://azurecitadel.com/ How to stay on top of Azure Best Practices - https://azure.microsoft.com/en-gb/blog/how-to-stay-on-top-of-azure-best-practices/ Azure Overview - https://azure-overview.com/ Decision tree for Azure compute services - https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/compute-decision-tree p.s. I\u0026rsquo;ll keep updating this so check back in a month or 2 :)\n","date":"4 June 2019","externalUrl":null,"permalink":"/2019/06/04/azure-best-practices/","section":"Posts","summary":"","title":"Azure Best Practices","type":"posts"},{"content":" If there is one thing I am good at, its finding the right resources to learn something, I have a knack of finding the right content and locating the right people to ask for help or to learn from.\nOk so people seem interested in how I went about it so let\u0026rsquo;s get to that now, here is how I tackled my Azure learning, hopefully you can get some solid advice from this post for you, no matter if your a dev, SQL dba, infrastructure type person, most of this post is valid.\nRead through the exams and start off with one of the easier ones (none of them are easy when your starting out) I chose the AZ-100 and I think that\u0026rsquo;s not a bad place to start (now the AZ-103), that or the AZ-900 exam of your new to Azure. Read the website link for the exam carefully especially the skills measured (these can be updated from time to time) Search google for people blogging about their study notes Use links like mine for finding useful study resources I used Udemy and Scott Duffy\u0026rsquo;s courses and Pluralsight (too may authors to thank here, see below) I signed up to his Facebook Azure Exams User Group (Only thing I used Facebook for) After a couple of weeks I booked the exam 2 weeks in advance (that forces you to study and focus) I used Azure a lot as nothing beats hands on experience - this is very important! Practice is the only way I really learn something and remember it Focus\nI cut down the amount of tv I watched, just stopped it altogether, I\u0026rsquo;ve barely watched a thing this past year on Netflix.\nIf I want to learn Azure it required being laser focused and dedicated to the subject. I would say on average I was spending 10+ hours a week at night after work just studying and using the tools within Azure, now this isn\u0026rsquo;t possible for everyone so maybe I can list some of the best resources I found and my tips for learning Azure, lets come back to that later on.\nMotivation\nSo what was the motivation for doing this amount of learning and almost giving up watching tv - mad right?, I know your thinking that.\nI want to learn, and the more I learn the more I want to feed the habit of learning.\nHow I got started\nI start by first of all taking my time, I didn\u0026rsquo;t dive right in, I looked around, read some blog posts, but always ended up back at the docs.microsoft.com - which by the way is awesome.\nI check out the beginner courses on Pluralsight, searched for Azure and off I went - the more I read the more I thought this is very cool stuff, I just got immersed into it and my learning became quite addictive, its when you first deploy something to Azure your like wow that was super easy, what can I do next, and so I just kept at it.\nAfter a month, maybe two I decided to think I may as well check out the certifications, if I\u0026rsquo;m learning Azure I may as well see what\u0026rsquo;s involved in the certifications, so I checked out the Azure certifications, looked for advice on where to get started and it was looking like one of the exams was easier of the 3 available, so I got reading.\nAfter some time I took a practice test and got 12% I think maybe slightly higher, I had very little idea what the questions were talking about, I still hadn\u0026rsquo;t even heard of some of the content in the questions - that drove me to keep going and learn even more rather than getting despondent, I did the Pluralsight IQ test thing they do and it was slowly going up over time - any progress is good progress right? - I mean I\u0026rsquo;m learning, I\u0026rsquo;m investing in myself and what harm can that ever do?\nAt this point I have the following badges.\nTwitter\nTwitter is without doubt my favourite place to learn believe it or not, I follow all the MVP\u0026rsquo;s I come across, I follow as many people I can who tweet about Azure, the Azure team members at Microsoft, anyone who mentions Azure I check out their tweets and if there\u0026rsquo;s learning potential I follow them - I highly recommend doing this if your serious about learning Azure, and if your serious about learning anything technical locate the people you need to be following, engage with them ask questions etc and learn.\nI have made some great friends on twitter special mention to Julie Lerman @julielerman ,Richard Hooper @Pixel_Robots, Sam Smith @samsmithnz , Aaron Ralls @cajunAA ,Thomas Thornton @tamstar1234- the people I chat to the most on twitter.\nFrom twitter alone I have been asked to write two books and do training for a cloud training company, was invited to meet Scott Guthrie @scottgu and way more\nBlog\nThe reason I started blogging was to write down things I came across that I would forget, blogging meant I could come back to it later and find the answers, now I\u0026rsquo;ve moved on to help other people with what I have learned and share the knowledge, it also ensures I have read into the subject enough so that I at least know what I am talking about.\nIf you aren\u0026rsquo;t a blogger then you should look into getting started, it\u0026rsquo;s very easy to do and can open up new opportunities for you gong forward.\nI took part in the C# blog Advent Calendar end of last year which was fun to do.\nTips for Learning Azure\nI will list my tips I would suggest for learning azure the way I did below: -\nCreate a free account and play around with Azure, hands on is the best way to learn for me. Read these tips for exam courses which will help Read https://docs.microsoft.com/en-us/azure/ Go through Microsoft Learn also free and exceptionally useful Make use of Free Pluralsight via https://visualstudio.microsoft.com/dev-essentials/ Follow Michael Crump\u0026rsquo;s list of tips - https://www.michaelcrump.net/azure-tips-and-tricks-complete-list/ I used @scottjduffy Azure training on Udemy - which is brilliant stuff! I also signed up to Scott\u0026rsquo;s Azure Facebook User Group Community\nHelping with the Glasgow Azure User Group, running the Azure Global Bootcamp in Glasgow was great fun.\nI add the hashtag #azurefamily to my posts, like a calling card for help, we chip in and help other people who have questions they need help with when it comes to Azure.\nI also reached out to several of the Microsoft Azure folks asking questions, looking for advice etc, the responses have always been very helpful.\nGoals\nSetting goals I think is an important step, I wrote one goal up above my pc monitors which I haven\u0026rsquo;t achieved and its there to remind me to stay focused on that very goal.\nMy goals for 2019 I keep to myself, got 2 left to achieve.\nThank You\nI wanted to thank a few people who have helped me with Azure over the past 18 months, its been challenging but very rewarding. It\u0026rsquo;s not possible to list them all but the one thing I always do is thank the person who has helped me, its nice to be nice and the best part in all of this has been able to help other people just starting out their journey to learn some Azure.\nSpecial mention to the following for their amazing learning resources:-\nScott Duffy - @scottjduffy Barry Luijbregts - @AzureBarry Mike Pfeiffer - @mike_pfeiffer\nHere\u0026rsquo;s to an exciting time ahead with an Azure filled rest of 2019.\np.s. Ping me on twitter If I can help you on your journey, I love to be able to help people and more than happy to help.\n","date":"22 May 2019","externalUrl":null,"permalink":"/2019/05/22/ambition-and-drive-to-learn-azure-2019-edition/","section":"Posts","summary":"","title":"Ambition and Drive to Learn Azure - 2019 Edition","type":"posts"},{"content":"A colleague at work found some amazing resources for Azure exams, I thought it best to share the resources, hope you find them as useful as I have for the exams, please share the link, the courses are all free from EDX. Even if they become invalid the learning content here is fantastic!\nMS-100: Microsoft 365 Identity and Services\nMS-100.1 Office 365 Management MS-100.2 Microsoft 365 Tenant and Service Management MS-100.3 Microsoft 365 Identity Management MS-101: Microsoft 365 Mobility and Security\nMS-101.1 Microsoft 365 Security Management MS-101.2 Microsoft 365 Compliance Management MS-101.3 Microsoft 365 Device Management AZ-100: Microsoft Azure Infrastructure and Deployment\nAZ-100.1 Manage Subscriptions and Resources AZ-100.2 Implementing and Managing Storage AZ-100.3 Deploying and Managing Virtual Machines AZ-100.4 Configuring and Managing Virtual Networks AZ-100.5 Managing Identities AZ-101: Microsoft Azure Integration and Security\nAZ-101.1 Migrate Servers to Azure AZ-101.2 Implementing and Managing Application Services AZ-101.3 Implement Advanced Virtual Networking AZ-101.4 Secure Identities AZ-200: Microsoft Azure Developer Core Solutions\nAZ-200.1 Select the appropriate Azure technology development solution AZ-200.2 Develop for Azure storage AZ-200.3 Develop Azure Platform as a Service solutions AZ-200.4 Implement security in Azure development solutions AZ-201: Microsoft Azure Developer Advanced Solutions\nAZ-201.1 Develop for an Azure cloud model AZ-201.2 Implement Azure development integration solutions AZ-201.3 Develop Azure Cognitive Services, Bot, and IoT solutions AZ-300: Microsoft Azure Architect Technologies\nAZ-300.1 Deploying and Configuring Infrastructure AZ-300.2 Implementing Workloads and Security AZ-300.3 Understanding Cloud Architect Technology Solutions AZ-300.4 Creating and Deploying Apps AZ-300.5 Implementing Authentication and Secure Data AZ-300.6 Developing for the Cloud AZ-301: Microsoft Azure Architect Design\nAZ-301.1 Designing for Identity and Security AZ-301.2 Designing a Data Platform Solution AZ-301.3 Designing for Deployment, Migration, and Integration AZ-301.4 Designing an Infrastructure Strategy AZ-401: Microsoft Azure DevOps Solutions (this is the AZ-400 exam content)\nAZ-401.1 Implementing DevOps Development Processes\nAZ-401.2 Implementing Continuous Integration AZ-401.3 Implementing Continuous Delivery\nAZ-401.4 Implementing Dependency Management\nAZ-401.5 Implementing Application Infrastructure\nAZ-401.6 Implementing Continuous Feedback\nAZ-401.7 Designing a DevOps Strategy\nAZ-900: Microsoft Azure Fundamentals\nAZ-900: Microsoft Azure Fundamentals MS-900 Microsoft 365 Fundamentals\nMS-900 Microsoft 365 Fundamentals Bonus section includes links to the above and more: - https://partner.microsoft.com/en-US/training/assets#/?type=Exam\nAll the exam learning paths can be found here: -\nhttps://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RWtQJJ\nPlease leave feedback questions etc in the comments section below.\n","date":"13 May 2019","externalUrl":null,"permalink":"/2019/05/13/azure-exam-resources/","section":"Posts","summary":"","title":"Azure Exam Resources","type":"posts"},{"content":"A customer at work has several Azure Virtual Machines and they wanted to have them stopped between the hours of say 10pm until 6am, nothing too difficult there. I setup an Azure Automation account with a Start/Stop VM Solution, long story short it doesn\u0026rsquo;t really work, like at all, its messy etc, it\u0026rsquo;s just a mess.\n**Note - the solution presented below means zero resource provisioning! **\nI decided to look at a different way of doing it and asked around and a colleague Nathanat work suggested Azure Functions and also mentioned he had been looking at the** Azure CLI** of late.\nThe below is the solution that he came up with, I like this and decided to go ahead and pinch his idea, don\u0026rsquo;t worry he works in my team and I will give credit where credit is very much due :) - now before I go any further, yes I could use PowerShell, Azure Functions, etc. etc. but I like this implementation mainly because I learned a couple of new things, and if I\u0026rsquo;m learning then all good.\nHe wrote 2 bash scripts which invoke the** Azure CLI**, you pass in the name of the Resource Group(s) and it\u0026rsquo;ll loops through and starts / stops all the VM\u0026rsquo;s in your Resource Group(s).\nStart VM Bash Script:-\nStop VM Bash Script:-\nStart VM Yaml Build Script: - Stop VM Yaml Build Script: -\nThen to ensure the bash scripts run every day you set the schedule for the build and your good to go, like so:-\nFeedback welcome, I like this idea for the following reasons: -\nLearned some YAML Learned about trigger (think scheduled builds) on YAML builds And looked more at the Azure CLI which is of huge interest Please also follow Nathan on twitter.\n","date":"8 May 2019","externalUrl":null,"permalink":"/2019/05/08/replacing-azure-automation-using-azure-cli-and-azure-devops/","section":"Posts","summary":"","title":"Replacing Azure Automation using Azure CLI and Azure Devops","type":"posts"},{"content":"Saturday April 27th was the date for the Global Azure Bootcamp, I was organising the Glasgow edition, in conjunction with the Glasgow Azure user Group, we had a great turn out with a lot of swag and one lucky\nEach talk details can be found here:-\n**Duncan Jones - Globally distributed computing for pennies **Duncan (@merion) is a developer in the Financial Services industry based in Dublin, with an interest in DDD and CQRS/ES - he has developed a DSL plug in for creating event sourcing systems in Visual Studio and is the organiser of the Dublin Software Craftsmanship meetup.\nCode for the \u0026ldquo;Hitchhiker systems\u0026rdquo; talk: Code\nSlides: Presentations\n** ****Angel M Rayo - Azure DevOps from rookie to DevStar **\nMCT since 2005, MCSE Cloud, ITIL Expert and more than 10500 hours of training experience in several companies and events like MCT Global Summit, SQL Saturday, SharePoint Day, i.e. @oyara\nSlideShare: Azure DevOps from rookie to devstar\n** ****Craig Nicol - CosmosDB in the real world **\n.Net/web developer with 15 years experience, mostly backend and data. Currently a technical architect at Microsoft Gold Partner, Screenmedia. He has have worked in products and consulting for many clients, mainly on the web. His main interests are data security and performance. @craignicol Link to Slides: CosmosDB in the real world\n** ****Ivan Culjak - Building mostly Serverless distributed cloud systems step by step **\nIvan is a .NET freelance developer in love with Azure, Xamarin, and the idea of automating whatever. When hes not developing something new, hes salvaging something inherited, consulting with enthusiasm, and testing and breaking new technologies in a quest for something useful. @CuljakIvan\nSlides: https://speakerdeck.com/culjakivan/building-mostly-serverless-distributed-cloud-systems-step-by-step\n** ****Colin Chaplin - Office365 Migrations in the tens of thousands **\nColin is a freelance IT consultant with over 20 years experience in end user computing, especially Exchange, Office365 and Windows 10. He has spoke at Microsoft TechReady and written for the Microsoft Technet UK blog and Practical365.com @ColinChaplin\nSlides: Azure Bootcamp - o365 in the 10ks\n** ****Henry Bean - Logging, instrumentation, dashboards, alerts and all that - for developers. **\nHenry Been is an independent architect and developer from The Netherlands. He enjoys working with software development teams to create and deliver great software. His interests include the Azure cloud, Agile, DevOps, software architecture and the design and implementation of testable and maintainable software. @henry_been\nThis is a recording of the same talk Henry gave to us:\nYouTube Video: Logging, Instrumentation, Dashboards, Alerts by Henry Been\nGitHub repo: Code\nI may be a little bias but I thought the event was awesome, helped by having outstanding speakers who made it a great event, hope to organise it for you all again next year!\nLeave your feedback below if you attended.\n","date":"2 May 2019","externalUrl":null,"permalink":"/2019/05/02/global-azure-bootcamp-2019-glasgow-edition/","section":"Posts","summary":"","title":"Global Azure Bootcamp 2019 - Glasgow Edition","type":"posts"},{"content":" Today I wanted to see if it was possible to create a variable in Azure Devops, change the value within a Task and then use the updated value in a step further down the list of Tasks.\nTurns out its pretty easy (when you get the syntax correct)\nSo I created a variable in Azure Devops called Version like so and set its value to 1.0\nAnd then I want to make sure I can read this from a standard PowerShell Task in a step within my Build like so :-\nWhich when built showed me the value as I\u0026rsquo;d expect of 1.0\nAnd then I want to set the variable to a new value (which could be from anything or anywhere to be honest) using the syntax\n##vso[task.setvariable variable=Version]1.2.3\nAnd then finally read out the current value by using $(Version)\nWhich shows the Version parameter has been updated to 1.2.3 as we would want.\nHope this helps someone at some point :)\n","date":"1 May 2019","externalUrl":null,"permalink":"/2019/05/01/azure-devops-pass-variables-between-tasks/","section":"Posts","summary":"","title":"Azure Devops Pass Variables between Tasks","type":"posts"},{"content":" Its always a good idea on your project to keep your project documentation up to date, I personally like to make use of the Wiki inside Azure Devops, we use Azure Devops almost exclusively at work now.\nOn the wiki we have a page which documents the Azure Builds and Release pipelines, so that people can get an idea of what the individual builds are for and explain the steps within the Release pipelines, for the most part this is really straightforward, but for new people joining the team it just makes life easier to have this kind of thing written down and explained.\nOn that note I wanted to show you how to add the status badges for each build to your Wiki, it took me a wee while to find this so I thought I\u0026rsquo;d blog it because I\u0026rsquo;ll forget and so other people can see how to do it.\nAn example of the kind of thing I am talking about is below: -\nSo how do you find the Markdown for the badges so that you can add this to your wiki or elsewhere?\nIf you browse to your build(s) for your projects, click on the 3 ellipses on the right hand side, next to the Edit and Queue buttons and then choose Status Badge\nThen you need to select the text next to Markdown, and then just paste this into your wiki page.\nHopefully someone finds this useful, bye for now.\n","date":"20 March 2019","externalUrl":null,"permalink":"/2019/03/20/azure-devops-add-your-build-status-badges-to-your-wiki/","section":"Posts","summary":"","title":"Azure Devops - Add your build status badges to your Wiki","type":"posts"},{"content":"In this blog post I want to talk to you about release gates within Azure Devops, release gates can be useful if you want to add in some further pipeline checks to stop the release going ahead.\nNothing better than an example so here is how to set up gated releases using Azure Devops.\nExample\nThis example shows how you can add in a release gate so that the release wont go ahead and deploy if say there are still open bug tasks within the Azure Board for the current sprint.\nOnce you have a release, first, click on the lightning bolt on the stage as seen below, and then enable the Gates are on the right hand side.\nOne this had been selected choose Add and then select Query Work Items, for this I have created a Shared Query where I created a shared query to show me if there are any bugs which are sitting as Approved (which I\u0026rsquo;m using as open but not started as yet), I don\u0026rsquo;t want the release to go ahead if there are any bugs in the Approved status.\n**Note:- **In order to create a new query within Azure Devops on the left hand side select Boards, queries and then select new query.\nAn example query would look something like the following\nFill out the screen below like below and I set the upper threshold to 0.\nTo recap, I want my release to fail the gate so that the release wont go ahead because I have open bugs within my Azure Board for this particular project.\nThere are a number of different types of release gates you can use and here is a screen shot of the ones available to use at this time.\nI hope you find this useful, if you have any questions please leave feedback.\n","date":"18 March 2019","externalUrl":null,"permalink":"/2019/03/18/azure-devops-release-gates/","section":"Posts","summary":"","title":"Azure Devops – Release Gates","type":"posts"},{"content":"On March 12th 2019, Mike Pfeiffer invited me to appear on his excellent podcast which is called CloudSkills.fm\nCloudSkills.fm is a weekly podcast with technical tips and career advice for people working in the cloud computing industry Mike Pfeiffer is a Pluralsight author, consultant, advisor, author, and mentor for people ramping up on cloud-based technologies and it was a privilege to have him invite me onto his show and chat about Azure Certifications and also Azure Devops. If you haven\u0026rsquo;t checked out his podcast as yet, then please do @ cloudskills.fm\nIn my episode we talk about how I studied for the Azure exams, what content and methods of studying I use and we also talk about how I make use of Azure Devops with my companies customers, where we use it to deploy web apps and infrastructure as code.\nI have also been working on moving customer\u0026rsquo;s data from on premises to Azure using Azure Sql, Azure Data Factory and also using Analysis services with Power BI reporting capabilities, more on that coming soon on my blog. For this project we are building everything from the ground up using Arm templates, deploying the entire resource group to Azure and populating the Azure Data Factory with pipelines all using Azure Devops.\nBefore I blog about that, lets talk more about my podcast appearance. It\u0026rsquo;s always a pleasure to be able to talk on podcasts about what I get up to and I like to share what I have been doing with Azure on my blog here. Mike is a very knowledgeable guy and like myself is insanely busy working on multiple things whilst trying to learn and keep up to date, he also has a weekly mailing where he mentions the interesting things he comes across week to week.\nI\u0026rsquo;ll keep this post short and move onto blogging about the Data side of things I\u0026rsquo;ve been involved in, but if your thinking of doing some Azure exams and wont to know where to get started then have a listen to the episode and give me feedback on it.\nEnjoy listening if you take the time to tune in.\n","date":"17 March 2019","externalUrl":null,"permalink":"/2019/03/17/podcast-appearance-on-cloudskills-fm/","section":"Posts","summary":"","title":"Podcast appearance on CloudSkills.fm","type":"posts"},{"content":" A couple of people have asked for some tips on running an Azure user group, I help out with the Glasgow Azure User Group, I don\u0026rsquo;t run it the awesome Sarah Lean runs it and does all the hard work, I just help out.\nInstead of replying I thought I may as well blog some tips and collate other people\u0026rsquo;s tips going forward, so here is a list of tips on running a User Group.\nTry and create a brand for it, think name, website url, logo etc. Use Meetup or Eventbrite, although Meetup seems to be the most popular Get your User Group added to lists of similar typed of User Group in the region Try and generate interest from speakers as far in advance as possible, have a backup plan just in case speakers cancel last-minute (we all have busy lives) Tweet information about the event and use LinkedIn and Facebook to get the User Group name out there MVP\u0026rsquo;s need to deliver talks to help them maintain their MVP status and are always looking for places to deliver talks Try and get sponsors for your User Group, they might help pay for food and drinks for your attendees Always thanks your sponsors if you have them, they help you keep the User Group running normally Folks always like swag, stickers especially, ask around and see who can get you stickers for your User Group If your running a conference or event I use sessionize, and I recommend it if you\u0026rsquo;re organising an event Last but not realise your doing a lot to help the community by organising and running a User Group, it\u0026rsquo;s not easy, so try to get help with it, good luck. Please leave feedback and your tips after the beep\u0026hellip;\n","date":"8 March 2019","externalUrl":null,"permalink":"/2019/03/08/tips-for-running-an-user-group/","section":"Posts","summary":"","title":"Tips for Running a User Group","type":"posts"},{"content":"","date":"8 March 2019","externalUrl":null,"permalink":"/tags/user-group/","section":"Tags","summary":"","title":"User Group","type":"tags"},{"content":"At work one of our customers has a huge number of vm\u0026rsquo;s that people in their teams use on and off, in order to keep costs down for them we wanted to turn these vm\u0026rsquo;s off at certain times, say shut them down at 8pm at night and restart them say 7am in the morning the next day - note this will save a lot of money over time.\nTo achieve this I was using an Azure automation account and using the Start / Stop solutions which allow you to set up schedules for doing just what I wanted.\nI tested this out on the dev environment first (as you do) and it worked great, so I tried to delete the solution and create a new one which covers dev, integration and the quality environments but hmm I got this error when trying to delete the solution.\nHmm, ok what\u0026rsquo;s going on here then?, maybe its a browser issue, nope, re-open the browser, try a different browser, nope, nope and nope.\nOk so I\u0026rsquo;m googling and reading all sorts of stuff (Stack overflow for me is 99 replies and 1 right answer these days), nothing working.\nI know I\u0026rsquo;ll tweet @AzureSupport and ask them, they then respond and very kindly gave me 1 free support ticket and after only a couple of emails back and forth they tell me I have a resource lock on the solution, I check that and nope I don\u0026rsquo;t, they tell me I have a resource lock of some sort and low and behold on the resource group was a resource lock.\nDelete the resource lock and boom it deletes just fine, this wont be a particularly common issue for folks, but I\u0026rsquo;m blogging about it in case anyone comes across it and most likely I\u0026rsquo;ll forget and reach my own blog again one day as normally happens.\n","date":"2 March 2019","externalUrl":null,"permalink":"/2019/03/02/automation-accounts-and-start-stop-vm-solutions-in-azure/","section":"Posts","summary":"","title":"Automation Accounts and Start/Stop VM Solutions in Azure","type":"posts"},{"content":" This past week I attended the Microsoft Ignite Tour London edition, it was a day 2 event held at the London Excel Arena near the Docklands.\nThis event is part of a global tour Microsoft are doing and its FREE for anyone to attend, if you haven\u0026rsquo;t managed to attend one as yet I highly recommend you do, there is an amazing amount of sessions to go to covering a vast array of subject areas and if your using Microsoft software there will be something for you there.\nI attended a number of session which are presented by Microsoft MVP\u0026rsquo;s as well as Microsoft employees.\nAs a dev it was great to be able to hang around the ask the experts area and see the faces I look up to and follow on social media, the list of well know people there was pretty substantial and they were very accessible if you wanted to rock up and say hi or if you had any kind of questions for them.\nThe fact that the event has these available people and the content is free makes it very compelling, I will definitely be back next year and I hear that things will only be getting better and better.\nThese types of events are something I need to personally go along to far more, being able to network and introduce myself to these kinds of people is something I recognise that I need to get better at, I recognised a number of people and only spoke to a few, next time I\u0026rsquo;ll rectify that.\nI went to sessions on Data and AI, Arm Templates within Azure, Azure DataFactory and ingesting data and many more. The speakers are made readily available for questions and people who work on the teams hang out and there is a number of demo stations which change throughout both days, I really liked the demo stations and if I am honest that\u0026rsquo;s something I would love to do.\nOn Day 2 I decided to skip some sessions and network and I got a lot out of that, I met over 50 people who I follow on twitter and it was awesome to meet them in person and ask them what they\u0026rsquo;re working on and what sessions they liked the most.\nShout out to all the people who came up to me and say hi! - wearing my Octopus Deploy hoodie helped people recognise me so that was pretty neat.\nOff the back of the event I feel a renewed energy and a clearer idea of what I want to learn, where id like to improve upon and also met people who do the type of job that one day I aspire to do.\nIt\u0026rsquo;s not every day you get the chance to see thee people in person and ask them questions etc, I will need to get over being shy and just say hi and go from there, I think it\u0026rsquo;s something a lot of people struggle with, so I\u0026rsquo;m not alone.\nAll of the session slides and more can be found here on the Microsoft Tech Communities Page\nRoll on next years event and I\u0026rsquo;m also hoping to go to Ignite in Florida later this year!\n","date":"1 March 2019","externalUrl":null,"permalink":"/2019/03/01/microsoft-ignite-tour-london-edition-my-take-on-it/","section":"Posts","summary":"","title":"Microsoft Ignite Tour London edition - my take on it","type":"posts"},{"content":" In this blog post I\u0026rsquo;ll show you how to go about baking up SQL Server within your VM\u0026rsquo;s on Azure. I\u0026rsquo;m going to assume you have created an Azure Recovery Vault already.\n**\nStep 1 - **Log into Azure and go into your Recovery Vault.\n**Step 2 - **Click Backup.\n**Step 3 - **Choose SQL Server in Azure VM (Preview). **Step 4 - **Choose Start Discovery and that goes off to discover your VM\u0026rsquo;s which have SQL Server on them. **Step 5 - **Select the Virtual Machine name(s) from the list and then hit the Discover DB\u0026rsquo;s button. Step 6 - Select Configure Backup. **Step 7 - **Select from the list the instance(s) and then select the DB\u0026rsquo;s you wish backed up, you can also change the AutoProtect to ON from the drop down and this will always backup each new database added going forward.\n**Step 8 - **Select Ok.\nStep 9 - Choose your Backup Policy Options.\nAnd that should be that, you now have your SQL Server\u0026rsquo;s within your VM\u0026rsquo;s on Azure backed up using a Policy which you can configure to suit your needs and change ant any time you wish.\n","date":"23 February 2019","externalUrl":null,"permalink":"/2019/02/23/using-azure-recovery-vault-to-backup-sql-server-within-your-virtual-machines/","section":"Posts","summary":"","title":"Using Azure Recovery Vault to backup SQL Server within your Virtual Machines","type":"posts"},{"content":" Last week I was invited to be a guest on a podcast called RadioTFS by Greg Duncan among others, which is a podcast about Microsoft visual studio team foundation server, visual studio online and visual studio application life-cycle management.\nI wont lie I was nervous and rambled a bit and talk too fast, working on that so that I can get better, got to start somewhere right. The opportunity to appear on shows like this is very welcome and hope to be on more in the future.\nI was a guest on Show 171 where I talked about some of the following and more:-\nAsk Me Anything with Scott Gu – If Carlsberg did meetings… Azure DevOps – How to do a fully automated release (Part 1), Part 2, Part 3 Azure Devops – OSS Scanning using WhiteSource WhiteSource Bolt Retrospectives Azure DevOps Blog Posts Azure DevOps Hands-On Labs Azure DevOps Demo Generator New Azure Exams – My thoughts on them Azure DevOps AZ-400 Exam – Study Notes Azure Blobs from C# and Visual Studio – C# Advent Calendar The Second Annual C# Advent BTW you can find all of the above in more detail on my blog but also please go check out RadioTFS.\nIf any of the above sounds interesting then make sure to check out the show and the other podcasts where guests like Donovan Brown have been on and other awesome folks.\n","date":"10 February 2019","externalUrl":null,"permalink":"/2019/02/10/podcast-appearance-on-radiotfs/","section":"Posts","summary":"","title":"Podcast Appearance on RadioTFS","type":"posts"},{"content":"To follow-up on my earlier post on Ambition and Drive to Learn Azure I\u0026rsquo;m happy to share with you an update on where I am at with the Azure exams.\nDeveloper Exams (200 and 201 gives me Azure Developer Associate)\nAZ-200 Microsoft Azure Developer Core Solutions - Passed AZ-201 Microsoft Azure Developer Advanced Solutions - Passed Microsoft Certified: Azure Developer Associate - Passed\nArchitect Exams\nAZ-300 Microsoft Azure Architect Technologies - Passed 70-535: Architecting Microsoft Azure Solutions - Passed\nI need to either sit AZ-301 or AZ-302 to become and Azure Architect Expert\nTime to start studying for the AZ-302 exam so I can become Azure Solutions Architect Expert, which I have study notes for.\n","date":"10 February 2019","externalUrl":null,"permalink":"/2019/02/10/ambition-and-drive-to-learn-azure-part-2/","section":"Posts","summary":"","title":"Ambition and Drive to Learn Azure - Part 2","type":"posts"},{"content":" Unfamiliar with Azure Policies?\nAzure Policies start off with you defining a policy within Azure which could be something as simple as implementing a naming convention for lets say a Virtual Machine.\nThe following policy definition states that when creating an Azure VM it must match the naming convention we specify\nAn example of how to do this would be as below (in JSON):-\nSo what we are saying here is that if any user tries to create a Virtual Machine within a Resource Group within Azure then it must be named something like VM-P-ABC-GS01.\nTo get started with trying this out within the Azure Portal search for Policy at the top of the Azure Portal and you\u0026rsquo;ll see a screen something like the below: -\nHere I have loaded the Policy area of the portal for an existing project and you can see the level of detail and see that I have on overall compliance of 95% on my resources and listed are the Non-compliant state Resources (if I were to expand).\nBy clicking on any of the non-compliant areas I will be shown all of the non-conforming resources which is awesome.\nWith Azure policies in place we can enforce naming conventions for a Resource Group, if we want to go further we could use Azure Management Groups - which I will cover in a separate blog post.\nBut what if I already have resources in place and I want to start using naming conventions with Azure policies?\nIn that case we need to talk about the contents of a policy definition which you can read up on.\nLets review another Azure policy (in JSON)\nIn the screen shot above the import part here is the **EFFECT **part.\nEffect\nPolicy supports the following types of effect:\nDeny: generates an event in the activity log and fails the request Audit: generates a warning event in activity log but doesn\u0026rsquo;t fail the request Append: adds the defined set of fields to the request AuditIfNotExists: enables auditing if a resource doesn\u0026rsquo;t exist DeployIfNotExists: deploys a resource if it doesn\u0026rsquo;t already exist Disabled: doesn\u0026rsquo;t evaluate resources for compliance to the policy rule So if we have resource which we might want to change the name of going forward and we are able to then perhaps use Audit to start off with and then change them to Deny.\nNote if you make use of Azure policies and use Azure Devops to create Infrastructure as Code (IaC) then the easiest place to find issues with failing releases is in the build summary log.\nSummary\nIn summary, there is a lot more to Azure policies, here I just wanted to give you some idea of what you can use Azure policies for.\n","date":"27 January 2019","externalUrl":null,"permalink":"/2019/01/27/azure-policies/","section":"Posts","summary":"","title":"Azure Policies","type":"posts"},{"content":"Mid December 2018, I received a DM on twitter from a new follower @deanbryen which was basically read like so - Hey Gregor! I know you\u0026rsquo;ve been doing a ton of stuff with the Azure community both in Scotland and online. Thanks for that!!\nWe\u0026rsquo;re organising a small (10-15 people) private event for top UK tech community members to attend an AMA with Scott Guthrie in January. I added you to the list of invitees, so this is me inviting you :-)\nWhat: ‘Azure AMA (ask me anything) with Scott’ An opportunity to have a closed-door discussion with Scott Guthrie on the state of cloud in the UK So on Friday 18th January I went down to London to the Microsoft Reactor and met with Scott Guthrie to ask him question\u0026rsquo;s on the status of Azure in the UK - an Ask Me Anything session - not gonna lie I was super excited by this opportunity.\nFirstly it was amazing to get recognised as someone with a passion for Azure and be recognised, it felt like a reward for all the hard work I put in with blogging, user group, helping other people and giving feedback on Microsoft products etc. - I get a lot of people saying their inspired by how I took to learning Azure and how they want to do the same.\nThe meeting was just after 11am, Scott introduced himself and the products and teams he manages, he spoke about .Net, Azure, GitHub, AI, Data and more and if you think about that, that is a huge amount of people and projects to be responsible for.\nOne thing that struck me was his passion for it and his in-depth knowledge of where the teams are, what\u0026rsquo;s planned ahead, even down to the release dates for the vnext in these products. GitHub was mentioned a good few times and with Microsoft purchasing it he talked about how recognised how people might react but he knows that GitHub will get even better moving forward for all types of developer\u0026rsquo;s.\nMicrosoft want to keep old friends and make new friends and that\u0026rsquo;s an awesome way to run a company.\nIt\u0026rsquo;s not every day your sat in a meeting with the Executive Vice President of the Cloud and Enterprise group at Microsoft.\nIf your interested to know what Scott is like in person, he\u0026rsquo;s relaxed, friendly, very engaging, loves hearing feedback (good and bad), and a very nice person indeed, he talks openly and honestly about everything he and Microsoft is doing and how they give back as well.\nWe talked about a lot of stuff within an hour and here is a list of the things I can remember in the conversation: -\nStaff Training and how to get staff trained at a professional level for moving to the cloud Azure Governance and how companies can have policies in place Azure Security Centre The new Azure portal homepage and the layout etc - I asked can we customise it (that\u0026rsquo;s in the pipeline) Containers in Azure, Kubernetes etc Data Centre\u0026rsquo;s and Carbon footprints as well as renewable energy Microsoft Learn and byte size learning and how its effective and how its been well received Events like Build and Ignite and how the new Ignite events are being well received Cloud Advocates and more regional / local events coming, more Ignite local events coming Visual Studio code and how popular it has become Managed Service Identity (MSI) and how its being built-in more and more going forward into Azure Python tooling that\u0026rsquo;s coming and how it will be best in class A lot of the we above we spoke about and these are just my recollection of the main topics that came up, yes we could have stayed there all day asking Scott questions but we had a limited time with him as you can imagine, with more time I\u0026rsquo;d like to have know what a day-to-day normal day involves. Before Scott left I managed to introduce myself and grab a selfie which was awesome, not a day or meeting I will forget about anytime soon, If Carlsberg did meetings\u0026hellip;\nLastly huge thanks to @deanbryen for the invite, Anna Fear for organising and to the UK Cloud Advocates who I spoke with when we had lunch together.\n","date":"20 January 2019","externalUrl":null,"permalink":"/2019/01/20/ask-me-anything-with-scott-gu-if-carlsberg-did-meetings/","section":"Posts","summary":"","title":"Ask Me Anything with Scott Gu - If Carlsberg did meetings...","type":"posts"},{"content":" Microsoft recently released information around the Azure AZ-302 exam: – https://www.microsoft.com/en-us/learning/exam-AZ-302.aspx\nThis blog post will cover available learning materials and docs links to information relevant to the exam AZ-302, links to these articles will be updated regularly.\nHopefully this will give you a head start on what you need to learn in order to pass the AZ-302 exam.\nDetermine Workload Requirements (15-20%)\nDetermine Feasibility and Refine Requirements\n*May include but not limited to: *Recommend changes during project execution (ongoing); create proof of concept (PoC); determine whether a pilot is needed; evaluate products and services to align with solution; create testing scenarios; refine user stories\nhttps://app.pluralsight.com/library/courses/microsoft-azure-feasibility-determining-requirements-refining/table-of-contents\nOptimize Consumption Strategy\n*May include but not limited to: *Optimize app service, compute, identity, network, and storage costs\nhttps://app.pluralsight.com/library/courses/microsoft-azure-consumption-strategy-optimizing/table-of-contents\nDesign for Identity and Security (5-10%)\nDesign Authorization\n*May include but not limited to: *Choose an authorization approach; define access permissions and privileges; design secure delegated access (e.g., oAuth, OpenID, etc.); recommend when and how to use API Keys.\nhttps://app.pluralsight.com/library/courses/microsoft-azure-authorization-design/table-of-contents\nDesign a Business Continuity Strategy (15-20%)\nDesign a Site Recovery Strategy\n*May include but not limited to: *Design a recovery solution; design a site recovery replication policy; design for site recovery capacity and for storage replication; design site failover and failback (planned/unplanned); design the site recovery network; recommend recovery objectives (e.g., Azure, on-prem, hybrid, Recovery Time Objective (RTO), Recovery Level Objective (RLO), Recovery Point Objective (RPO)); identify resources that require site recovery; identify supported and unsupported workloads; recommend a geographical distribution strategy\nhttps://app.pluralsight.com/library/courses/microsoft-azure-site-recovery-strategy-designing/table-of-contents\nDesign for High Availability\n*May include but not limited to: *Design for application redundancy, autoscaling, data center and fault domain redundancy, and network redundancy; identify resources that require high availability; identify storage types for high availability\nhttps://app.pluralsight.com/library/courses/microsoft-azure-architecting-high-availability/table-of-contents\nImplement Workloads and Security (5-10%)\n**Configure serverless computing **\n*May include but not limited to: *Create and manage objects; manage a Logic App resource; manage Azure Function app settings; manage Event Grid; manage Service Bus\nhttps://app.pluralsight.com/library/courses/microsoft-azure-serverless-computing-configuring/table-of-contents\nImplement Authentication and Secure Data (5-10%)\nImplement secure data solutions\n*May include but not limited to: *Encrypt and decrypt data at rest; encrypt data with Always Encrypted; implement Azure Confidential Compute and SSL/TLS communications;\nhttps://app.pluralsight.com/library/courses/microsoft-azure-data-securing/table-of-contents\nDevelop for the Cloud (25-30%)\nConfigure a message-based integration architecture\n*May include but not limited to: *Configure an app or service to send emails, Event Grid, and the Azure Relay Service; create and configure a Notification Hub, an Event Hub, and a Service Bus; configure queries across multiple products;\nhttps://docs.microsoft.com/en-us/azure/sendgrid-dotnet-how-to-send-email https://docs.microsoft.com/en-us/learn/modules/choose-a-messaging-model-in-azure-to-connect-your-services/index https://docs.microsoft.com/en-us/azure/notification-hubs/\nDevelop for autoscaling\n*May include but not limited to: *Implement autoscaling rules and patterns (schedule, operational/system metrics, code that addresses singleton application instances, and code that addresses transient state\nhttps://docs.microsoft.com/en-us/azure/architecture/best-practices/auto-scaling https://docs.microsoft.com/en-us/azure/azure-monitor/platform/autoscale-overview\nGood luck with the exam - Gregor!\n","date":"10 January 2019","externalUrl":null,"permalink":"/2019/01/10/az-302-exam-study-notes/","section":"Posts","summary":"","title":"AZ-302 Exam Study Notes","type":"posts"},{"content":" I\u0026rsquo;m not a huge fan of dwelling on past accomplishments, I\u0026rsquo;m more interested in what\u0026rsquo;s to come but here goes\u0026hellip;\nLast year involved the following:\nGot a new job as Head of Development Services for Sword IT Worked on a large Azure web app with Azure Functions and CosmosDB project straight out the gate Invited onto the board for the Glasgow Azure User Group where I help organise the meetups Spoke at the first Glasgow Azure Global Bootcamp Organising the 2019 Glasgow Azure Global Bootcamp Feature in the top 20 Featured Azure Blogs https://blog.feedspot.com/microsoft_azure_blogs/ Sat 8 azure exams (7 betas) within 4 months - I knew zero Azure at the start of 2018. Passed the Architecting Microsoft Azure Solutions (70-535 exam) Wrote 49 blog posts mostly on Azure and Azure Devops First ever Open Source PR accepted (for docs.microsoft.com) Self nominated for MVP Passed 2000 followers on Twitter Technical Reviewer for an Azure related book Started recording YouTube video\u0026rsquo;s on Azure Devops Things to look forward to\nLearning more Azure and Azure Devops Starting a podcast (more to come soon) Invited to something special this month (more to come soon) 2 golf holidays before middle of February Passing the Microsoft Azure Solutions Architect Certification Transition (70-302) Exam This year more of the same with a visit to Microsoft Ignite (November) planned and hopefully the Ignite Tour in London late Feb.\n","date":"3 January 2019","externalUrl":null,"permalink":"/2019/01/03/2018-retro/","section":"Posts","summary":"","title":"2018 Retro","type":"posts"},{"content":" This blog post takes a look back at 2018 for me, and what I achieved throughout the year.\nThis time last year I knew absolutely zero, nothing, nada, not a jot about Azure, I decided to change that and 1 year on I passed the Azure Architect 70-535 Exam and I\u0026rsquo;ll try to cover my journey below.\nI have had many a tweet from followers saying that they have been inspired by my learning and so I decided to blog about how I went from literally knowing nothing to passing the Architect exam which has a big learning curve.\nIf there is one thing I am good at, its finding the right resources to learn something, I have a knack of finding the right content and locating the right people to ask for help or to learn from.\nMy original goal for the year was to sit and pass 1 Azure exam, once I got started learning Azure I was instantly hooked, I have now sat 8 Azure exams in the last 3, maybe 4 months (yes I\u0026rsquo;m crazy!, yes I even sat exams at midnight)\nI sat 7 beta exams and my thinking was to sit them and see where my level was and use them as guidance on what I knew, what I thought I knew and what I certainly did not know, each exam cost me £27 so it wasn\u0026rsquo;t a huge expense.\nOk so people seem interested in how I went about it so let\u0026rsquo;s get to that now, here is how I tackled my Azure learning, it was haphazard but when the betas came out I had little time to learn what I needed to learn before the discounts expired.\nRead through the exams and start off with one of the easier ones (none of them are easy when your starting out) I chose the AZ-100 and I think that\u0026rsquo;s not a bad place to start Read the website link for the exam carefully especially the skills measured (these can be updated from time to time) Search google for people blogging about their study notes Use links like mine for finding useful study resources I used udemy and Scott Duffy\u0026rsquo;s courses and Pluralsight (too may authors to thank here, see below) I signed up to his Facebook Azure Exams User Group (Only thing I used Facebook for) After a couple of weeks I booked the exam 2 weeks in advance (that forces you to study) I used Azure a lot as nothing beats hands on experience - this is very important! Practice is the only way I really learn something and remember it Focus\nI used to sit and watch a lot of crap on tv and binge watch season\u0026rsquo;s on Netflix, I cut down the amount of tv I watched, just stopped it altogether, I\u0026rsquo;ve barely watched a thing this past year on Netflix.\nIf I want to learn Azure it required being laser focused and dedicated to the subject. I would say on average I was spending 10+ hours a week at night after work just studying and using the tools within Azure, now this isn\u0026rsquo;t possible for everyone so maybe I can list some of the best resources I found and my tips for learning Azure, lets come back to that later on.\nMotivation\nSo what was the motivation for doing this amount of learning and almost giving up watching tv - mad right?, I know your thinking that.\nWhen I want to learn something I reckon I\u0026rsquo;m pretty good at finding good resources for learning a subject.\nThe motivation came from last December (2017) I read up on tech, what was going to be big and its clear to see that the cloud is huge, I wanted to learn something new as well, having been a .NET developer since .NET first came out, I had tired of the new front end JavaScript frameworks coming out every week or every day and that just wasn\u0026rsquo;t floating my boat, .NET core was still not something that wasn\u0026rsquo;t grabbing my attention based on tweets I was reading about it at the time, so I chose to learn some Azure.\nHow I got started\nI decided to start by first of all taking my time, I didn\u0026rsquo;t dive right in, I looked around, read some blog posts, but always ended up back at the docs.microsoft.com - which by the way is awesome.\nI check out the beginner courses on Pluralsight, searched for Azure and off I went - the more I read the more I thought this is very cool stuff, I just got immersed into it and my learning became quite addictive, its when you first deploy something to Azure your like wow that was super easy, what can I do next, and so I just kept at it.\nAfter a month, maybe two I decided to think I may as well check out the certifications, if I\u0026rsquo;m learning Azure I may as well see what\u0026rsquo;s involved in the certifications, so I checked out the Azure certifications, looked for advice on where to get started and it was looking like one of the exams was easier of the 3 available, so I got reading.\nAfter some time I took a practice test and got 12% I think maybe slightly higher, I had very little idea what the questions were talking about, I still hadn\u0026rsquo;t even heard of some of the content in the questions - that drove me to keep going and learn even more rather than getting despondent, I did the Pluralsight IQ test thing they do and it was slowly going up over time - any progress is good progress right? - I mean I\u0026rsquo;m learning, I\u0026rsquo;m investing in myself and what harm can that ever do?\nSo my thinking changed after a wee while, I\u0026rsquo;m not a network/infrastructure type person, I am a developer, I\u0026rsquo;ll study for the Azure Dev exam. I booked my first Azure exam for the 9th of March, I had been studying since December and thought why not, I failed the exam and was pretty disappointed, it was clear I didn\u0026rsquo;t know enough I got 670 in my first exam needing 700 to pass, I retook the exam on the 30th March having booked it after failing and due to some other stuff coming up I didn\u0026rsquo;t study a huge amount in between and failed it this time with 680, totally different content in this exam after I had reviewed the areas I was weak on last time.\nTwo exams sat both failed, I was pretty low after the second failure, it wasn\u0026rsquo;t a nice feeling as I took the second test in Edinburgh and it wasn\u0026rsquo;t a nice feeling driving home - by the time I got home and sat down I thought right refocus and just keep going, fail fast as they say.\nTwitter\nTwitter is without doubt my favourite place to learn believe it or not, I follow all the MVP\u0026rsquo;s I come across, I follow as many people I can who tweet about Azure, the Azure team members at Microsoft, anyone who mentions Azure I check out their tweets and if there\u0026rsquo;s learning potential I follow them - I highly recommend doing this if your serious about learning Azure, and if your serious about learning anything technical locate the people you need to be following, engage with them ask questions etc and learn.\nI have made some great friends on twitter special mention to Julie Lerman @julielerman ,Richard Hooper @Pixel_Robots, Sam Smith @samsmithnz , Aaron Ralls @cajunAA - the people I chat to the most on twitter.\nFrom twitter alone this year in 2018, I have been asked to write two books and do training for a cloud training company.\nBlog\nThe reason I started blogging was to write down things I came across that I would forget, blogging meant I could come back to it later and find the answers, now I\u0026rsquo;ve moved on to help other people with what I have learned and share the knowledge, it also ensures I have read into the subject enough so that I at least know what I am talking about.\nIf you aren\u0026rsquo;t a blogger then you should look into getting started, it\u0026rsquo;s very easy to do and can open up new opportunities for you gong forward.\nI took part in the C# blog Advent Calendar this year which was fun to do.\nTips for Learning Azure\nI will list my tips I would suggest for learning azure the way I did below: -\nCreate a free account and play around with Azure, hands on is the best way to learn for me. Read https://docs.microsoft.com/en-us/azure/ Go through Microsoft Learn also free and exceptionally useful Make use of Free Pluralsight via https://visualstudio.microsoft.com/dev-essentials/ Use the Free eDX Courses - very good courses on here too. Follow Michael Crump\u0026rsquo;s list of tips - https://www.michaelcrump.net/azure-tips-and-tricks-complete-list/ I used @scottjduffy Azure training on Udemy - which is brilliant stuff! I also signed up to Scott\u0026rsquo;s Azure Facebook User Group Community\nBeing asked to help organize the Glasgow Azure user Group was one of the highlights of the year for me, I get to help the Azure community in Scotland and this is both fun and educational in a number of ways, learned a lot from doing this, particular thanks to Sarah Lean @techielass for asking me to help out.\nI also reached out to several of the Microsoft Azure folks asking questions, looking for advice etc, the responses have always been very helpful.\nGoals\nSetting goals I think is an important step, I wrote one goal up above my pc monitors which I haven\u0026rsquo;t achieved and its there to remind me to stay focused on that very goal.\nMy goals for 2018 were as follows:-\nLearn Azure and pass an Azure Exam Get a new job, hopefully one where I could manage people Blog a lot more Join a user group Do some open source work and submit some PR\u0026rsquo;s Get involved in the community way more So how did that pan out?\nLearn Azure and pass an Azure Exam\nI learned way more Azure than I thought possible in one year, I passed to Azure Architect 70-535 exam\nGet a new job, hopefully one where I could manage people\nI\u0026rsquo;m now Head of Development Services for a company here in Glasgow and loving it\nBlog a lot more\nAlmost 30 blog posts this year mainly round Azure and Azure Devops\nJoin a user group\nWas invited onto the board for the Glasgow User Group and help run them ever second month\nDo some open source work and submit some PR\u0026rsquo;s\nNeed to do more open source work but did get a couple done, way more on that front to come.\nGet involved in the community way more\nManaged a couple of pull requests but not enough for my liking\nIn summary its been a good year, I\u0026rsquo;ve learned a tonne of Azure, made some great friends on twitter and at the user group and I generally feel 2019 is going to be an amazing year, I am going to be starting an Azure podcast with a good friend of mine from twitter, more to come in January.\nThank You\nI wanted to thank a few people who have helped me with Azure over the past 12 months, its been challenging but very rewarding, I punched the air after passing the Architect exam and was chuffed for a few days after it to be honest. It\u0026rsquo;s not possible to list them all but the one thing I always do is thank the person who has helped me, its nice to be nice and the best part in all of this has been able to help other people just starting out their journey to learn some Azure.\nSpecial mention to the following for their amazing learning resources:-\nScott Duffy - @scottjduffy Barry Luijbregts - @AzureBarry Mike Pfeiffer - @mike_pfeiffer\nHere\u0026rsquo;s to an Azure filled 2019, and look out for the new podcast and the Glasgow version of the Azure Global Bootcamp which I\u0026rsquo;m organising in 2019, it\u0026rsquo;s on April.\np.s. Ping me on twitter If I can help you on your journey, I love to be able to help people and more than happy to help.\n","date":"27 December 2018","externalUrl":null,"permalink":"/2018/12/27/ambition-and-drive-to-learn-azure/","section":"Posts","summary":"","title":"Ambition and Drive to Learn Azure","type":"posts"},{"content":"This blog post is part of the The Second Annual C# Advent by Matthew Groves which is a C# advent calendar of blog posts by the community which uses C# to cover a topic of your choosing - I chose to show how to use Azure Blob Storage from C# and created a simple console application to upload images from a folder on your local computer and push the images into Azure Blob Storage.\nTo see all of the other blog posts for the C# advent calendar take a look here\nThe sample code for this blog post can be found on github\nThe following will show you how to create and access blobs using C#\nLog into your Azure account or create a free one Create a new Resource Group and call it something like BlobStorageCSharp Next Add a new Resource, and search for Storage and then select the following highlighted Storage account - blob, file, table, queue) The code example will show how to create a container which will upload the images into a container in blob storage up into your Azure storage account.\nThe code makes use of Azure Blob Storage from C# to create a public blob storage container called xmasimages-container if it doesn\u0026rsquo;t exist already making use of the following:-\nAnd then upload images found in a folder on your local machine and stores the images into the public blob storage container.\nYou can read more on blob storage container\u0026rsquo;s and using C# to work with Azure storage\nOnce the images have been uploaded you could use Azure Storage explorer to view them.\nOnce you have downloaded and ran the code from my repo above, open up storage explorer and follow the steps below:-\nSign into your Azure Subscription Expand Storage Account Expand Blob Containers Locate your container (xmasimages-container) Highlight an image on the right hand side Click Download or double-click and open it using any image viewer. Viola - you\u0026rsquo;ve uploaded images and now you can view them It\u0026rsquo;s a simple demo and there is a lot more you could continue with, so go grab the code, modify and extend it by doing some of the following: -\nChange the code to make use of Azure Key Vault to store the connection string to your blob storage container Extend the code to list the files within your container Thanks to Matt Groves for doing the C# advent calendar, mind and check all the other great content here.\nMerry Christmas and enjoy! Gregor\n","date":"23 December 2018","externalUrl":null,"permalink":"/2018/12/23/azure-blobs-from-c-and-visual-studio-c-advent-calendar/","section":"Posts","summary":"","title":"Azure Blobs from C# and Visual Studio - C# Advent Calendar","type":"posts"},{"content":"","date":"23 December 2018","externalUrl":null,"permalink":"/tags/c%23/","section":"Tags","summary":"","title":"C#","type":"tags"},{"content":"","date":"23 December 2018","externalUrl":null,"permalink":"/categories/nuget/","section":"Categories","summary":"","title":"NuGet","type":"categories"},{"content":"Its about time your AzureDevops builds were scanning for OSS vulnerabilities, well your in luck as you can use this Marketplace Extension which is FREE: - https://marketplace.visualstudio.com/azuredevops/\nOne you add the extension to your Organization you can add it into your build like so:-\nThis will scan your oss code and give you a detailed report on any vulnerabilities within your Azure Devops repository - #winning.\nI have added it to a build I have and here is a sample of the report which you\u0026rsquo;ll see produced once you\u0026rsquo;ve added it into the build step.\nThe report looks like this: -\nAnd below this you\u0026rsquo;ll see the following: -\nAn you\u0026rsquo;ll also see this: -\nAnd this:-\nNow you\u0026rsquo;ll get a report on open source vulnerabilities in your builds :)\n","date":"29 November 2018","externalUrl":null,"permalink":"/2018/11/29/azure-devops-oss-scanning-using-whitesource/","section":"Posts","summary":"","title":"Azure Devops - OSS Scanning using WhiteSource","type":"posts"},{"content":"In this series of blog posts I will cover Azure Devops, I\u0026rsquo;ll cover the following\nWhat is Azure Devops How to get started with Azure DevOps Azure Pipelines Azure DevOps – How to do a fully automated release (Part 1) Azure DevOps – How to do a fully automated release (Part 2) Azure DevOps – How to do a fully automated release (Part 3) Azure Devops - Pull Requests (Coming Soon) Azure Devops - Code Reviews (Coming Soon) Azure Devops - Gated Releases (Coming Soon) Azure Boards (Coming Soon) And many more, check back regularly for more on the above.\nPlease ping me if you have any questions or want something covered which I haven\u0026rsquo;t mentioned thus far.\n","date":"14 November 2018","externalUrl":null,"permalink":"/2018/11/14/azure-devops/","section":"Posts","summary":"","title":"Azure Devops","type":"posts"},{"content":"Ok so Part 1 covered how to do a manual build of a .NET Core Web App and now I’ll show how to do a manual deployment of the project.\nPart 2 covered creating a manual release from the build in Part 1\nIn Part 3 I\u0026rsquo;ll cover the magic sauce that make it possible to set up continuous deployment so that when you commit your code its automagically built and deployed.\nAutomated Builds\nOk so start by going to Pipelines and then select Builds Click on Edit to Edit the build we created in Part 1 Select Triggers and then click on Enable Continuous Integration and then click Save And Queue like so Once you\u0026rsquo;ve saved check in a commit and the code will trigger the automated build.\nAutomated Deployments\nOk so start by going to Pipelines and then select Releases Edit the release you had previously created in Part 2 Click the lightning icon on the Artifacts part of the release and then click to enable Continuous deployment trigger like so, click Save. So now if you commit code, you\u0026rsquo;ll have an automated build and release pipeline using continuous integration and continuous deployment (CI / CD) - way to go!\n","date":"14 November 2018","externalUrl":null,"permalink":"/2018/11/14/azure-devops-how-to-do-a-fully-automated-release-part-3/","section":"Posts","summary":"","title":"Azure DevOps – How to do a fully automated release (Part 3)","type":"posts"},{"content":"Ok so Part 1 covered how to do a manual build of a .NET Core Web App and now I\u0026rsquo;ll show how to do a manual deployment of the project.\nPart 2 will cover creating a manual release from the build in Part 1 (I\u0026rsquo;m assuming your manual build is working)\nBefore starting this please manually create a Resource Group, App Service Plan and an App Service within the Azure Portal, for this demo I created the following:\nResource Group called BlogPostDemoRG AppService Plan called BlogPostDemoAppPlan App Service called BLogPostDemo\nSo back in Azure Devops (devops.azure.com/) Under Pipelines (on the left) click on Releases Choose New Pipeline Choose Azure App Service deployment Click on Artifacts + Add Select the Source and then Click Add At this point you should see something like so Setup the Stage\nEnter a Stage Name (leave it as Stage 1 for now), then close the right hand screen Click where it says 1 job, 1 task (it should be red currently as some settings need to be supplied) Add a New Task Choose the Azure App Service Deploy Task Fill in the settings which are red Choose your Azure Subscription Click Authorize and sign in to your Azure Subscription Select your already created App Service (I called my blogpostappdemo) Where it says Package or folder click the ellipses and browse to the drop folder like so Click Ok Click Save to save your changes Deploy Time\nAt this point you should be able to deploy the code From the Top Click Release, Create a Release Enter Stage 1 as the stages for a trigger change (or whatever you called it in step 4) Select the Artifact from the drop down (artifact is basically which version of the code do you wish to deploy) Click Create In Green header you\u0026rsquo;ll see that a Release has been created, click on it Underneath the Stage 1 in middle of the screen it\u0026rsquo;ll say not deployed, select Deploy once you hove over that part Click Deploy, then click where it says In Progress Once the build succeeds go back to the Azure Portal and locate your App Service and click on the url to launch the site Congrats you should now have your first Azure Devops manual build and now your first manual release, but lets not stop there as this is only us getting warmed up, how about in Part 3 we automate both the build and the release.\n","date":"14 November 2018","externalUrl":null,"permalink":"/2018/11/14/azure-devops-how-to-do-a-fully-automated-release-part-2/","section":"Posts","summary":"","title":"Azure DevOps - How to do a fully automated release (Part 2)","type":"posts"},{"content":"I managed to get an automated build of some new code tonight and I ran into some issues which I have now resolved, so here are the steps to create a fully automated build and release of a brand new .net core web app using Visual Studio and Azure DevOps.\nPart 1 will cover creating a manual build\nCreate a DevOps Organization Create a brand new .Net Core Web App in Visual Studio( File, New Project, .Net Core, Asp.Net Core Application) Call it anything you like I called my BlogPostDemo Choose Web Application (Model-View-Controller) Click ok Make sure you have the following VS Extension installed - GitHub Extension for Visual Studio Then do File -\u0026gt; Add to Source Control From Team Explorer select Sync Then where it says Push To Azure DevOps -\u0026gt; Click Publish to Git Repo Make sure your Azure DevOps Organisation is selected and give the Repository a name e.g. (BlogPostDemo) Click Publish You should now be able to see this if you click on Repos within Azure Devops Ok so now we have the code in place, let\u0026rsquo;s do a build and make sure the code builds within the repo in Azure DevOps. To create a release I did the following:-\nClick on Pipelines and then Builds Click new Pipeline Be careful here, I selected to use the visual designer which you can see here:- Then I left the default choices (Azure Repos Git, BlogPostDemo, BlogPostDemo, master branch), click Continue Then I add a ASP.NET Core Template (this gives you Restore, Build, Test, Publish, Publish Artifact steps for you) Click Save and Queue It\u0026rsquo;s important to note that at this stage the build is going to be a manual build, we will come back to it and make it an automated build (and release) later on.\nPart 2 will cover doing a manual Release and in Part 3 we will make the whole thing automated.\n","date":"13 November 2018","externalUrl":null,"permalink":"/2018/11/13/azure-devops-how-to-do-a-fully-automated-release-part-1/","section":"Posts","summary":"","title":"Azure DevOps - How to do a fully automated release (Part 1)","type":"posts"},{"content":" Recently came across some very useful links for moving to Azure and thought they may be of some use to others as well, the content below covers things like best practice for subscriptions, resource group usage naming conventions, security and more\u0026hellip;\nAzure Governance - https://docs.microsoft.com/en-gb/azure/architecture/cloud-adoption/appendix/azure-scaffold?toc=%2Fazure%2Fazure-resource-manager%2Ftoc.json Azure Security - Secure DevOps Kit for Azure (AzSK) - https://github.com/azsk/DevOpsKit-docs News and information from the Azure security and compliance teams - https://blogs.msdn.microsoft.com/azuresecurity/ Introduction to Azure Security - https://docs.microsoft.com/en-us/azure/security/azure-security Azure Security Documentation - https://docs.microsoft.com/en-us/azure/security/ ","date":"11 November 2018","externalUrl":null,"permalink":"/2018/11/11/azure-governance-and-security/","section":"Posts","summary":"","title":"Azure Governance and Security","type":"posts"},{"content":" Azure DevOps allows you to Continuously build, test, and deploy to any platform and cloud. With Azure DevOps gives you 1,800 free minutes for CI / CD (30 hours per month)\nIf your project is open source (public Git repo on any Git Service), you get 10 free parallel pipelines per month.\nTo get started with Azure Pipelines I used https://azuredevopsdemogenerator.azurewebsites.net/ to create a project within Azure DevOps for this walk-through I selected the PartsUnlimited Template. This project is a .Net core application and uses the scrum Azure Board type, full source code can be found on GitHub here - https://github.com/Microsoft/PartsUnlimited From there I cloned the repo locally and made sure I can run it locally - always a good first step in my opinion.\nNow I wish to create a build pipeline so here are the steps I carried out to first of all create a new build pipeline:-\nClick on Builds under Pipelines on the left hand menu Click New, then select new Build Pipeline I then chose use the visual designer (easier than using yaml in my opinion) as below:- Select Azure Repos Git Select Azure Repos Git and Master branch Choose Azure Web App for ASP.NET and then select Apply Within Tasks I normally delete the Azure App Service Deploy Task (right-click on it remove selected task) You should have something that resembles the screen shot below: - Once your happy with the settings select Save and Queue (If its grayed out you\u0026rsquo;ve missed a setting - normally in red) Build succeeded and you just created your first Azure DevOps Build - congrats! After that its time to experiment with other types of projects and build\u0026rsquo;s, one way to do this is to look at samples and play with them and look at what\u0026rsquo;s possible. A great resource for doing this is again using the https://azuredevopsdemogenerator.azurewebsites.net/ generator, this time lets use the SmartHotel360 app, like so: -\nClick Create project and let that install Once Installed select the Pipelines icon and then choose Builds Now choose Edit and you can see the way this build has been constructed From here you can view the actions and see what each of them is doing Once you have had a look at each step, Click Queue to queue a new build Read more on Azure Pipelines here: - https://azure.microsoft.com/en-us/services/devops/pipelines/\n","date":"11 November 2018","externalUrl":null,"permalink":"/2018/11/11/azure-pipelines/","section":"Posts","summary":"","title":"Azure Pipelines","type":"posts"},{"content":" Like me you may need to document your Azure Architecture and over the last few days I have came across some decent materials for doing just that and I thought I should share with you me findings, so here goes: -\nAzure Solutions Architectures - https://azure.microsoft.com/en-us/solutions/architecture/ Microsoft 3D Visio How to walk through - https://www.youtube.com/watch?v=Tag2HNAJh4Y\u0026amp;feature=youtu.be Microsoft 3D Visio Template - https://www.microsoft.com/en-us/download/confirmation.aspx?id=48243 Microsoft Azure, Cloud and Enterprise Symbol / Icon Set - Visio stencil, PowerPoint, PNG, SVG https://www.microsoft.com/en-us/download/details.aspx?id=41937 Armed with the above you can go off and create your Azure Architecture documents with ease - enjoy!\n","date":"3 November 2018","externalUrl":null,"permalink":"/2018/11/03/document-your-azure-achitecture/","section":"Posts","summary":"","title":"Document your Azure Architecture","type":"posts"},{"content":"","date":"31 October 2018","externalUrl":null,"permalink":"/categories/blogtober2018/","section":"Categories","summary":"","title":"Blogtober2018","type":"categories"},{"content":"In this series of blog posts I cover Azure DevOps, formerly known as Visual Studio Team Services (VSTS).\nSo what is it and more importantly what can I do with it?\nAzure DevOps has been split up into 5 main areas which are: -\nIf you want to get a head start with Azure DevOps and get generate a full Azure DevOps instance you can find out how to do this in 5 easy steps in my blog post on how to get started here:- https://gregorsuttie.com/2018/10/31/how-to-get-started-with-azure-devops/\nSo lets take each one in turn:-\n**Azure Pipelines - https://gregorsuttie.com/2018/11/11/azure-pipelines/ Azure Boards - Coming soon\u0026hellip; Azure Repos - Coming soon\u0026hellip; Azure Artifacts - Coming Soon\u0026hellip; Azure Test Plans - Coming Soon\u0026hellip; **\nYou can read all the docs on Azure DevOps here: - https://docs.microsoft.com/en-us/azure/devops/?view=vsts and follow their twitter account here: - https://twitter.com/AzureDevOps\n","date":"31 October 2018","externalUrl":null,"permalink":"/2018/10/31/what-is-azure-devops/","section":"Posts","summary":"","title":"What is Azure DevOps?","type":"posts"},{"content":"Ok so Azure Devops (formerly Visual Studio Team Services) is out and you have heard good things and want to get started playing around with it.\nHow would you like to start off with a ready made Azure DevOps template that sets up a lot of the stuff for you and lets you learn how to use it and do whatever you want to it for free?\nMore info on the solution which we will install below can be found here: - https://github.com/Microsoft/SmartHotel360-Website\nAh what is SmartHotel360 I hear you ask, ok read here: - https://azure.microsoft.com/en-gb/campaigns/smarthotel360/\nFor instructions on how to setup SmartHotel360 read here:-\nOpen up Visual Studio or VS Code Clone the following repo at: - https://github.com/Microsoft/SmartHotel360-Website Here is a screen shot on what to do:- I opened this up in Visual Studio 2107 and then built and ran it and you get the full blown website like below: -\nIn order to get started with AzureDevops follow these simple steps: -\nBrowse to devops.azure.com Sign Up Create a new Organization Browse to https://azuredevopsdemogenerator.azurewebsites.net/ Sign In Fill out the form like so So what are you waiting for go play with AzureDevops for free and learn how to use the amazing functionality that comes with it - enjoy!\nCheck back soon for much more on Azure DevOps!\n","date":"31 October 2018","externalUrl":null,"permalink":"/2018/10/31/how-to-get-started-with-azure-devops/","section":"Posts","summary":"","title":"How to get started with Azure DevOps","type":"posts"},{"content":" I have sat 6 of the** Azure Beta** exams in the last couple of months and I just wanted to jot down my thoughts on each of the exams which will hopefully help people who are thinking of doing them in the upcoming months.\nYou can find out a lot of good info on these exams here:- https://www.microsoft.com/en-us/learning/azure-exams.aspx\nI started with the Azure Administrator Beta exams:-\nAZ-100 https://www.microsoft.com/en-us/learning/exam-AZ-100.aspx AZ-101 https://www.microsoft.com/en-us/learning/exam-AZ-101.aspx\nThe 2 exams above are now no longer in Beta and are essentially live and good to go.\nThese exams are the best place to get started in my opinion, recommend you start with these if you haven\u0026rsquo;t already,\nNext up I sat the Azure Architect beta exams:-\nAZ-300 - https://www.microsoft.com/en-us/learning/exam-AZ-300.aspx AZ-301 - https://www.microsoft.com/en-us/learning/exam-az-301.aspx\nThe 2 exams above are still in Beta and wont go live till the start of January 2019.\nNote:- There are a few coding questions on this exam, so if you\u0026rsquo;re an architect that isn\u0026rsquo;t hands on I recommend you spend some time doing so, otherwise you might feel disappointed/frustrated after sitting the exam.\nNext up I sat the Azure Developer beta exams:-\nAZ-200 - https://www.microsoft.com/en-us/learning/exam-az-200.aspx AZ-201 - https://www.microsoft.com/en-us/learning/exam-az-201.aspx\nThe 2 exams above are still in Beta and wont go live till the start of January 2019.\nNote:- These two exams were very tough for me, I am a developer, now manager and not hands on writing code day in and day out and unless you really know Azure from writing code against it, I think you will struggle on these exams.\nThe AZ-200 is hard but the AZ-201 is really hard in my opinion, even harder when you find a bug in a radio button and you can\u0026rsquo;t select your answer.\nOverall the exams are pretty good, there are some cross over questions from one exam to the other which I wasn\u0026rsquo;t expecting, but probably makes sense.\nQuestion:- Which exams should I take first? Answer:- Obviously it depends on your skill set, but I would probably say start with the Administrator exams if your starting out, many people have already passed the beta and there will be practice tests and useful blog posts already available for this exam. https://gregorsuttie.com/2018/07/18/microsoft-azure-infrastructure-and-deployment-beta-az-100/ - so my answer would be do the Administrator, Architect, Developer exams if your able to do them all.\nQuestion:- Are there any new types of exam questions? Answer:- Not that I have seen so far.\nQuestion:- Are they hard? Answer:- Again depends on your experience, Administrator, Architect, Dev is for me going up the scale in how difficult they were for me, but that\u0026rsquo;s my own personal take on the exams. My favourite exam was the AZ-301 exam.\nQuestion:- Why are you sitting all these exams, are you insane? Answer:- I want to learn as much Azure as possible, yes I wont pass some of the exams, maybe even not ever, but that\u0026rsquo;s ok, it shows me where my knowledge is weak and where I need to go learn more.\nFinal thoughts:-\nI would encourage everyone to get hands on, reading material isn\u0026rsquo;t going to get you a pass on any of these exams, especially the Developer exams, there is a lot of content and they focus on the newer technologies that are out. I spent a lot of time reading and going over some topics that haven\u0026rsquo;t appeared in any of the exams, that\u0026rsquo;s fine and at least I have learned these topics.\nI think that rather than being an expert in any particular area my overall Azure skills have increased a fair bit, I now know which tools to use and why, if not the low-level details that sometimes get asked in the exams.\nThe longer you wait the more study materials and practice tests will appear\nBest of luck to you all!, and let me know how you get on and how you thought the exams went.\n","date":"27 October 2018","externalUrl":null,"permalink":"/2018/10/27/new-azure-exams-my-thoughts-on-them/","section":"Posts","summary":"","title":"New Azure Exams - My thoughts on them","type":"posts"},{"content":" Microsoft recently released information around the new Azure DevOps exam: – https://www.microsoft.com/en-us/learning/exam-az-400.aspx\nThis blog post will cover available learning materials and docs links to information relevant to the exam AZ-400, links to these articles will be updated regularly.\nHopefully this will give you a head start on what you need to learn in order to pass the AZ-400 exam.\nUPDATE: The following course is the best study resource I have found before I sat and passed this exam: -\nhttps://openedx.microsoft.com/courses/course-v1:Microsoft+AZ-400.1+2019_T1/about These 2 are also very good: -\nhttps://www.mssqltips.com/sqlservertip/5912/study-material-for-exam-az400-microsoft-azure-devops-solutions-beta/ https://azurementor.wordpress.com/2018/11/18/how-to-pass-the-az-400-microsoft-azure-devops-solutions-beta-exam/ Introducing Azure DevOps - https://azure.microsoft.com/en-us/blog/introducing-azure-devops/ and https://azure.microsoft.com/en-us/solutions/devops/\nAnd how about some free Azure DevOps labs - https://azuredevopslabs.com/\nCheckout Donovan Brown and others demoing off Azure Devops - https://www.youtube.com/watch?v=FWmcGK714IE\nDesign a DevOps Strategy (20-25%) Recommend a migration and consolidation strategy for DevOps tools - Analyze existing artifact (e.g. deployment packages, NuGet) and container repositories\nAnalyze existing test management tools Analyze existing work management tools Recommend migration and integration strategies for artifact repositories, source control, test management, and work management Azure Test Plans - https://azure.microsoft.com/en-gb/services/devops/test-plans/ Azure Boards - https://docs.microsoft.com/en-us/azure/devops/boards/get-started/what-is-azure-boards?view=vsts\u0026amp;tabs=new-nav Migrate to Azure DevOps - https://docs.microsoft.com/de-de/azure/devops/articles/migration-overview?view=vsts\nDesign and implement an Agile work management approach - Identify and recommend project metrics, KPIs, and DevOps measurements (e.g. cycle time, lead time, Azure Kubernetes Service, WIP limit)\nImplement tools and processes to support Agile work management Mentor team members on Agile techniques and practices Recommend an organization structure that supports scaling Agile practices Recommend in-team and cross-team collaboration mechanisms Implement tools and processes to support Agile work management - https://docs.microsoft.com/en-us/azure/devops/boards/get-started/what-is-azure-boards?view=vsts\u0026amp;tabs=new-nav Design a quality strategy - Analyze existing quality environment\nIdentify and recommend quality metrics Recommend a strategy for feature flag lifecycle Recommend a strategy for measuring and managing technical debt Recommend changes to team structure to optimize quality Recommend performance testing strategy Design a secure development process - Inspect and validate code base for compliance\nInspect and validate infrastructure for compliance Recommend a secure development strategy Recommend tools and practices to integrate code security validation (e.g. static code analysis) Recommend tools and practices to integrate infrastructure security validation Getting started with the Secure DevOps Kit for Azure (AzSK) - https://azure.microsoft.com/en-gb/resources/videos/azure-friday-getting-started-with-the-secure-devops-kit-for-azure-azsk/ Use InSpec for compliance automation of your Azure infrastructure - https://docs.microsoft.com/en-us/azure/chef/chef-inspec-overview Mindset shift to a DevSecOps culture - https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/security-in-devops Static Code Analyis - https://marketplace.visualstudio.com/items?itemName=Veracode.veracode-vsts-build-extension Learn how to add continuous security validation to your CI/CD pipeline - https://docs.microsoft.com/en-us/azure/devops/articles/security-validation-cicd-pipeline?view=vsts\nDesign a tool integration strategy - Design a license management strategy (e.g. VSTS users, concurrent pipelines, test environments, open source software licensing, DevOps tools and services, package management licensing)\nDesign a strategy for end-to-end traceability from work items to working software Design a strategy for integrating monitoring and feedback to development teams Design an authentication and access strategy Design a strategy for integrating on-premises and cloud resources Implement DevOps Development Processes (20-25%) Design a version control strategy - Recommend branching models\nRecommend version control systems Recommend code flow strategy Git - https://docs.microsoft.com/en-us/azure/devops/learn/git/what-is-git Branch policies - https://docs.microsoft.com/en-gb/azure/devops/repos/git/branch-policies?view=vsts\nImplement and integrate source control - Integrate external source control\nIntegrate source control into third-party continuous integration and continuous deployment (CI/CD) systems Implement and manage build infrastructure - Implement private and hosted agents\nIntegrate third party build systems Recommend strategy for concurrent pipelines Manage VSTS pipeline configuration (e.g. agent queues, service endpoints, pools, webhooks) Pipelines - https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=vsts Concurrent Jobs - https://docs.microsoft.com/en-us/azure/devops/pipelines/licensing/concurrent-jobs-vsts?view=vsts\nImplement code flow - Implement pull request strategies\nImplement branch and fork strategies Configure branch policies Pull Requests - https://blogs.msdn.microsoft.com/devops/2014/06/10/conduct-a-git-pull-request-on-visual-studio-online/ Branch Policies:- https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=vsts https://blogs.msdn.microsoft.com/buckh/2016/03/20/gated-checkin-for-git-using-branch-policies-to-run-a-build-in-vsts-and-tfs/ https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies-overview?view=vsts\nImplement a mobile DevOps strategy - Manage mobile target device sets and distribution groups\nManage target UI test device sets Provision tester devices for deployment Create public and private distribution groups Mobile DevOps - https://channel9.msdn.com/Shows/DevOps-Lab/Real-World-Mobile-DevOps-with-VSTS-and-App-Center UI Tests - https://docs.microsoft.com/en-us/appcenter/test-cloud/vsts-plugin Distribution Groups - https://docs.microsoft.com/en-us/appcenter/distribution/groups\nManaging application configuration and secrets - Imhttps://docs.microsoft.com/en-us/appcenter/distribution/groupsplement a secure and compliant development process\nImplement general (non-secret) configuration data Manage secrets, tokens, and certificates Implement applications configurations (e.g. Web App, Azure Kubernetes Service, containers) Implement secrets management (e.g. Web App, Azure Kubernetes Service, containers, Azure Key Vault) Implement tools for managing security and compliance in the pipeline Secure DevOps Kit for Azure - https://www.microsoft.com/itshowcase/Article/Content/919/Building-cloud-apps-using-the-Secure-DevOps-Kit-for-Azure Manage secrets, tokens and certs - https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=vsts Implement applications configurations (e.g. Web App, Azure Kubernetes Service, containers) - https://azuredevopslabs.com/ Implement secrets management - https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/manage-conditional-access?view=vsts Implement tools for managing security and compliance in the pipeline - https://docs.microsoft.com/en-us/azure/devops/release-notes/2018/sprint-141-update\nImplement Continuous Integration (10-15%) Manage code quality and security policies - Monitor code quality\nConfigure build to report on code coverage Manage automated test quality Manage test suites and categories Monitor quality of tests Integrate security analysis tools (e.g. SonarQube, WhiteSource Bolt, Open Web Application Security Project) Monitor Code Quality - https://docs.microsoft.com/en-us/azure/architecture/example-scenario/apps/devops-dotnet-webapp DevOps Reporting - https://azure.microsoft.com/en-gb/services/devops/reporting/ Automated Testing - https://channel9.msdn.com/Events/Microsoft-Azure/Azure-DevOps-Launch-2018/A104 Test suites and categories - https://www.azuredevopslabs.com/labs/azuredevops/testmanagement/ Integrate security analysis tools - https://docs.microsoft.com/en-us/azure/devops/java/sonarqube?view=vsts\nImplement a container build strategy - Create deployable images (e.g. Docker, Azure Container Registry)\nAnalyze and integrate Docker multi-stage builds Container DevOps in Azure - https://channel9.msdn.com/Events/Build/2018/BRK2142 Add a container registry in Azure - https://www.linkedin.com/learning/developing-container-based-applications-with-visual-studio-and-azure/add-a-container-registry-in-azure and https://blogs.msdn.microsoft.com/devops/2017/06/09/deploying-applications-to-azure-container-service/\nImplement a build strategy - Design build triggers, tools, integrations, and workflow\nImplement a hybrid build process Implement multi-agent builds Recommend build tools and configuration Set up an automated build workflow Design build triggers - https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=vsts\u0026amp;tabs=yaml and https://docs.microsoft.com/en-us/azure/devops/pipelines/release/triggers?view=vsts Azure Pipelines - https://docs.microsoft.com/en-us/azure/devops/pipelines/?view=vsts DevOps tool integrations - https://azure.microsoft.com/en-gb/products/devops-tool-integrations/ DevOps overview for Azure DevOps Services - https://docs.microsoft.com/en-us/azure/devops/user-guide/devops-alm-overview?view=vsts\nImplement Continuous Delivery (10-15%) Design a release strategy - Recommend release tools\nIdentify and recommend release approvals and gates Recommend strategy for measuring quality of release and release process Recommend strategy for release notes and documentation Select appropriate deployment pattern Use the visual designer - https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-designer?view=vsts\u0026amp;tabs=new-nav Use approvals and gates to control your deployment - https://docs.microsoft.com/en-us/azure/devops/pipelines/release/deploy-using-approvals?view=vsts Release approvals and gates overview - https://docs.microsoft.com/en-us/azure/devops/pipelines/release/approvals/?view=vsts Release deployment control using gates - https://docs.microsoft.com/en-us/azure/devops/pipelines/release/approvals/gates?view=vsts\nSet up a release management workflow - Automate inspection of health signals for release approvals by using release gates\nConfigure automated integration and functional test execution Create a release pipeline (e.g. Azure Kubernetes Service, Service Fabric, WebApp) Create multi-phase release pipelines Integrate secrets with release pipeline Provision and configure environments Manage and modularize tasks and templates (e.g. task and variable groups) UI test with Selenium - https://docs.microsoft.com/en-us/azure/devops/pipelines/test/continuous-test-selenium?view=vsts Run Functional Tests task - https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/run-functional-tests?view=vsts Set up environments to run continuous test tasks with your build tasks - https://docs.microsoft.com/en-us/azure/devops/pipelines/test/set-up-continuous-test-environments-builds?view=vsts Run automated tests from test plans - https://docs.microsoft.com/en-us/azure/devops/test/run-automated-tests-from-test-hub?view=vsts Continuously build, test and deploy to any platform and cloud - https://azure.microsoft.com/en-gb/services/devops/pipelines/ Define your multi-stage continuous deployment (CD) pipeline - https://docs.microsoft.com/en-us/azure/devops/pipelines/release/define-multistage-release-process?view=vsts Multi-phase builds – VSTS Sprint 123 Update - https://docs.microsoft.com/en-us/azure/devops/release-notes/2017/sep-15-team-services Release stages, queuing policies, and options - https://docs.microsoft.com/en-us/azure/devops/pipelines/release/environments?view=vsts Multiple jobs - https://docs.microsoft.com/en-us/azure/devops/pipelines/process/multiple-phases?view=vsts\u0026amp;tabs=yaml Azure Key Vault task - https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-key-vault?view=vsts Task and variable groups - https://docs.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=vsts\u0026amp;tabs=yaml Task groups for builds and releases - https://docs.microsoft.com/en-us/azure/devops/pipelines/library/task-groups?view=vsts\nImplement an appropriate deployment pattern - Implement blue-green deployments\nImplement canary deployments Implement progressive exposure deployments Scale a release pipeline to deploy to multiple endpoints (e.g. deployment groups, Azure Kubernetes Service, Service Fabric) Implement blue-green deployments - https://azure.microsoft.com/en-us/blog/blue-green-deployments-using-azure-traffic-manager/ https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/jenkins/jenkins-aks-blue-green-deployment.md Implement progressive exposure deployments - https://blogs.msdn.microsoft.com/devops/2018/05/07/release-gates-enable-progressive-exposure-and-phased-deployments/ https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/progressive-experimentation-feature-flags Explore how to progressively expose your Azure DevOps extension releases in production to validate, before impacting all users - https://docs.microsoft.com/en-us/azure/devops/articles/phase-rollout-with-rings?view=vsts\nImplement Dependency Management (5-10%) Design a dependency management strategy - Recommend artifact management tools and practices\nAbstract common packages to enable sharing and reuse Inspect codebase to identify code dependencies that can be converted to packages Identify and recommend standardized package types and versions across the solution Refactor existing build pipelines to implement version strategy that publishes packages Getting started with package management using Azure Artifacts - https://www.youtube.com/watch?v=b3BPkyikvNM Azure Artifacts - https://azure.microsoft.com/en-gb/services/devops/artifacts/ Secure and share packages using feed permissions - https://docs.microsoft.com/en-us/azure/devops/artifacts/feeds/feed-permissions?view=vsts\u0026amp;tabs=new-nav Collaborate more and build faster with packages - https://docs.microsoft.com/en-us/azure/devops/artifacts/collaborate-with-packages?view=vsts Versioning - https://marketplace.visualstudio.com/items?itemName=gittools.gitversion\nManage security and compliance - Inspect open source software packages for security and license compliance to align with corporate standards (e.g. GPLv3)\nConfigure build pipeline to access package security and license rating (e.g. Black Duck, White Source) Configure secure access to package feeds Configure build pipeline to access package security and license rating (e.g. Black Duck, White Source) - https://marketplace.visualstudio.com/items?itemName=black-duck-software.hub-tfs Configure secure access to package feeds - https://docs.microsoft.com/en-us/azure/devops/artifacts/feeds/feed-permissions?view=vsts\u0026amp;tabs=new-nav\nImplement Application Infrastructure (15-20%) Design an infrastructure and configuration management strategy - Analyze existing and future hosting infrastructure\nAnalyze existing Infrastructure as Code technologies Design a strategy for managing technical debt on templates Design a strategy for using transient infrastructure for parts of a delivery lifecycle Design a strategy to mitigate infrastructure state drift Analyze existing Infrastructure as Code technologies - https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code Design a strategy for managing technical debt on templates - https://www.azuredevopslabs.com/labs/azuredevops/sonarcloud/ Design a strategy for using transient infrastructure for parts of a delivery lifecycle - https://docs.microsoft.com/en-us/dotnet/standard/modernize-with-azure-and-containers/modernize-existing-apps-to-cloud-optimized/reasons-to-modernize-existing-net-apps-to-cloud-optimized-applications Design a strategy to mitigate infrastructure state drift - https://blogs.msdn.microsoft.com/tomholl/2017/10/16/detecting-drift-between-arm-templates-and-azure-resource-groups/\nImplement Infrastructure as Code - Create nested resource templates\nManage secrets in resource templates Provision Azure resources Recommend an Infrastructure as Code (IaC) strategy Recommend appropriate technologies for configuration management Create nested resource templates - https://samcogan.com/modularisation-and-re-use-with-nested-arm-templates/ Manage secrets in resource templates - https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-keyvault-parameter Provision Azure resources - https://blogs.msdn.microsoft.com/azuredev/2017/02/11/iac-on-azure-an-introduction-of-infrastructure-as-code-iac-with-azure-resource-manager-arm-template/ Recommend an Infrastructure as Code (IaC) strategy - https://www.youtube.com/watch?v=eFo9cdxG9Hs\nManage Azure Kubernetes Service infrastructure - Provision Azure Kubernetes Service (e.g. using ARM templates, CLI)\nCreate deployment file for publishing to Azure Kubernetes Service (e.g. kubectl, Helm) Develop a scaling plan Provision Azure Kubernetes Service (e.g. using ARM templates, CLI) - https://www.azuredevopslabs.com/labs/vstsextend/kubernetes/ Create deployment file for publishing to Azure Kubernetes Service (e.g. kubectl, Helm) - https://docs.microsoft.com/en-us/azure/devops-project/azure-devops-project-aks Develop a scaling plan - https://docs.microsoft.com/en-us/azure/devops/organizations/projects/about-projects?view=vsts\u0026amp;tabs=new-nav\nImplement infrastructure compliance and security - Implement compliance and security scanning\nPrevent drift by using configuration management tools Set up an automated pipeline to inspect security and compliance Implement compliance and security scanning - https://docs.microsoft.com/en-us/azure/devops/articles/team-services-security-whitepaper?view=vsts Prevent drift by using configuration management tools - https://docs.microsoft.com/en-us/azure/automation/tutorial-configure-servers-desired-state\nImplement Continuous Feedback (10-15%) Recommend and design system feedback mechanisms - Design practices to measure end-user satisfaction (e.g. Send a Smile, app analytics)\nDesign processes to capture and analyze user feedback from external sources (e.g. Twitter, Reddit, Help Desk) Design routing for client application crash report data (e.g. HockeyApp) Recommend monitoring tools and technologies Recommend system and feature usage tracking tools Design processes to capture and analyze user feedback from external sources - https://docs.microsoft.com/en-us/azure/devops/project/feedback/get-feedback?view=vsts https://docs.microsoft.com/en-us/azure/devops/test/provide-stakeholder-feedback?view=vsts Design routing for client application crash report data (e.g. HockeyApp) - https://hockeyapp.net/features/crashreports/ https://azure.microsoft.com/en-gb/services/hockeyapp/ Recommend monitoring tools and technologies - https://azure.microsoft.com/en-gb/product-categories/management-tools/\nImplement process for routing system feedback to development teams - Configure crash report integration for client applications\nDevelop monitoring and status dashboards Implement routing for client application crash report data (e.g. HockeyApp) Implement tools to track system usage, feature usage, and flow Integrate and configure ticketing systems with development team\u0026rsquo;s work management system (e.g. IT Service Management connector, ServiceNow Cloud Management, App Insights work items) Configure crash report integration for client applications - Develop monitoring and status dashboards - https://azure.microsoft.com/en-us/services/devops/reporting/ Implement routing for client application crash report data (e.g. HockeyApp) - https://azure.microsoft.com/en-gb/services/hockeyapp/\nOptimize feedback mechanisms - Analyze alerts to establish a baseline\nAnalyze telemetry to establish a baseline Perform live site reviews and capture feedback for system outages Perform ongoing tuning to reduce meaningless or non-actionable alerts Analyze alerts to establish a baseline - Perform live site reviews and capture feedback for system outages - https://docs.microsoft.com/en-us/azure/devops/learn/devops-at-microsoft/live-site-culture-and-reliability\n","date":"27 October 2018","externalUrl":null,"permalink":"/2018/10/27/azure-devops-az-400-exam-study-notes/","section":"Posts","summary":"","title":"Azure DevOps AZ-400 Exam - Study Notes","type":"posts"},{"content":" Tip #4 - I need to know how to create a storage account using the Azure CLI . I need to practice these exams tips regularly in order to try to remember them.****\nCreate a new storage account with a resource group, name,location, sku and kind, then do az storage account create passing in 5 parameters.\nSo the points to note for Creating a VM in Azure using the CLI are the following key points:-\nCreate a VM using Azure CLI (know the order) 5 parameters****\nhttps://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=azure-cli\naz group create \u0026ndash;name GregorExamsRG \u0026ndash;location westeurope az storage account create \u0026ndash;name GregorExams2storage \u0026ndash;resource-group GregorExamsRG \u0026ndash;location westeurope \u0026ndash;sku Standard_LRS \u0026ndash;kind StorageV2 ","date":"6 October 2018","externalUrl":null,"permalink":"/2018/10/06/azure-exam-tips-part-4-create-a-storage-account-using-the-azure-cli/","section":"Posts","summary":"","title":"Azure Exam Tips Part 4 – Create a storage account using the Azure CLI","type":"posts"},{"content":" Tip #3 - I need to know how to create a storage account in Azure using PowerShell.\nCreate a new storage account with a resource group, name, location, sku and kind.\nSo the points to note for Creating a storage account in Azure from PowerShell are the following key points:-\nCreate a storage account using PowerShell (know the order) 5** parameters******\nhttps://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=powershell\nNew-AzureRmResourceGroup -ResourceGroupName \u0026ldquo;GregExams\u0026rdquo; -Location \u0026ldquo;WestEurope\u0026rdquo; New-AzureRmStorageAccount -ResourceGroupName GregExams -Name gregexams2storage -Location WestEurope -SkuName Standard_LRS -Kind StorageV2 ","date":"6 October 2018","externalUrl":null,"permalink":"/2018/10/06/azure-exam-tips-part-3-create-a-storage-account-in-azure-using-powershell/","section":"Posts","summary":"","title":"Azure Exam Tips Part 3 – Create a storage account in Azure using PowerShell","type":"posts"},{"content":" Tip #2 - I need to know how to create a Virtual Machine from the Azure CLI . I need to practice these exams tips regularly in order to try to remember them.****\nCreate a new Resource Group with a name and location, then do az vm create and then do az vm open-port passing in 5 parameters.\nSo the points to note for Creating a VM in Azure using the CLI are the following key points:-\nCreate a VM using Azure CLI (know the order) 5 parameters****\nhttps://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-cli\naz group create \u0026ndash;name GregorExamsRG \u0026ndash;location westeurope az vm create \u0026ndash;resource-group GregorExamsRG \u0026ndash;name myVM \u0026ndash;image win2016datacenter \u0026ndash;admin-username azureuser \u0026ndash;admin-password ThisisMyPassword123$ az vm open-port \u0026ndash;port 80 \u0026ndash;resource-group GregorExamsRG \u0026ndash;name myVM ","date":"5 October 2018","externalUrl":null,"permalink":"/2018/10/05/azure-exam-tips-part-2-create-an-azure-vm-using-the-azure-cli/","section":"Posts","summary":"","title":"Azure Exam Tips Part 2 – Create an Azure VM using the Azure CLI","type":"posts"},{"content":"","date":"5 October 2018","externalUrl":null,"permalink":"/tags/blogtober2018/","section":"Tags","summary":"","title":"Blogtober2018","type":"tags"},{"content":" Tip #1 - I need to know how to create a Virtual Machine from PowerShell. Its something I have watched on videos and thought yeah that\u0026rsquo;s easy I can remember that, well turns out my memory isn\u0026rsquo;t so great and so in order to try to improve upon that I\u0026rsquo;m blogging it, and will practice these exams tips regularly in order to try to remember them.****\nCreate a new Resource Group with a name and location, then do a get-credential to use a the logon details to the vm, and then do a New-AzureRmVm passing in 8 parameters.\nSo the points to note for Creating a VM in Azure from PowerShell are the following key points:-\nCreate a VM using PowerShell (know the order) 8 parameters****\nhttps://docs.microsoft.com/en-us/azure/virtual-machines/windows/tutorial-manage-vm\nNew-AzureRmResourceGroup -ResourceGroupName \u0026ldquo;GregorExams\u0026rdquo; -Location \u0026ldquo;WestEurope\u0026rdquo; $cred = Get-Credential (this is where you supply the username and password for logging into the VM once its created) New-AzureRmVm -ResourceGroupName \u0026ldquo;GregorExams\u0026rdquo; -Name \u0026ldquo;GregVM1\u0026rdquo; -Location \u0026ldquo;WestEurope\u0026rdquo; -VirtualNetworkName \u0026ldquo;myVnet\u0026rdquo; -SubnetName \u0026ldquo;mySubnet\u0026rdquo; -SecurityGroupName \u0026ldquo;myNetWorkSecurityGroup\u0026rdquo; -PublicIpAddressName \u0026ldquo;myPublicIPAddress\u0026rdquo; -Credential $cred ","date":"5 October 2018","externalUrl":null,"permalink":"/2018/10/05/azure-exam-tips-part-1-create-an-azure-vm-in-powershell/","section":"Posts","summary":"","title":"Azure Exam Tips Part 1 - Create an Azure VM in PowerShell","type":"posts"},{"content":" As you may or may not know I\u0026rsquo;m on a personal mission to learn as much Azure as I can, its my passion.\nI have taken some of the new beta exams recently and have 4 later this month, I\u0026rsquo;m using the new beta exams as a way to test what I have learnt and to find gaps in my learning.\nThis blog post will cover all of the different ways I am trying to learn Azure and hopefully this will be of use to someone wishing to learn Azure, from a beginner to someone more experienced.\nEverything below is free, yep free.\nTo start with there is no better place than the new Microsoft Learn pages which can be found -\u0026gt; https://docs.microsoft.com/en-us/learn/\nMicrosoft Learn which is completely free has modules and learning paths which currently cover beginner, intermediate and advanced Azure users.\nWithin Microsoft Learn you will also find links to Pluralsight courses, LinkedIn courses and Hands on Labs all of which I would highly recommend, there really is something for everyone. Whilst learning using Microsoft Learn you gain points and trophies and you level up as you go, below you can see where I am currently at and the courses I have completed and trophies you gain as you complete your learning.\nThere will be a lot more added in over time but there is currently 80+ hours of learning material.\nThe Pluralsight courses which are also free cover Azure Administrator, Microsoft Azure Developer and Microsoft Azure Solution Architect as seen below:-\nPluralsight if you sign up for it has the following courses within its library, again a huge number of courses and fantastic content:-\nAlong side that is LinkedIn Learning where you sign up and get a free months trial, LinkedIn Learning is actually very good and there is a tonne of Azure courses in there covering a huge amount of content on Azure. Here is a list of the types of things you\u0026rsquo;ll see if you try out LinkedIn Learning :- https://www.linkedin.com/learning/topics/azure\nOne other great source I wanted to mention was Visual Studio Benefits:- https://visualstudio.microsoft.com/dev-essentials/\nAs you can see, you get 3 Months Free Pluralsight, 3 Months Free LinkedIn Learning, Access to Microsoft Virtual Academy and much more.\nSo what are you waiting for, go learn some Azure skills and enjoy the free content!\n","date":"5 October 2018","externalUrl":null,"permalink":"/2018/10/05/so-you-want-to-learn-some-azure-skillz-for-free/","section":"Posts","summary":"","title":"So you want to learn some Azure skillz for free","type":"posts"},{"content":" Microsoft recently released information around the new Azure Architect exams: – https://www.microsoft.com/en-us/learning/exam-az-300.aspx\nThis blog post will cover available learning materials and docs links to information relevant to the exam AZ-300, links to these articles will be updated regularly.\nHopefully this will give you as an architect a head start on what you need to learn in order to pass the AZ-300 exam.\nDeploy and Configure Infrastructure (25-30%) Analyze resource utilization and consumption\nMay include but not limited to: Configure diagnostic settings on resources; create baseline for resources; create and rest alerts; analyze alerts across subscription; analyze metrics across subscription; create action groups; monitor for unused resources; monitor spend; report on spend; utilize Log Search query functions; view alerts in Log Analytics\nConfigure diagnostic settings on resources https://azure.microsoft.com/en-gb/blog/azure-monitor-multiple-diagnostic-settings/ https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-of-diagnostic-logs https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-enable-diagnostic-logs-using-template\nCreate baseline for resources https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-alerts-dynamic-thresholds\nCreate and raise alerts; Analyze alerts across subscription https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitor-alerts-unified-usage\nMonitor for unused resources; monitor spend; report on spend https://docs.microsoft.com/en-us/azure/advisor/advisor-overview https://docs.microsoft.com/en-us/azure/billing/billing-getting-started https://docs.microsoft.com/en-us/azure/billing/billing-understand-your-bill\nUtilize Log Search query functions; https://docs.microsoft.com/en-gb/azure/log-analytics/log-analytics-queries\nView alerts in Log Analytics https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-solution-alert-management https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-unified-alerts\nCreate and configure storage accounts\nMay include but not limited to: Configure network access to the storage account; create and configure storage account; generate shared access signature; install and use Azure Storage Explorer; manage access keys; monitor activity log by using Log Analytics; implement Azure storage replication\nConfigure network access to the storage account; https://azure.microsoft.com/en-gb/blog/announcing-virtual-network-integration-for-azure-storage-and-azure-sql/\nCreate and configure storage account https://docs.microsoft.com/en-us/azure/storage/common/storage-quickstart-create-account?tabs=portal https://www.pluralsight.com/courses/microsoft-azure-creating-configuring-storage-accounts\nGenerate shared access signature https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-dotnet-shared-access-signature-part-2 https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token\nInstall and use Azure Storage Explorer https://azure.microsoft.com/en-gb/features/storage-explorer/\nManage access keys; https://docs.microsoft.com/en-us/azure/key-vault/key-vault-ovw-storage-keys https://docs.microsoft.com/en-us/azure/storage/common/storage-account-manage\nMonitor activity log by using Log Analytics https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-activity https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-activity-log-alerts https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-activity-logs\nImplement Azure storage replication https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy-grs\nCreate and configure a Virtual Machine (VM) for Windows and Linux\nMay include but not limited to: Configure high availability; configure monitoring, networking, storage, and virtual machine size; deploy and configure scale sets\nOverview https://docs.microsoft.com/en-us/azure/virtual-machines/linux/\nConfigure high availability https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-availability-sets https://docs.microsoft.com/en-us/azure/virtual-machines/linux/manage-availability\nConfigure monitoring, networking, storage, and virtual machine size https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-monitoring\nDeploy and configure scale sets https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-create-vmss\nAutomate deployment of Virtual Machines (VMs)\nMay include but not limited to: Modify Azure Resource Manager (ARM) template; configure location of new VMs; configure VHD template; deploy from template; save a deployment as an ARM template; deploy Windows and Linux VMs\nModify Azure Resource Manager (ARM) template https://docs.microsoft.com/en-us/azure/devops/pipelines/apps/cd/azure/build-azure-vm-template?view=vsts\nConfigure location of new VMs https://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-portal https://docs.microsoft.com/en-us/azure/virtual-machines/windows/tutorial-manage-vm\nConfigure VHD template https://docs.microsoft.com/en-us/azure/virtual-machines/windows/create-vm-specialized https://docs.microsoft.com/en-us/azure/virtual-machines/windows/prepare-for-upload-vhd-image https://azure.microsoft.com/en-gb/resources/templates/201-vm-specialized-vhd-new-or-existing-vnet/\nDeploy from template https://docs.microsoft.com/en-us/azure/virtual-machines/windows/ps-template https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-ssh-secured-vm-from-template\nSave a deployment as an ARM template https://docs.microsoft.com/en-us/azure/lab-services/devtest-lab-use-resource-manager-template https://docs.microsoft.com/en-us/azure/virtual-machines/windows/download-template\nDeploy Windows and Linux VMs https://azure.microsoft.com/id-id/services/virtual-machines/\nCreate connectivity between virtual networks\nMay include but not limited to: Create and configure VNET peering; create and configure VNET to VNET; verify virtual network connectivity; create virtual network gateway\nCreate and configure VNET peering; create and configure VNET to VNET http://www.msserverpro.com/configuring-azure-vnet-peering-using-azure-portal/ https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-vnet-vnet-resource-manager-portal https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-vnet-vnet-rm-ps\nVerify virtual network connectivity; https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-portal#VerifyConnection https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview\nCreate virtual network gateway https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways https://blogs.technet.microsoft.com/canitpro/2017/06/28/step-by-step-configuring-a-site-to-site-vpn-gateway-between-azure-and-on-premise/ https://docs.microsoft.com/en-us/azure/vpn-gateway/create-routebased-vpn-gateway-portal\nImplement and manage virtual networking\nMay include but not limited to: Configure private and public IP addresses, network routes, network interface, subnets, and virtual network\nConfigure private and public IP addresses, network routes, network interface, subnets, and virtual network https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-static-private-ip-arm-pportal https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-ip-addresses-overview-arm https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface-addresses\nManage Azure Active Directory (AD)\nMay include but not limited to: Add custom domains; configure Azure AD Identity Protection, Azure AD Join, and Enterprise State Roaming; configure self-service password reset; implement conditional access policies; manage multiple directories; perform an access review\nAdd custom domains; https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-custom-domain\nConfigure Azure AD Identity Protection, Azure AD Join, and Enterprise State Roaming https://docs.microsoft.com/en-gb/azure/active-directory/identity-protection/enable https://docs.microsoft.com/en-gb/azure/active-directory/user-help/user-help-join-device-on-network https://docs.microsoft.com/en-us/azure/active-directory/active-directory-windows-enterprise-state-roaming-overview\nConfigure self-service password reset https://docs.microsoft.com/en-gb/azure/active-directory/authentication/concept-sspr-howitworks\nImplement conditional access policies; https://docs.microsoft.com/en-gb/azure/active-directory/conditional-access/app-based-mfa\nManage multiple directories https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-administer#how-can-i-add-and-manage-multiple-directories\nPerform an access review https://docs.microsoft.com/en-gb/azure/active-directory/governance/access-reviews-overview\nImplement and manage hybrid identities\nMay include but not limited to: Install and configure Azure AD Connect; configure federation and single sign-on; manage Azure AD Connect; manage password sync and writeback\nInstall and configure Azure AD Connect; https://docs.microsoft.com/en-gb/azure/active-directory/hybrid/whatis-hybrid-identity#install-azure-ad-connect\nConfigure federation and single sign-on https://docs.microsoft.com/en-gb/azure/active-directory/hybrid/whatis-hybrid-identity\nManage Azure AD Connect https://docs.microsoft.com/en-gb/azure/active-directory/hybrid/how-to-connect-post-installation\nManage password sync and writeback https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-sspr-writeback\nImplement Workloads and Security (20-25%) Migrate servers to Azure\nMay include but not limited to: Migrate by using Azure Site Recovery (ASR); migrate using P2V; configure storage; create a backup vault; prepare source and target environments; backup and restore data; deploy Azure Site Recovery (ASR) agent; prepare virtual network\nMigrate by using Azure Site Recovery (ASR); https://docs.microsoft.com/en-us/azure/site-recovery/migrate-tutorial-on-premises-azure\nMigrate using P2V https://docs.microsoft.com/en-us/azure/site-recovery/physical-azure-disaster-recovery\nConfigure storage https://docs.microsoft.com/en-us/azure/site-recovery/tutorial-prepare-azure#create-a-storage-account\nCreate a backup vault https://docs.microsoft.com/en-us/azure/site-recovery/migrate-tutorial-on-premises-azure#create-a-recovery-services-vault\nPrepare source and target environments https://docs.microsoft.com/en-us/azure/site-recovery/migrate-tutorial-on-premises-azure#set-up-the-source-environment\nBackup and restore data https://docs.microsoft.com/en-us/azure/backup/backup-azure-recovery-services-vault-overview\nDeploy Azure Site Recovery (ASR) agent https://docs.microsoft.com/en-us/azure/site-recovery/hyper-v-azure-tutorial#install-the-provider\nPrepare virtual network https://docs.microsoft.com/en-us/azure/site-recovery/tutorial-prepare-azure#set-up-an-azure-network\nConfigure serverless computing\nMay include but not limited to: Create and manage objects; manage a Logic App resource; manage Azure Function app settings; manage Event Grid; manage Service Bus\nCreate and manage objects https://azure.microsoft.com/en-gb/overview/serverless-computing/\nManage a Logic App resource https://docs.microsoft.com/en-us/azure/logic-apps/\nManage Azure Function app settings https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings\nManage Event Grid https://docs.microsoft.com/en-us/azure/event-grid/\nManage Service Bus https://docs.microsoft.com/en-gb/azure/service-bus-messaging/\nImplement application load balancing\nMay include but not limited to: Configure application gateway and load balancing rules; implement front end IP configurations; manage application load balancing\nConfigure application gateway and load balancing rules https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-introduction https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-ilb-arm https://azure.microsoft.com/en-gb/services/application-gateway/\nImplement front end IP configurations https://docs.microsoft.com/en-us/rest/api/load-balancer/loadbalancerfrontendipconfigurations/get https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-overview\nManage application load balancing https://docs.microsoft.com/en-us/azure/load-balancer/tutorial-load-balancer-standard-manage-portal\nIntegrate on premises network with Azure virtual network\nMay include but not limited to: Create and configure Azure VPN Gateway; create and configure site to site VPN; configure Express Route; verify on premises connectivity; manage on-premise connectivity with Azure\nCreate and configure Azure VPN Gateway https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-tutorial-create-gateway-powershell\nCreate and configure site to site VPN https://blogs.technet.microsoft.com/canitpro/2017/06/28/step-by-step-configuring-a-site-to-site-vpn-gateway-between-azure-and-on-premise/ https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-portal\nConfigure Express Route https://docs.microsoft.com/en-us/azure/expressroute/ https://docs.microsoft.com/en-us/azure/expressroute/expressroute-howto-circuit-portal-resource-manager https://docs.microsoft.com/en-us/azure/expressroute/expressroute-howto-routing-portal-resource-manager\nVerify on premises connectivity https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-portal\nManage on-premise connectivity with Azure https://docs.microsoft.com/en-us/office365/enterprise/connect-an-on-premises-network-to-a-microsoft-azure-virtual-network\nManage role-based access control (RBAC)\nMay include but not limited to: Create a custom role; configure access to Azure resources by assigning roles; configure management access to Azure; troubleshoot RBAC; implement RBAC policies; assign RBAC roles\nCreate a custom role https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles\nConfigure access to Azure resources by assigning roles https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal\nConfigure management access to Azure https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-admin-roles-secure\nTroubleshoot RBAC https://docs.microsoft.com/en-us/azure/role-based-access-control/troubleshooting\nImplement RBAC policies https://docs.microsoft.com/en-us/azure/governance/policy/overview\nAssign RBAC roles https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal#grant-access\nImplement Multi-Factor Authentication (MFA)\nMay include but not limited to: Enable MFA for an Azure tenant; configure user accounts for MFA; configure fraud alerts; configure bypass options; configure trusted IPs; configure verification methods; manage role-based access control (RBAC); implement RBAC policies; assign RBAC Roles; create a custom role; configure access to Azure resources by assigning roles; configure management access to Azure\nEnable MFA for an Azure tenant; https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-getstarted#enable-azure-multi-factor-authentication\nConfigure user accounts for MFA https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-userstates\nConfigure fraud alerts https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-mfasettings#fraud-alert\nConfigure bypass options https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-mfasettings#one-time-bypass\nConfigure trusted IPs https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-mfasettings#trusted-ips\nConfigure verification methods https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-mfa-mfasettings#selectable-verification-methods\nManage role-based access control (RBAC) https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal\nImplement RBAC policies https://www.youtube.com/watch?v=q_KK9fX-wKI\nAssign RBAC Roles https://docs.microsoft.com/en-us/azure/role-based-access-control/\nCreate a custom role https://docs.microsoft.com/en-us/azure/role-based-access-control/custom-roles\nConfigure access to Azure resources by assigning roles https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal\nConfigure management access to Azure https://docs.microsoft.com/en-us/azure/role-based-access-control/overview\nArchitect Cloud Technology Solutions (5-10%) Select an appropriate compute solution\nMay include but not limited to: Leverage appropriate design patterns; select appropriate network connectivity options; design for hybrid topologies\nLeverage appropriate design patterns https://msdn.microsoft.com/en-gb/magazine/dd727504.aspx\nSelect appropriate network connectivity options https://www.moqdigital.com.au/insights/technical/network-connectivity-options-for-azure\nDesign for hybrid topologies https://docs.microsoft.com/en-us/azure/active-directory/hybrid/plan-connect-topologies\nSelect an appropriate integration solution\nMay include but not limited to: Address computational bottlenecks, state management, and OS requirements; provide for web hosting if applicable; evaluate minimum number of nodes\nAddress computational bottlenecks, state management, and OS requirements https://azure.microsoft.com/en-us/blog/microsoft-azure-the-cloud-for-high-performance-computing/ https://azure.microsoft.com/en-gb/blog/improving-your-io-performance/\nProvide for web hosting if applicable https://azure.microsoft.com/en-us/resources/videos/inside-azure-web-hosting-plans/\nMay include but not limited to: Validate data storage technology capacity limitations; address durability of data; provide for appropriate throughput of data access; evaluate structure of data storage; provide for data archiving, retention, and compliance\nValidate data storage technology capacity limitations\nAddress durability of data https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction\nProvide for appropriate throughput of data access\nEvaluate structure of data storage https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-overview https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-comparison\nProvide for data archiving, retention, and compliance https://azure.microsoft.com/en-gb/solutions/backup-archive/\nCreate and Deploy Apps (5-10%) Create web applications by using PaaS\nMay include but not limited to: Create an Azure app service web app by using Azure CLI, PowerShell, and other tools; create documentation for the API by using open source and other tools; create an App Service Web App for containers; create an App Service background task by using WebJobs\nCreate an Azure app service web app by using Azure CLI, PowerShell, and other tools https://docs.microsoft.com/en-us/azure/app-service/app-service-cli-samples https://docs.microsoft.com/en-us/azure/app-service/scripts/app-service-cli-deploy-staging-environment Create documentation for the API by using open source and other tools https://blogs.msdn.microsoft.com/appserviceteam/tag/swagger/ Create an App Service Web App for containers https://azure.microsoft.com/en-gb/services/app-service/containers/ https://docs.microsoft.com/en-us/azure/app-service/containers/ Create an App Service background task by using WebJobs https://www.hanselman.com/blog/IntroducingWindowsAzureWebJobs.aspx https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-get-started https://docs.microsoft.com/en-us/azure/app-service/websites-dotnet-deploy-webjobs https://docs.microsoft.com/en-us/azure/app-service/web-sites-create-web-jobs\nCreate app or service that runs on Service Fabric\nMay include but not limited to: Develop a stateful Reliable Service and a stateless Reliable Service; develop an actor-based Reliable Service; write code to consume Reliable Collections in your service\nDevelop a stateful Reliable Service and a stateless Reliable Service https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-introduction https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-quick-start\nDevelop an actor-based Reliable Service https://azure.microsoft.com/en-gb/resources/videos/azure-service-fabric-and-the-actor-model-with-mark-fussell/ https://channel9.msdn.com/Events/Journey-to-the-Websummit\u0026ndash;Online-Masterclasses/Service-Fabric-and-actor-model-architectures\u0026ndash;Joo-Pedro-Martins-Microsoft-UK/Service-Fabric-and-actor-model-architectures\u0026ndash;Joo-Pedro-Martins-Microsoft-UK\nWrite code to consume Reliable Collections in your service https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-reliable-collections\nDesign and develop applications that run in containers\nMay include but not limited to: Configure diagnostic settings on resources; create a container image by using a Docker file; create an Azure Container Service (ACS/AKS) cluster by using the Azure CLI and Azure Portal; publish an image to the Azure Container Registry; implement an application that runs on an Azure Container Instance; implement container instances by using Azure Container Service (ACS/AKS), Azure Service Fabric, and other tools; manage container settings by using code\nConfigure diagnostic settings on resources; https://azure.microsoft.com/en-gb/overview/containers/ https://docs.microsoft.com/en-us/azure/containers/\nCreate a container image by using a Docker file https://blogs.msdn.microsoft.com/uk_faculty_connection/2016/09/23/getting-started-with-docker-and-container-services/ https://docs.docker.com/docker-for-azure/deploy/\nCreate an Azure Container Service (ACS/AKS) cluster by using the Azure CLI and Azure Portal https://stackify.com/azure-container-service-kubernetes/ https://azure.microsoft.com/en-gb/services/kubernetes-service/\nPublish an image to the Azure Container Registry https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli https://docs.microsoft.com/en-us/azure/container-registry/container-registry-tutorial-quick-task\nImplement an application that runs on an Azure Container Instance https://azure.microsoft.com/en-gb/services/container-instances/ https://docs.microsoft.com/en-us/azure/container-instances/container-instances-quickstart\nImplement container instances by using Azure Container Service (ACS/AKS), Azure Service Fabric, and other tools https://medium.com/bitnami-perspectives/az-aci-aks-acs-in-5-minutes-top-chrono-65c9952dfeb8\nManage container settings by using code https://azure.microsoft.com/en-gb/resources/samples/container-service-python-manage/\nImplement Authentication and Secure Data (5-10%) Implement authentication\nMay include but not limited to: Implement authentication by using certificates, forms-based authentication, tokens, Windows-integrated authentication; implement multi-factor authentication by using Azure AD options\nImplement authentication by using certificates, forms-based authentication, tokens, Windows-integrated authentication https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview https://docs.microsoft.com/en-us/azure/active-directory/develop/authentication-scenarios https://azure.microsoft.com/en-gb/blog/azure-websites-authentication-authorization/\nImplement multi-factor authentication by using Azure AD options https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-mfa-howitworks https://azure.microsoft.com/en-gb/resources/videos/multi-factor-authentication-for-azure-ad/\nImplement secure data solutions\nMay include but not limited to: Encrypt and decrypt data at rest; encrypt data with Always Encrypted; implement Azure Confidential Compute and SSL/TLS communications; manage cryptographic keys in the Azure Key Vault\nEncrypt and decrypt data at rest https://cloudacademy.com/blog/how-does-azure-encrypt-data/\nEncrypt data with Always Encrypted https://azure.microsoft.com/en-us/blog/transparent-data-encryption-or-always-encrypted/ https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vault Implement Azure Confidential Compute and SSL/TLS communications https://docs.microsoft.com/en-us/azure/security/azure-security-data-encryption-best-practices https://azure.microsoft.com/en-gb/blog/introducing-azure-confidential-computing/ https://azure.microsoft.com/en-gb/blog/azure-confidential-computing/ Manage cryptographic keys in the Azure Key Vault https://docs.microsoft.com/en-us/azure/key-vault/key-vault-overview https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis https://azure.microsoft.com/en-gb/services/key-vault/ https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates\nDevelop for the Cloud (20-25%) Develop long-running tasks\nMay include but not limited to: Implement large-scale, parallel, and high-performance apps by using batches; implement resilient apps by using queues; implement code to address application events by using web hooks; address continuous processing tasks by using web jobs\nImplement large-scale, parallel, and high-performance apps by using batches https://docs.microsoft.com/en-us/azure/batch/batch-technical-overview https://azure.microsoft.com/en-gb/solutions/big-compute/\nImplement resilient apps by using queues https://docs.microsoft.com/en-us/azure/architecture/resiliency/ https://azure.microsoft.com/en-gb/blog/using-the-retry-pattern-to-make-your-cloud-application-more-resilient/\nImplement code to address application events by using web hooks https://docs.microsoft.com/en-us/azure/automation/automation-webhooks https://thenewstack.io/tutorial-exploring-azure-event-grid-custom-webhooks/\nAddress continuous processing tasks by using web jobs https://docs.microsoft.com/en-us/azure/architecture/best-practices/background-jobs https://blog.comminus.hr/Comminus-Blog/January-2018/Run-continuous-or-triggered-background-task-with-W.aspxhttps://exceptionless.com/better-approach-running-azure-webjobs/\nConfigure a message-based integration architecture\nMay include but not limited to: Configure an app or service to send emails, Event Grid, and the Azure Relay Service; create and configure a Notification Hub, an Event Hub, and a Service Bus; configure queries across multiple products; configure an app or service with Microsoft Graph\nConfigure an app or service to send emails, Event Grid, and the Azure Relay Service https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-to-event-grid-integration-example https://docs.microsoft.com/en-us/azure/event-grid/custom-event-to-hybrid-connection https://azure.microsoft.com/en-gb/blog/azure-service-bus-now-integrates-with-azure-event-grid/\nCreate and configure a Notification Hub, an Event Hub, and a Service Bus https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-overview https://azure.microsoft.com/en-gb/resources/videos/azure-service-bus-event-hubs-101-with-dan-rosanova/ https://azure.microsoft.com/en-gb/blog/events-data-points-and-messages-choosing-the-right-azure-messaging-service-for-your-data/ https://docs.microsoft.com/en-us/azure/notification-hubs/\nConfigure queries across multiple products https://azure.microsoft.com/en-gb/product-categories/integration/ https://azure.microsoft.com/en-us/blog/collaboration-and-federation-azure-service-bus-messaging-on-premises-futures/\nConfigure an app or service with Microsoft Graph https://developer.microsoft.com/en-us/graph https://developer.microsoft.com/en-us/graph/docs/concepts/overview\nDevelop for asynchronous processing\nMay include but not limited to: Implement parallelism, multithreading, processing, durable functions, Azure logic apps, interfaces with storage, interfaces to data access, and appropriate asynchronous compute models\nImplement parallelism, multithreading, processing, durable functions, Azure logic apps, interfaces with storage, interfaces to data access, and appropriate asynchronous compute models https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-async-operations https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-overview https://www.pluralsight.com/courses/azure-durable-functions-fundamentals?gclid=EAIaIQobChMIjpGLv7_o3QIVqrDtCh11bwoNEAAYASAAEgIKkPD_BwE\u0026amp;aid=701j0000001heIpAAI\u0026amp;promo=\u0026amp;oid=\u0026amp;utm_source=non_branded\u0026amp;utm_medium=digital_paid_search_google\u0026amp;utm_campaign=UK_Dynamic\u0026amp;utm_content=\u0026amp;s_kwcid=AL!5668!3!277727472896!b!!g!!\u0026amp;ef_id=WyEQRAAAALSF5mjc:20181002193153:s https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/compute-comparison\nDevelop for autoscaling\nMay include but not limited to: Implement autoscaling rules and patterns (schedule, operational/system metrics, code that addresses singleton application instances, and code that addresses transient state\nImplement autoscaling rules and patterns\nhttps://azure.microsoft.com/en-gb/features/autoscale/ https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-autoscale https://docs.microsoft.com/en-us/azure/architecture/best-practices/auto-scaling https://docs.microsoft.com/en-us/azure/virtual-machines/windows/autoscale\nImplement distributed transactions\nMay include but not limited to: Identify tools to implement distributed transactions (e.g., ADO.NET, elastic transactions, multi-database transactions); manage transaction scope; manage transactions across multiple databases and servers\nIdentify tools to implement distributed transactions (e.g., ADO.NET, elastic transactions, multi-database transactions); https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-transactions-overview\nManage transaction scope https://social.technet.microsoft.com/wiki/contents/articles/1639.handling-transactions-in-windows-azure-sql-database.aspx\nManage transactions across multiple databases and servers https://azure.microsoft.com/en-us/blog/tag/distributed-transactions/ https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-transactions-overview https://azure.microsoft.com/en-us/blog/elastic-database-transactions-general-availability/ https://docs.particular.net/nservicebus/azure/understanding-transactionality-in-azure\nDevelop advanced cloud workloads\nMay include but not limited to: Develop solutions by using intelligent algorithms that identify items from images and videos; develop solutions by using intelligent algorithms related to speech, natural language processing, Bing Search, and recommendations and decision making; create and integrate bots; integrate machine learning solutions in an app; create and implement IoT solutions\nDevelop solutions by using intelligent algorithms that identify items from images and videos https://docs.microsoft.com/en-us/learn/modules/classify-images-with-custom-vision-service/index https://docs.microsoft.com/en-us/learn/modules/create-computer-vision-service-to-classify-images/index\nDevelop solutions by using intelligent algorithms related to speech, natural language processing, Bing Search, and recommendations and decision making https://docs.microsoft.com/en-us/azure/cognitive-services/bing-web-search/ https://docs.microsoft.com/en-us/azure/cognitive-services/custom-decision-service/custom-decision-service-overview https://docs.microsoft.com/en-gb/azure/cognitive-services/speech-service/\nCreate and integrate bots https://docs.microsoft.com/en-us/azure/bot-service/bot-service-overview-introduction?view=azure-bot-service-4.0\nIntegrate machine learning solutions in an app https://docs.microsoft.com/en-us/azure/machine-learning/\nCreate and implement IoT solutions https://azure.microsoft.com/en-gb/overview/iot/build/\n","date":"2 October 2018","externalUrl":null,"permalink":"/2018/10/02/azure-architect-design-az-300-exam/","section":"Posts","summary":"","title":"Azure Architect AZ-300 Exam","type":"posts"},{"content":"","date":"24 September 2018","externalUrl":null,"permalink":"/tags/az-200/","section":"Tags","summary":"","title":"AZ-200","type":"tags"},{"content":" Microsoft recently released information around the new Azure Developer exams: - https://www.microsoft.com/en-us/learning/exam-AZ-200.aspx\nThis blog post will cover available learning materials and docs links to information relevant to the exam AZ-200, links to these articles will be updated regularly.\nHopefully this will give you as a developer a head start on what you need to learn in order to pass the AZ-200 exam.\nSelect the appropriate cloud technology solution (15-20%) Select an appropriate compute solution May include but not limited to: Leverage appropriate design patterns; select appropriate network connectivity options; design for hybrid topologies\nOverview of Azure compute https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/compute-overview\nDesign Patterns https://azureinteractives.azurewebsites.net/CloudDesignPatterns/default.html https://docs.microsoft.com/en-us/azure/architecture/\nSelect appropriate network connectivity options https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-site-to-site-resource-manager-portal https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-plan-design\nHybrid Topologies https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/hybrid-networking/ https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/dmz/secure-vnet-hybrid\nSelect an appropriate integration solution May include but not limited to: Address computational bottlenecks, state management, and OS requirements; provide for web hosting if applicable; evaluate minimum number of nodes\nAddress computational bottlenecks https://docs.microsoft.com/en-us/azure/virtual-machines/windows/premium-storage-performance https://docs.microsoft.com/en-us/azure/cloud-services/diagnostics-performance-counters\nState Management https://docs.microsoft.com/en-us/azure/redis-cache/cache-aspnet-session-state-provider\nOS Requirements https://azure.microsoft.com/en-gb/services/virtual-machines/\nSelect an appropriate storage solution May include but not limited to: Validate data storage technology capacity limitations; address durability of data; provide for appropriate throughput of data access; evaluate structure of data storage; provide for data archiving, retention, and compliance\nValidate data storage technology capacity limitations https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction https://docs.microsoft.com/en-us/azure/virtual-machines/windows/premium-storage\nDurability of Data https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy https://azure.microsoft.com/en-us/features/resiliency/\nEvaluate structure of data storage https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-overview https://docs.microsoft.com/en-us/azure/architecture/guide/technology-choices/data-store-comparison\nData Archiving https://azure.microsoft.com/en-gb/solutions/backup-archive/ https://azure.microsoft.com/en-gb/services/storage/archive/\nDevelop for cloud storage (30-35%) Develop solutions that use storage tables May include but not limited to: Connect to storage; design and implement policies to tables; query a table storage by using code\nConnect to storage https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-overview https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-design-guide\nPolicies https://docs.microsoft.com/en-us/rest/api/storageservices/establishing-a-stored-access-policy\nQuery table storage by using code https://docs.microsoft.com/en-us/rest/api/storageservices/querying-tables-and-entities https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet\nDevelop solutions that use Cosmos DB storage May include but not limited to: Choose a consistency level; choose appropriate API for Cosmos DB Storage; create, read, update, and delete tables in Cosmos storage by using code; manage documents and collections in Cosmos DB Storage\nChoose a consistency level https://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels https://blog.jeremylikness.com/cloud-nosql-azure-cosmosdb-consistency-levels-cfe8348686e6\nChoose appropriate API for Cosmos DB Storage https://docs.microsoft.com/en-us/azure/cosmos-db/\ncreate, read, update, and delete tables in Cosmos storage by using code https://dontpaniclabs.com/blog/post/2017/08/17/getting-started-azure-cosmos-db-part-1-crud/ https://elegantcode.com/2018/03/06/crud-using-azure-cosmos-db/ https://azure.microsoft.com/en-gb/resources/samples/azure-cosmos-db-table-dotnet-getting-started/\nManage documents and collections in Cosmos DB Storage https://docs.microsoft.com/en-us/rest/api/cosmos-db/collections https://docs.microsoft.com/en-us/azure/cosmos-db/storage-explorer\nDevelop solutions that use file storage May include but not limited to: Implement quotas for File Shares in storage account; move items in file shares between containers asynchronously; set file storage container properties in metadata\nImplement quotas for File Shares in storage account https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits https://azure.microsoft.com/en-gb/services/storage/files/ https://docs.microsoft.com/en-us/azure/storage/files/storage-how-to-create-file-share\nMove items in file shares between containers asynchronously https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy\nSet file storage container properties in metadata https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata\nDevelop solutions that use a relational database May include but not limited to: Create, read, update, and delete database tables by using code; implement dynamic data masking\nCreate, read, update, and delete database tables by using code https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-dotnet-sqldatabase\nImplement dynamic data masking https://docs.microsoft.com/en-us/azure/sql-database/sql-database-dynamic-data-masking-get-started https://docs.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking?view=sql-server-2017\nDevelop solutions that use blob storage May include but not limited to: Create a shared access signature for a blob; move items in blob storage between containers asynchronously; set blob storage container properties in metadata\nCreate a shared access signature for a blob https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1 https://docs.microsoft.com/en-us/azure/storage/blobs/storage-dotnet-shared-access-signature-part-2\nMove items in blob storage between containers asynchronously https://docs.microsoft.com/en-us/azure/storage/common/storage-moving-data\nSet blob storage container properties in metadata https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata https://docs.microsoft.com/en-us/rest/api/storageservices/setting-and-retrieving-properties-and-metadata-for-blob-resources https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata\nDeveloping for caching and content delivery solutions May include but not limited to: Develop for Azure Redis cache, storage on Content Delivery Networks (CDNs); develop code to address session state and cache invalidation\nDevelop for Azure Redis cache https://azure.microsoft.com/en-gb/services/cache/ https://docs.microsoft.com/en-us/azure/redis-cache/cache-dotnet-how-to-use-azure-redis-cache\nStorage on Content Delivery Networks (CDNs); https://docs.microsoft.com/en-us/azure/cdn/cdn-overview https://azure.microsoft.com/en-gb/services/cdn/\nDevelop code to address session state and cache invalidation https://docs.microsoft.com/en-us/azure/redis-cache/cache-faq https://docs.microsoft.com/en-us/azure/architecture/best-practices/caching\nCreate Platform as a Service (PaaS) Solutions (35-40%) Create web applications by using PaaS May include but not limited to: Create an Azure app service web app by using Azure CLI, PowerShell, and other tools; create documentation for the API by using open source and other tools; create an App Service Web App for containers; create an App Service background task by using WebJobs\nCreate an Azure app service web app by using Azure CLI https://docs.microsoft.com/en-us/azure/app-service/app-service-cli-samples\nCreate an Azure app service by using PowerShell https://docs.microsoft.com/en-us/azure/app-service/app-service-powershell-samples https://blogs.msdn.microsoft.com/benjaminperkins/2017/10/02/create-an-azure-app-service-web-app-using-powershell/\nCreate documentation for the API by using open source and other tools https://blog.kloud.com.au/2017/06/13/azure-functions-with-swagger/\nCreate an App Service Web App for containers https://azure.microsoft.com/en-gb/services/app-service/containers/ https://docs.microsoft.com/en-us/azure/app-service/containers/\nCreate an App Service background task by using WebJobs https://docs.microsoft.com/en-us/azure/app-service/web-sites-create-web-jobs https://docs.microsoft.com/en-us/azure/app-service/websites-dotnet-deploy-webjobs\nCreate mobile apps using PaaS May include but not limited to: Add push notifications for mobile app; enable offline sync for mobile app; implement a remote instrumentation strategy for mobile devices\nAdd push notifications for mobile app https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-ios-get-started-push https://azure.microsoft.com/en-gb/services/notification-hubs/ https://azure.microsoft.com/en-gb/resources/videos/mobile-push-notifications-to-users-windows-store/\nEnable offline sync for mobile app https://azure.microsoft.com/en-gb/blog/offline-sync-for-mobile-services/ https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-android-get-started-offline-data https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/sync/azure-mobile-apps https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-offline-data-sync\nImplement a remote instrumentation strategy for mobile devices https://docs.microsoft.com/en-us/intune/device-profile-android-teamviewer\nCreate an app service Logic App May include but not limited to: Create a custom connector for Logic Apps, a custom template for a Logic App; create a Logic App; package an Azure App Service Logic App\nCreate a custom connector for Logic Apps https://docs.microsoft.com/en-us/azure/logic-apps/custom-connector-overview https://docs.microsoft.com/en-us/connectors/custom-connectors/create-logic-apps-connector https://docs.microsoft.com/en-us/azure/connectors/apis-list\nCreate a custom template for a Logic App https://docs.microsoft.com/en-us/azure/logic-apps/quickstart-create-logic-apps-with-visual-studio https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-create-deploy-azure-resource-manager-templates https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-create-logic-apps-from-templates\nCreate a Logic App; package an Azure App Service Logic App https://azure.microsoft.com/en-gb/services/logic-apps/ https://docs.microsoft.com/en-us/azure/logic-apps/ https://docs.microsoft.com/en-us/azure/logic-apps/quickstart-create-first-logic-app-workflow\nCreate app or service that runs on Service Fabric May include but not limited to: Develop a stateful Reliable Service and a stateless Reliable Service; develop an actor-based Reliable Service; write code to consume Reliable Collections in your service\nDevelop a stateful Reliable Service and a stateless Reliable Service https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-introduction https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-quick-start https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-application-scenarios\nDevelop an actor-based Reliable Service https://azure.microsoft.com/en-gb/resources/videos/azure-service-fabric-and-the-actor-model-with-mark-fussell/ https://alexandrebrisebois.wordpress.com/2016/07/25/getting-to-know-actors-in-service-fabric/\nWrite code to consume Reliable Collections in your service https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-work-with-reliable-collections https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-reliable-collections\nCreate serverless functions May include but not limited to: Implement the bindings for the function (input and output); implement the function trigger by using a data operation, timer, webhook, or other tools; develop an Azure Function app for containers by using Azure Portal, CLI, and other tools; develop an Azure Service Fabric Mesh App\nImplement the bindings for the function (input and output) https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings\nImplement the function trigger by using a data operation, timer, webhook, or other tools https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-scenario-function-sb-trigger\nDevelop an Azure Function app for containers by using Azure Portal, CLI, and other tools; https://cmatskas.com/running-azure-functions-anywhere-with-the-power-of-containers/ https://markheath.net/post/azure-functions-docker\nDevelop an Azure Service Fabric Mesh App https://docs.microsoft.com/en-us/azure/service-fabric-mesh/service-fabric-mesh-quickstart-dotnet-core https://docs.microsoft.com/en-us/azure/service-fabric-mesh/service-fabric-mesh-overview\nSchedule bulk operations May include but not limited to: Define the batch output and conditions by using Batch Service API; write code to run a batch job; run a batch job by using Azure CLI, Azure Portal, and other tools\nDefine the batch output and conditions by using Batch Service API https://docs.microsoft.com/en-us/azure/batch/batch-apis-tools https://docs.microsoft.com/en-us/azure/batch/batch-api-basics https://docs.microsoft.com/en-us/azure/batch/\nCreate solutions that use Azure Kubernetes Service May include but not limited to: Configure diagnostic settings on resources; create a container image by using a Docker file; create an Azure Container Service (ACS/AKS) cluster by using the Azure CLI and Azure Portal; publish an image to the Azure Container Registry; implement an application that runs on an Azure Container Instance; implement container instances by using Azure Container Service (ACS/AKS), Azure Service Fabric, and other tools; manage container settings by using code\nConfigure diagnostic settings on resources https://azure.microsoft.com/en-gb/blog/monitoring-azure-kubernetes-service-aks-with-azure-monitor-container-health-preview/ https://docs.microsoft.com/en-us/azure/monitoring/monitoring-container-insights-overview\nCreate a container image by using a Docker file https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-prepare-acr https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-prepare-app https://docs.microsoft.com/en-us/azure/container-registry/container-registry-tutorial-quick-task https://docs.microsoft.com/en-us/azure/container-service/kubernetes/container-service-tutorial-kubernetes-prepare-app\nCreate an Azure Container Service (ACS/AKS) cluster by using the Azure CLI and Azure Portal https://azure.microsoft.com/en-gb/services/kubernetes-service/ https://docs.microsoft.com/en-us/azure/container-service/\nPublish an image to the Azure Container Registry https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-docker-cli\nManage container settings by using code https://docs.microsoft.com/en-us/azure/containers/\nDesign and develop applications that use media services May include but not limited to: Implement an application using Video Indexer, Video API, Preview, and other media related services; implement file-based encoding and Azure Media Analytics; develop media solutions that use AI services (e.g., content moderation, optical character recognition, video summarization, face detection, etc.)\nImplement an application using Video Indexer https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-overview https://azure.microsoft.com/en-gb/services/media-services/video-indexer/ https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-use-apis\nSecure cloud solutions (15-20%) Implement authentication May include but not limited to: Implement authentication by using certificates, forms-based authentication, tokens, Windows-integrated authentication; implement multi-factor authentication by using Azure AD options\nImplement access control May include but not limited to: Implement Claims-Based Access Control (CBAC) and Role-Based Access Control (RBAC) authorization\nImplement secure data solutions May include but not limited to: Encrypt and decrypt data at rest; encrypt data with Always Encrypted; implement Azure Confidential Compute and SSL/TLS communications; manage cryptographic keys in the Azure Key Vault\nPing me if any links are broken please.\n","date":"24 September 2018","externalUrl":null,"permalink":"/2018/09/24/azure-developer-exam-az-200/","section":"Posts","summary":"","title":"Azure Developer Exam: AZ-200","type":"posts"},{"content":" I was at a recent ThoughtWorks talk in Glasgow about Infrastructure as Code as it was something that was very relevant as to what I was looking into at the time\nWe wanted to take an Azure Resource Group (dev) and then deploy the entire thing to a new Resource Group (UAT) and use ARM templates and Azure Devops to accomplish this (I\u0026rsquo;ll cover this in another blog post soon).\nBut this made me think what happens if there is any drift, i.e. if someone manually changes a setting in the Azure portal then what? - I haven\u0026rsquo;t yet come to the point where I get alerts on drift but at least I found out where to monitor changes to resources you have within Azure.\nSo here you can see what was changed and by whom, so if someone was to say change an Azure Function AppSettings it would be shown here with a date and time as well, handy if you need to keep an eye on who changed what and when\n","date":"20 September 2018","externalUrl":null,"permalink":"/2018/09/20/how-to-monitor-changes-in-your-azure-resources/","section":"Posts","summary":"","title":"How to Monitor changes in your Azure Resources","type":"posts"},{"content":" Microsoft recently changed the name from Visual Studio Team Services (VSTS) and rename it Azure Devops.\nThey also added some new features one of which I will cover briefly to give you a flavour of what you do with it.\nWith Azure Devops Microsoft have a suite of tools which combined are very powerful and cover a number of topics which I will in turn cover over the next few weeks and months (there is a lot to cover).\nThis quick blog post will cover some of the functionality in the newly released Azure Test \u0026amp; Feedback.\nSo the clue is in the name, and you can use this Chrome Browser extension tool to do the following and a lot more: -\nTake Screenshots of bugs and have them added straight into your current sprint in your Azure Board (with browser details etc.) Record videos of how you reproduce a bug and again have that added as a bug in the current sprint. Create Test Cases (not looked into this enough yet), but looks very sweet indeed The below is a screen shot of the extension and you can even watch the quick demo, you can get the Chrome extension here: - https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web\nDownload it take it for a test drive, you\u0026rsquo;ll be pleasantly surprised :)\n","date":"20 September 2018","externalUrl":null,"permalink":"/2018/09/20/azure-devops-test-feedback-intro/","section":"Posts","summary":"","title":"Azure Devops: Test \u0026amp; Feedback Intro","type":"posts"},{"content":" Just like any application in Production it\u0026rsquo;s always good to be prepared for issues and with an Azure Web App knowing how to set up logging so that you can find errors and try to diagnose what\u0026rsquo;s going on is very important.\nIn this blog post I\u0026rsquo;ll cover how to go about diagnosing errors and trying to figure out how to resolve issues.\nFirst off if you have a web app created in Azure then under Monitoring look for Diagnostic Logs\nBy default all of these are off, so in order to capture Application logging and Web Server Logging we need to turn these on like so: -\nNow that we have logging turned on its time to view some logs and we can do this by browsing to our site and then also trying to browse to a page that doesn\u0026rsquo;t exist and then check the log files.\nOnce I have browsed to the app I can view the log files by clicking Advance tools in the portal and again using Kudu, this time once Kudu loads, select the following: -\nSelect Debug Console and then select CMD Click on Log files and then Application Then click to download the log file by selecting the download icon as shown below And now we can view the log files generated from the Application Logging change we made to enable this.\nIn order to see IIS web logs you need to follow these steps if you chose Web Server Logging (FileSystem)\nSelect Debug Console and then select CMD Click on Log files, http and then RawLogs Then click to download the log file by selecting the same icon in the previous step Ok one last thing to show before I wrap up this blog post is Log Stream within Azure. Log stream allows you to view either the application logs or web server logs as a stream (in real-time).\nSo if I have an issue on the website and I wanna quick look at what\u0026rsquo;s going on here is how to use Log Stream in Azure.\nFind your web application within the Azure Portal Under Monitoring click on Log Stream Choose Application logs Browse around your app Watch the screen fill up with the logging information in real-time Hopefully this will be of some use to people, enjoy.\n","date":"3 September 2018","externalUrl":null,"permalink":"/2018/09/03/how-to-debug-issues-with-azure-web-apps-part-2-monitoring-your-webapp/","section":"Posts","summary":"","title":"How to debug issues with Azure Web Apps Part 2 - Monitoring your webapp","type":"posts"},{"content":" Three Glasgow user groups are lining up to provide a joint meetup on Wednesday the 24th October crossing all 3 subject areas:\nAzure https://www.gaug.co.uk/ SQL https://sqlglasgow.co.uk/ PowerShell \u0026amp; DevOps https://psdevopsug.scot/ We need you, yes you, to give a 10 minute lightning talk on a relevant subject covering a subject from the above. We are encouraging people who have always wanted to give a talk but haven\u0026rsquo;t either the confidence to stand up and give a talk or just haven\u0026rsquo;t gotten around to it as yet. We\u0026rsquo;re hoping for a number of first time speakers, people who maybe give internal talks at work but don\u0026rsquo;t feel they want to take it up a level and speak at a user group.\nSome things I would like to say about giving a talk: -\nWe all have to start somewhere and a lightning talk is a great way to start Your 10 minute talk can just be telling us about your experience using one of the products You don\u0026rsquo;t need to have slides Attending User Groups open doors as networking is always a good thing Were a very friendly and welcoming bunch of techies Newcomers are made very welcome There\u0026rsquo;s free beer and soft drinks and pizza To sign up to attend this great event please grab a ticket here: https://www.eventbrite.co.uk/e/glasgow-joint-tech-meetup-tickets-49595077211\nIf you have any questions feel free to get in touch.\nThanks Gregor\n","date":"2 September 2018","externalUrl":null,"permalink":"/2018/09/02/your-glasgow-user-group-needs-you/","section":"Posts","summary":"","title":"Your Glasgow User Group needs you","type":"posts"},{"content":"","date":"24 August 2018","externalUrl":null,"permalink":"/categories/continuous-deployment/","section":"Categories","summary":"","title":"Continuous Deployment","type":"categories"},{"content":"","date":"24 August 2018","externalUrl":null,"permalink":"/categories/vsts/","section":"Categories","summary":"","title":"VSTS","type":"categories"},{"content":"In Part 3 I will cover how to create a Release off of a Build we create from Part 2 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-2/\nSo to create a new Release we click the plus icon as shown below - nothing like consistency in the ui ;)\nSo again we get to choose a template this time for our Release Pipeline like so.\nAfter I choose Azure app Service Deployment I get this screen.\nHere I get to change the Environment name, so I edited Environment1 to be Development and then I need to select Add next to Artifacts to choose the deployment artifacts (the files i wish to deploy)\nHere I am selecting the artifacts to deploy, I have chosen the Source Type as Build and the Build Pipeline both from part 2 and given the Release pipeline a name and then I click Add.\nNow we can choose to setup release based on a number of things, we can make them manual or automated deployments based on triggers etc.\nOne example is a scheduled trigger and you can set this up by clicking Schedule release trigger as below.\nWith VSTS there are is a tonne of options to try out, its very easy to have either manual builds and manual releases and just as easy to have fully automated build, test deploy pipelines.\n","date":"24 August 2018","externalUrl":null,"permalink":"/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-3/","section":"Posts","summary":"","title":"VSTS and Git Integration for Deploying to Azure - Part 3","type":"posts"},{"content":"Ok so in this post (part 2) I promised to show you how to use Visual Studio Team Services (VSTS) to build, test and deploy your code to Azure.\nUsing Visual Studio 2017 with the git integration tools - Part 1 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-1 Deploying to Azure using VSTS with a CI / CD pipeline - Part 3 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-3/ Step 1 - Build your code using VSTS\nSelect Build and Release from inside VSTS like so\nOn the right hand side click where it says + New and you\u0026rsquo;ll see the next screen\nI have rubbed out the names of the project I the above screen shot in case you\u0026rsquo;re wondering why it looks weird.\nSo here I\u0026rsquo;m saying that I want to use VSTS Git for where my source code belongs, I choose the Team Project, the Repository and which branch I am interested in building, then I select continue.\nNow I need to select a template for the type of project I want to build like so.\nI have chosen the Azure Web App for ASP.Net and then I click Apply.\nOn the next screen I need to choose\nName for the new Build Which type of pool will I use to build the code Locate the solution file for my project (from a selection) I have chosen my Azure Subscription And I have chosen the App service name from a drop down which comes from my Azure subscription. Above you can see the list of steps which will be preformed\nUse Nuget Restore my Nuget Package(s) Build the solution Run any Tests within the solution Attempt to Deploy the App Service (this step I would normally always remove) Then VSTS publishes the artifacts to a Drop folder within VSTS which is later used in the Release part of VSTS to deploy the artifacts to Azure in tis case. I will right click on step 5 and remove the App Service Deploy step as I just want to build my solution and create the deployment artifacts.\nOk so now you need to pay attention to this area of the build screen.\nThe red exclamation mark is showing us we need to fill out some further details before we can proceed, so lets fix this next.\nSo here we need to add a Branch Filter before it will allow us to Save the new Build.\nAnd now we can either choose Save or Save and queue our new Build, I\u0026rsquo;ll select Save and queue.\nAnd you\u0026rsquo;ll now see your Build queued.\nOne your build is there you more than likely want to setup continous integration, tick this checkbox inside Trigger.\nIn the screen above you click Enable Continous Integration and you can fill the screen below out\nJoin me in Part 3 - And I\u0026rsquo;ll walk-through deploying the code by creating a Release in VSTS for our new build artifacts.\n","date":"24 August 2018","externalUrl":null,"permalink":"/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-2/","section":"Posts","summary":"","title":"VSTS and Git Integration for Deploying to Azure - Part 2","type":"posts"},{"content":" At work we use Visual Studio Team Services (VSTS) with git and in this post I\u0026rsquo;ll walk you through our development process for writing code and deploying it to a demo site on Azure.\nI have become a big fan of VSTS, it has some cracking functionality built-in which saves you a lot of time and effort.\nI will cover the following:-\nUsing Visual Studio 2017 with the git integration tools - Part 1 Deploying to Azure using VSTS with a CI / CD pipeline - Part 2 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-2/ Deploying to Azure using VSTS with a CI / CD pipeline - Part 3 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-3/ Using Visual Studio 2017 with the git integration tools\nSo I open up Visual Studio 2017 and I first of all need to update my local copy of the master branch and pull down the latest version.\nTo do this I select Sync as shown above and then I choose fetch to fetch the latest commits and pull to pull them all down as below.\nOk, so now I have the latest code from the master branch as seen below.\nNow I want to run the master branch and see if everything is good and check whats changed with the commits I pulled down but before I can do this I need to apply some local settings.\nThe reason for this is we have a number of Azure Services being used like event hubs etc and I have a local settings json file with my settings which I never check in. To apply these local settings I saved them into a stash and I will show you how I apply my stashes next.\nSo I click Stashes within Team Explorer and then I see the following.\nAnd now I right-click on local settings and select apply stash, and this will apply my local settings to the project allowing me to run my own event hub instead of the one on our demo site as an example.\nIn order to get the Git Stash Extension you can download it from Extensions and Updates from the Tools menu within Visual Studio.\nIn Part 2 https://gregorsuttie.com/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-2/ - I\u0026rsquo;ll show you how to use VSTS build pipelines to build and test your code and then deploy it to Azure.\n","date":"24 August 2018","externalUrl":null,"permalink":"/2018/08/24/vsts-and-git-integration-for-deploying-to-azure-part-1/","section":"Posts","summary":"","title":"VSTS and Git Integration for Deploying to Azure - Part 1","type":"posts"},{"content":" At work we have 2 Azure WebApp\u0026rsquo;s in 2 different regions in the world, we deployed the same code using a CI/CD pipeline and in one region the website returns a 404 error message.\nSo the following is some information and things I started looking into in order to try to diagnose the problem.\nThe website uses Azure Traffic Manager so that users in one part of the world get directed to lets say webapp1 and the others go to webapp2 (the one which isn\u0026rsquo;t working), we also have a custom domain name for our site and I mention this so that I can use something called Kudu.\nKudu what is that you ask? - well you can learn about Kudu here: - Kudu\nOk back to the problem at hand.\nSo to use kudu you add .scm. before the azure web app name like so https://.scm.azurewebsites.net/ into a browser\nThis in our case looks like so: -\nSo what can I get out of using Kudu, it turns out you can find out quite a fair bit of information around your running webapp.\nHere is a quick list of what you can find out using just the environments tab within kudu\nSystem info AppSettings Connection Strings Environment variables Path HTTP Headers Server Variables Debug Console Allows you to choose CMD (a command window) or PowerShell window where you can actually see the list of files on the server where the webapp is running and do loads more.\nOr if you prefer PowerShell instead.\nThis is very cool as you can see the list of files you have deployed, check version numbers and do all manner of things including the following:-\nView the System Files Add folders and files Delete / Edit / Download individual files So who says you don\u0026rsquo;t get access to the files on your Azure WebApp deployment :)\nProcess Explorer\nView the running processes on the server Get a memory dump of processes Tools\nDiagnostic Dump WebJobs Dashboard WebHooks Zip Push Deploy Download Deployment Script Support Site Extensions View a list of extensions you\u0026rsquo;ve added to your Azure WebApp\nI am off to go poke around and use these tools to see what I can find.\nIn the next post I will show you how to setup and use diagnostic logs to look more into the actual issue I am facing, but for now enjoy Kudu.\n","date":"15 August 2018","externalUrl":null,"permalink":"/2018/08/15/how-to-debug-issues-with-azure-web-apps-using-kudu/","section":"Posts","summary":"","title":"How to debug issues with Azure Web Apps Part 1 - using Kudu","type":"posts"},{"content":"At work we were asked how do we scan a website we have deployed to Azure for vulnerabilities and I wanted to share how we go about it by using Tinfoil https://www.tinfoilsecurity.com/azure\nWithin Azure if you have an App Service plan you can click on that from App Services within the Azure Portal and then look for the following:-\nAfter you click on that then look for Premium Tools like so: -\nOnce you click on Security Scanning you can the add a service called Tinfoil Security\nAs you can see this is a paid service which will scan your website for security vulnerabilities.\nYou can read more on this here: - https://azure.microsoft.com/en-gb/blog/web-vulnerability-scanning-for-azure-app-service-powered-by-tinfoil-security/\n","date":"12 August 2018","externalUrl":null,"permalink":"/2018/08/12/vulnerability-scanning-your-azure-app-service/","section":"Posts","summary":"","title":"Vulnerability Scanning your Azure App Service","type":"posts"},{"content":" So you using Visual Studio Team Services (VSTS) and you have some build definitions and your team are doing pull requests but you want their branch to run a build before the pull request is reviewed.\nThe steps to add gated check in are like so:-\nLog into VSTS Go to the Code Menu and then select Branches From the list of branches look to the right of master for 3 dots \u0026hellip; (ellipses) Click the 3 dots and then select branch policies Look on the left under Branch policies Click on Add build Policy Choose your build pipeline Fill that out and then give it a name Make sure it\u0026rsquo;s enabled Now when a user goes to create a pull request and pushes they\u0026rsquo;re code The gated check-in will check that the users branch builds before anyone can review the pull request. This add a quality gate to your check-ins using VSTS.\nHope that helps\n","date":"2 August 2018","externalUrl":null,"permalink":"/2018/08/02/visual-studio-team-services-gated-check-ins-how-to/","section":"Posts","summary":"","title":"Visual Studio Team Services - Gated Check-ins: How-To","type":"posts"},{"content":"The following is a study guide for the AZ-100 Azure exam\nManage Azure subscriptions and resources (15-20%) Manage Azure subscriptions\nMay include but not limited to: Assign administrator permissions; configure cost center quotas and tagging; configure subscription policies https://docs.microsoft.com/en-us/azure/billing/billing-add-change-azure-subscription-administrator https://docs.microsoft.com/en-us/azure/billing/billing-getting-started https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-using-tags https://docs.microsoft.com/en-us/azure/security-center/security-center-policies https://docs.microsoft.com/en-us/azure/security-center/security-center-azure-policy Analyze resource utilization and consumption\nMay include but not limited to: Configure diagnostic settings on resources; create baseline for resources; create and rest alerts; analyze alerts across subscription; analyze metrics across subscription; create action groups; monitor for unused resources; monitor spend; report on spend; utilize Log Search query functions; view alerts in Log Analytics https://richardwaal.nl/2018/02/07/enable-multiple-diagnostic-settings-on-azure-resources-with-arm-templates/ https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-enable-diagnostic-logs-using-template https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview https://stackoverflow.com/questions/43397853/baseline-environment-with-azure https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/insights-alerts-portal https://msdn.microsoft.com/en-us/library/azure/dn510366.aspx https://msdn.microsoft.com/en-us/library/azure/dn933805.aspx https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-alerts https://azure.microsoft.com/en-us/blog/alerting-and-notifications-support-for-windows-azure-applications/ https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-azure-storage https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-metrics https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-create-action-group-with-resource-manager-template https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-action-groups https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview https://azure.microsoft.com/en-us/blog/announcing-azure-advisor-azure-monitor-and-resource-health/ https://azure.microsoft.com/en-us/pricing/details/monitor/ https://docs.microsoft.com/en-us/azure/billing/billing-download-azure-invoice-daily-usage-date https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-unified-alerts https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-tutorial-response Manage resource groups\nMay include but not limited to: Allocate resource policies; configure resource locks; configure resource policies; implement and set tagging on resource groups; move resources across resource groups; remove resource groups https://docs.microsoft.com/en-us/azure/azure-policy/azure-policy-introduction https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-lock-resources https://azure.microsoft.com/en-us/blog/portal-preview-of-azure-resource-policy-2/ https://azure.microsoft.com/en-us/blog/azure-resource-policy-ga/ http://www.azurefieldnotes.com/2016/07/18/azure-resource-tagging-best-practices/ https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-using-tags https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-move-resources https://blogs.msdn.microsoft.com/azuregov/2016/12/09/copying-azure-resource-groups-between-different-azure-subscriptions-or-environments/ https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-portal Implement and manage storage (20-25%) Create and configure storage accounts\nMay include but not limited to: Configure network access to the storage account; create and configure storage account; generate shared access signature; install and use Azure Storage Explorer; manage access keys; monitor activity log by using Log Analytics; implement Azure storage replication https://docs.microsoft.com/en-us/azure/storage/common/storage-create-storage-account https://docs.microsoft.com/en-us/azure/cost-management/storage-accounts https://docs.microsoft.com/en-us/azure/storage/blobs/storage-dotnet-shared-access-signature-part-2 https://azure.microsoft.com/en-us/features/storage-explorer/ https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis https://docs.microsoft.com/en-gb/azure/key-vault/ https://docs.microsoft.com/en-us/azure/log-analytics/log-analytics-activity https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-activity-logs https://docs.microsoft.com/en-us/azure/storage/common/storage-redundancy https://blogs.msdn.microsoft.com/cloud_solution_architect/2016/05/09/azure-storage-account-backup-azure-automation-runbook-azure-functions/ Import and export data to Azure\nMay include but not limited to: Create export from Azure job; create import into Azure job; configure and use Azure blob storage; configure Azure content delivery network (CDN) endpoints https://docs.microsoft.com/en-us/azure/storage/common/storage-import-export-creating-an-import-job https://docs.microsoft.com/en-us/azure/storage/common/storage-import-export-creating-an-export-job https://docs.microsoft.com/en-us/azure/storage/common/storage-import-export-service https://azure.microsoft.com/en-us/resources/samples/storage-dotnet-import-export-job-management/ https://azure.microsoft.com/en-us/blog/introducing-the-windows-azure-content-delivery-network/ https://docs.microsoft.com/en-us/azure/cdn/cdn-overview https://docs.microsoft.com/en-us/azure/cdn/cdn-create-new-endpoint Configure Azure files\nMay include but not limited to: Create Azure file share; create Azure File Sync service; create Azure sync group; troubleshoot Azure File Sync https://docs.microsoft.com/en-us/azure/storage/files/storage-how-to-create-file-share https://docs.microsoft.com/en-us/azure/storage/files/storage-sync-files-deployment-guide?tabs=portal https://azure.microsoft.com/en-gb/roadmap/azure-file-sync/ https://azure.microsoft.com/en-us/blog/azure-sql-data-sync-refresh/ https://docs.microsoft.com/en-us/azure/sql-database/sql-database-sync-data Implement Azure backup\nMay include but not limited to: Configure and review backup reports; perform backup operation; create Recovery Services Vault; create and configure backup policy; perform a restore operation Deploy and manage virtual machines (VMs) (20-25%) Create and configure a VM for Windows and Linux\nMay include but not limited to: Configure high availability; configure monitoring, networking, storage, and virtual machine size; deploy and configure scale sets Automate deployment of VMs\nMay include but not limited to: Modify Azure Resource Manager (ARM) template; configure location of new VMs; configure VHD template; deploy from template; save a deployment as an ARM template; deploy Windows and Linux VMs Manage Azure VM\nMay include but not limited to: Add data discs; add network interfaces; automate configuration management by using PowerShell Desired State Configuration (DSC) and VM Agent by using custom script extensions; manage VM sizes; move VMs from one resource group to another; redeploy VMs Manage VM backups\nMay include but not limited to: Configure VM backup; define backup policies; implement backup policies; perform VM restore Configure and manage virtual networks (20-25%) Create connectivity between virtual networks\nMay include but not limited to: Create and configure VNET peering; create and configure VNET to VNET; verify virtual network connectivity; create virtual network gateway https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-manage-peering https://blogs.msdn.microsoft.com/azureedu/2018/04/24/how-to-setup-global-vnet-peering-in-azure/ https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-vnet-vnet-resource-manager-portal https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-vnet-vnet-rm-ps https://blogs.technet.microsoft.com/canitpro/2014/06/03/step-by-step-configure-vnet-to-vnet-connectivity-in-azure/ https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways Implement and manage virtual networking\nMay include but not limited to: Configure private and public IP addresses, network routes, network interface, subnets, and virtual network https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface-addresses https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-static-private-ip-arm-pportal https://blogs.technet.microsoft.com/canitpro/2017/03/15/step-by-step-setup-multiple-public-ips-on-a-vm-in-azure/ https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview https://docs.microsoft.com/en-us/azure/virtual-network/tutorial-create-route-table-portal https://docs.microsoft.com/en-us/azure/virtual-network/ https://azure.microsoft.com/en-us/services/virtual-network/ Configure name resolution\nMay include but not limited to: Configure Azure DNS; configure custom DNS settings; configure DNS zones https://azure.microsoft.com/en-gb/services/dns/ https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal https://blogs.msdn.microsoft.com/kaushal/2013/07/05/azure-app-service-how-to-configure-a-custom-domain/ https://docs.microsoft.com/en-us/azure/dns/dns-zones-records Create and configure a Network Security Group (NSG)\nMay include but not limited to: Create security rules; associate NSG to a subnet or network interface; identify required ports; evaluate effective security rules https://blogs.msdn.microsoft.com/igorpag/2016/05/14/azure-network-security-groups-nsg-best-practices-and-lessons-learned/ https://azure.microsoft.com/en-us/blog/network-security-groups/ https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-network-interface https://docs.microsoft.com/en-us/azure/virtual-network/diagnose-network-traffic-filter-problem https://docs.microsoft.com/en-us/azure/virtual-machines/windows/nsg-quickstart-portal https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-ports https://www.danielstechblog.io/microsoft-azure-network-security-group-effective-security-rules-evaluation/ http://itprocentral.com/how-to-manage-network-security-groups-nsg-in-azure/ https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-auditing-powershell Manage identities (15-20%) Manage Azure Active Directory (AD)\nMay include but not limited to: Add custom domains; configure Azure AD Identity Protection, Azure AD Join, and Enterprise State Roaming; configure self-service password reset; implement conditional access policies; manage multiple directories; perform an access review https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-custom-domain https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/application-proxy-configure-custom-domain https://blogs.msdn.microsoft.com/azureedu/2016/10/15/how-can-i-use-azure-ad-domain-services/ https://docs.microsoft.com/en-us/azure/active-directory/active-directory-identityprotection-enable https://docs.microsoft.com/en-us/azure/active-directory/active-directory-identityprotection https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect https://docs.microsoft.com/en-us/azure/active-directory/device-management-introduction https://docs.microsoft.com/en-us/azure/active-directory/active-directory-windows-enterprise-state-roaming-overview https://docs.microsoft.com/en-us/azure/active-directory/active-directory-windows-enterprise-state-roaming-enable https://www.petri.com/what-is-azure-active-directory-enterprise-state-roaming https://docs.microsoft.com/en-us/azure/active-directory/authentication/quickstart-sspr https://azure.microsoft.com/en-gb/resources/videos/self-service-password-reset-azure-ad/ https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access-azure-portal https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access-device-policies https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-administer https://docs.microsoft.com/en-gb/azure/active-directory/privileged-identity-management/pim-how-to-perform-security-review https://docs.microsoft.com/en-us/azure/active-directory/active-directory-azure-ad-controls-perform-access-review Manage Azure AD objects (users, groups, and devices)\nMay include but not limited to: Create users and groups; manage user and group properties; manage device settings; perform bulk user updates https://docs.microsoft.com/en-us/azure/active-directory-domain-services/active-directory-ds-admin-guide-create-ou https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-dynamic-membership https://docs.microsoft.com/en-us/azure/active-directory/device-management-azure-portal https://msdn.microsoft.com/en-us/library/azure/ad/graph/howto/azure-ad-graph-api-batch-processing Implement and manage hybrid identities\nMay include but not limited to: Install and configure Azure AD Connect; configure federation and single sign-on; manage Azure AD Connect; manage password sync and writeback https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-get-started-custom https://docs.microsoft.com/en-us/azure/active-directory/application-config-sso-how-to-configure-federated-sso-gallery https://docs.microsoft.com/en-us/azure/active-directory/active-directory-saas-custom-apps https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-whats-next https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-design-concepts ","date":"18 July 2018","externalUrl":null,"permalink":"/2018/07/18/microsoft-azure-infrastructure-and-deployment-beta-az-100/","section":"Posts","summary":"","title":"Microsoft Azure Infrastructure and Deployment (beta) AZ-100","type":"posts"},{"content":"Saturday April 21st was the day for the Azure Global Bootcamp which say people attend user groups all around the world as you can see below, so we all spent a day as the Azure community learning all about Azure in many different ways from speakers all around the globe.\nI took part and my talk was on learning Azure and becoming ready for the exams into the bargain.\nAs promised here are my slides:- HowToLearnAzure3\nThe Glasgow event was awesome and we also had Analben Mehta talking about serverless and Azure Functions and then we had Kenny Lowe talking about Azure Stack, great content and lunch and beers/soft drinks provided, all in all great to be apart of and hopefully people enjoyed they\u0026rsquo;re day.\nHope to see the people attended at the next Glasgow Azure User Group.\n","date":"21 April 2018","externalUrl":null,"permalink":"/2018/04/21/global-azure-bootcamp-glasgow-april-21st-2018/","section":"Posts","summary":"","title":"Global Azure Bootcamp - Glasgow April 21st 2018","type":"posts"},{"content":"","date":"21 April 2018","externalUrl":null,"permalink":"/categories/logic-apps/","section":"Categories","summary":"","title":"Logic Apps","type":"categories"},{"content":"","date":"21 April 2018","externalUrl":null,"permalink":"/categories/pluralsight/","section":"Categories","summary":"","title":"Pluralsight","type":"categories"},{"content":" I listen to podcasts and read twitter probably a lot more than I should - why you may ask?\nWell for me it\u0026rsquo;s about investing in yourself, if you want to be smarter than you are currently it wont happen itself, you have to invest time in yourself.\nInvesting in myself for me means I have dreams which I will fulfil and I have set goals for myself - this year alone I\u0026rsquo;ve been promoted, done some internal talks, learned a lot about Azure and even enough to do an external talk on it. I plan to do many more talks on Azure going forward.\nI\u0026rsquo;ve written a few blog posts and this will continue when I get some spare time after I pass the 70-532 Azure exam, which I will.\nPart of the reason why I want to continue on investing in myself is so that I can surround myself with quality people who I can learn from. I have had my fair share of disappointments in my career and yet I keep going. I will never stop taking hits along the way, I\u0026rsquo;ve failed the 70-532 exam twice now but I will pass it.\nInvesting in yourself takes time and it takes commitment, I am committed to learning Azure and passing at least 2 certifications in 2018.\nWhy Azure you may ask, well I know .Net and will continue to learn .Net core in my spare time and use it with Azure as I go.\nFailure is what life is about, suck it up and get over it.\nIf you\u0026rsquo;re not happy in your job or it\u0026rsquo;s not giving you what you want out of it then move on, don\u0026rsquo;t hang around if it\u0026rsquo;s not what you want to do.\nSo I will continue to invest in myself, I have done throughout my career, but I think its worth talking about that if you have goals and dreams then you need to invest in yourself to achieve them, which I will.\n","date":"11 April 2018","externalUrl":null,"permalink":"/2018/04/11/investing-in-yourself/","section":"Posts","summary":"","title":"Investing in Yourself","type":"posts"},{"content":" I\u0026rsquo;m excited to share with you that I\u0026rsquo;ll be doing a talk on How to Learn Azure and become certified into the bargain in Glasgow on April 21st 2018.\nI\u0026rsquo;ll be joining the #GlobalAzure community around the world on the day to learn all sorts of Azure awesomesauce.\nThe Glasgow version includes:-\nHow to learn Azure and become certified - Gregor Suttie Azure Serverless Computing - Analben Mehta **Chatbots, Azure and MS Cognitive Services (LUIS) - Jamie Maguire ** Azure Stack and the Hybrid Cloud: Modernise Applications Anywhere - Kenny Lowe I am very excited and looking forward to this event.\n","date":"5 April 2018","externalUrl":null,"permalink":"/2018/04/05/talk-global-azure-bootcamp-glasgow-21st-april/","section":"Posts","summary":"","title":"Talk - Global Azure BootCamp, Glasgow 21st April","type":"posts"},{"content":" Logic Apps in Azure is probably one of my top 3 favourite features in Azure at this time, if your software exposes api endpoints you can do pretty much anything.\n\u0026ldquo;Out-of-the-box connectors reduce integration challenges. You can connect apps, data and devices anywhere – on-premises or in the cloud – with our large ecosystem of software as a service (SaaS) and cloud-based connectors that includes Salesforce, Office 365, Twitter, Dropbox, Google services and more.\u0026rdquo;\nFind out more about Logic Apps here\nhttps://youtu.be/ksU5OCf3cn0\nThe reason why I like Logic Apps so much is the almost endless possibilities, we all have systems running where we have some sort of logic, maybe its a service that runs and then sends an email as a very simple example.\nImagine you could write an application to do a lot of logical steps using almost anything you can possibly think of within reason and write the application without every writing a single line of code, sounds too good to be true doesn\u0026rsquo;t it?\nLet me show you some of the connectors you can use and then I will talk about some examples when Logic Apps could be very useful indeed.\nSo the list on the right is just some of the connectors (there are a LOT)\nHere are a few examples of where you could use Logic Apps:-\nWhen Sharepoint is changed notify people via anything that has an api (chat, email, bot, etc) When your build fails due to a test failing, email that person with a shame picture from the web. When a new project is created, spawn off requests to do whatever you need to do. When a new team member joins, automate adding them to AD groups etc The take away from Logic Apps is that if the software has an exposed api you can do pretty much anything you want and the logic is created via a designer which needs next to no training, its very very simple and has enormous potential.\n","date":"3 April 2018","externalUrl":null,"permalink":"/2018/04/03/the-power-of-logic-apps-in-azure/","section":"Posts","summary":"","title":"The Power of Logic Apps in Azure","type":"posts"},{"content":"Lets face it folks the cloud is where its at, you should be at the very least looking to gain cloud skills as it won\u0026rsquo;t be long before most software is deployed to the cloud.\nSo the following is a list of why you should get certified in the cloud and I decided to go for Azure certification so I will be covering Azure but the same principles apply to AWS, Google cloud etc. (sign up free for a trial)\nIn 4 months I have went from knowing absolutely nothing about Azure to knowing how, when and why you would want to use the features of Azure, I am far from knowing about all that Azure has to offer but by studying several courses and by doing hands on labs etc I have the knowledge to know what to use and when. If you\u0026rsquo;re a Microsoft Developer then it makes sense to take a look into Azure and get familiar with Azure as you\u0026rsquo;ll be able to pick it up and follow very easily, that said Azure is very easy to get going with and the learning curve for most of it isn\u0026rsquo;t steep, being able to write code and deploy it to Azure is very straightforward. Having to wait on servers being provisioned is painful, having to keep them up to date with patches etc is no fun, as a developer you want to write code and create new features and ship them fast, with the cloud this is the way forward, embrace new technologies and you and your team will reap the benefits. The cloud doesn\u0026rsquo;t have all the answers and there is no silver bullet but it\u0026rsquo;s definitely the right way to go. Azure has some fantastic options for hybrid cloud, use your own sql server and keep the data on premise or use your own existing active directory etc and use the features of Azure which make sense to you and your team. There are so many options available nowadays, Azure has various ways of ensuring your data is secure such as encryption at rest in Azure SQL, secure Network Groups, access policies, Shared Access signatures when using API\u0026rsquo;s and storage and even an API management feature. Having a certification doesn\u0026rsquo;t guarantee anything but it looks good on your resume and shows you at least know what you\u0026rsquo;re doing when it comes to Azure, it also shows that your keen to learn and no harm ever came from learning new skills. Plus its good fun learning new stuff right? Getting certified means you\u0026rsquo;ll study and learn all about Azure and the huge benefits of cloud computing in general, and you\u0026rsquo;ll be able to suggest features of Azure your company can take advantage off going forward. You\u0026rsquo;ll also learn about cool stuff like cognitive services, machine learning and ai which are all hot topics right now. And last but not least, you\u0026rsquo;ll become a Microsoft Certified Professional if you pass your first Microsoft exam. Then you can look into getting a more specific certification and you can find out more info here. ","date":"3 April 2018","externalUrl":null,"permalink":"/2018/04/03/reasons-to-get-azure-certified/","section":"Posts","summary":"","title":"Reasons to get Azure Certified","type":"posts"},{"content":"","date":"31 March 2018","externalUrl":null,"permalink":"/tags/70-532/","section":"Tags","summary":"","title":"70-532","type":"tags"},{"content":"Hi folks, the following is a little insight into what I have been studying the past 4 months, when I decided it was time to start learning Azure, this is just some of the stuff I have been learning.\nThe content below is from the 70-532 exam page and the links I have pasted in below each section to help people studying for the exam, the content is also useful for anyone looking for links on a particular area of Azure.\nFeel free to share this link out an I hope you find the content useful.\nUpdate: either use the links below or use the GitHub page I have created here: https://github.com/gsuttie/gsuttie-gsuttie.github.io\n[Create and Manage Azure Resource Manager Virtual Machines (20-25%)](https://www.microsoft.com/en-gb/learning/exam-70-532.aspx#syllabus-2) Deploy workloads on Azure Resource Manager (ARM) virtual machines (VMs) https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview Identify workloads that can and cannot be deployed; run workloads including Microsoft and Linux; create and provision VMs, including custom VM images; deploy workloads using Terraform Windows: https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/virtual-machines-windows/\nLinux: https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/virtual-machines-linux/ Create a complete Linux virtual machine infrastructure in Azure with Terraform: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/terraform-create-complete-vm\nTerraForm with Azure: https://docs.microsoft.com/en-us/azure/terraform/terraform-overview\nInstall and configure Terraform to provision VMs and other infrastructure into Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/terraform-install-configure\nCreate a VM cluster with Terraform using the Module Registry: https://docs.microsoft.com/en-us/azure/terraform/terraform-create-vm-cluster-module\nPerform configuration management\nAutomate configuration management by using PowerShell Desired State Configuration (DSC) or VM Agent (custom script extensions); enable remote debugging; implement VM template variables to configure\nVMsAzure Automation DSC Overview: https://docs.microsoft.com/en-us/azure/automation/automation-dsc-overview The what, why and how of Azure Automation Desired State Configuration (DSC): https://azure.microsoft.com/en-gb/blog/what-why-how-azure-automation-desired-state-configuration/\nIntroduction to the Azure Desired State Configuration extension handler: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/extensions-dsc-overview Getting started with Azure Automation DSC: https://docs.microsoft.com/en-us/azure/automation/automation-dsc-getting-started\nConfigure a Linux virtual machine with Desired State Configuration: https://docs.microsoft.com/en-us/azure/automation/automation-quickstart-dsc-configuration\nUsing DSC on Microsoft Azure: https://docs.microsoft.com/en-us/powershell/dsc/azuredsc\nScale ARM VMs Scale up and scale down VM sizes; deploy ARM VM Scale Sets (VMSS); configure ARM VMSS auto-scale What are virtual machine scale sets: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview Vertical autoscale with virtual machine scale sets: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-vertical-scale-reprovision\nTutorial: Automatically scale a virtual machine scale set with Azure PowerShell: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/tutorial-autoscale-powershell Tutorial: Automatically scale a virtual machine scale set with the Azure CLI 2.0: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/tutorial-autoscale-cli\nDesign and implement ARM VM storage Configure disk caching; plan for storage capacity; configure shared storage; configure geo-replication; implement ARM VMs with Standard and Premium Storage; implement Azure Disk Encryption for Windows and Linux ARM VMs; implement Azure Disk Storage; implement StorSimple Using Managed Disks in Azure Resource Manager Templates: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/using-managed-disks-template-deployments About disks storage for Azure Windows VMs: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/about-disks-and-vhds Regions and availability for virtual machines in Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/regions-and-availability\nAzure Managed Disks Overview: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/managed-disks-overview\nConvert Azure managed disks storage from standard to premium, and vice versa: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/convert-disk-storage\nMigrating to Azure Premium Storage (Unmanaged Disks): https://docs.microsoft.com/en-us/azure/storage/common/storage-migration-to-premium-storage\nAzure Disk Encryption for Windows and Linux IaaS VMs: https://docs.microsoft.com/en-us/azure/security/azure-security-disk-encryption\nHow to encrypt virtual disks on a Windows VM: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/encrypt-disks\nEncrypt an Azure Virtual Machine: https://docs.microsoft.com/en-us/azure/security-center/security-center-disk-encryption\nDisks storage: https://azure.microsoft.com/en-gb/services/storage/unmanaged-disks/\nStorSimple: https://azure.microsoft.com/en-gb/services/storsimple/\nWhat is StorSimple: https://www.youtube.com/watch?v=zow_hRgRHmM\nStorSimple Pricing: https://azure.microsoft.com/en-gb/pricing/details/storsimple/\nMonitor ARM VMs Configure ARM VM monitoring; configure alerts; configure diagnostic and monitoring storage location; enable Application Insights at runtime; monitor VM workloads by using Azure Application Insights; monitor VMs using Azure Log Analytics and OMS; monitor Linux and Windows VMs by using the Azure Diagnostics Extension; monitor VMs by using Azure Monitor Use monitoring and diagnostics with a Windows VM and Azure Resource Manager templates: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/extensions-diagnostics-template\nMonitor and update a Windows Virtual Machine with Azure PowerShell: https://doc.microsoft.com/en-us/azure/virtual-machines/windows/extensions-diagnostics-template\nHow to monitor virtual machines in Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/monitor Monitoring Performance with Application Insights: https://azure.microsoft.com/en-us/resources/videos/monitoring-performance-with-application-insights/\nOMS Monitoring solution for Azure Backup using Azure Log analytics: https://azure.microsoft.com/en-gb/blog/oms-monitoring-solution-for-azure-backup-using-azure-log-analytics/\nUse Linux Diagnostic Extension to monitor metrics and logs: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/diagnostic-extension\nManage ARM VM availability Configure multiple ARM VMs in an availability set for redundancy; configure each application tier into separate availability sets; combine the Load Balancer with availability sets; perform automated VM maintenance How to use availability sets: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/tutorial-availability-sets\nManage the availability of Windows virtual machines in Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/manage-availability\nExample Azure infrastructure walkthrough for Windows VMs: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/infrastructure-example\nAzure Load Balancer overview: https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-overview\nPlanned maintenance for virtual machines in Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/maintenance-and-updates\nHandling planned maintenance notifications for Windows virtual machines: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/maintenance-notifications A new Planned Maintenance experience for your virtual machines: https://azure.microsoft.com/en-gb/blog/a-new-planned-maintenance-experience-for-your-virtual-machines/\nDesign and Implement DevTest Labs Create and manage custom images and formulas; configure a lab to include policies and procedures; configure cost management; secure access to labs; use environments in a lab; Create a custom image from a VM: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-create-custom-image-from-vm-using-portal\nComparing custom images and formulas in DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-comparing-vm-base-image-types\nCreate a custom image from a VHD file: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-create-template\nConfigure Azure Marketplace image settings in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-configure-marketplace-images\nManage Azure DevTest Labs formulas: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-manage-formulas\nAzure DevTest Labs: Introducing formulas to create VMs productively: https://azure.microsoft.com/en-gb/updates/azure-devtest-labs-introducing-formulas-to-create-vms-productively/\nAdd a VM to a lab in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-add-vm\nManage all policies for a lab in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-set-lab-policy Manage basic policies for a lab in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-get-started-with-lab-policies\nHow to set security in DevTest Labs: https://azure.microsoft.com/en-us/resources/videos/how-to-set-security-in-your-devtest-lab/\nAdd owners and users in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-add-devtest-user View the monthly estimated lab cost trend in Azure DevTest Labs: https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-configure-cost-management\n[Design and Implement a Storage and Data Strategy (25-30%)](https://www.microsoft.com/en-gb/learning/exam-70-532.aspx#syllabus-3) Implement Azure Storage blobs and Azure Files\nRead data; change data; set metadata on a storage container; store data using block and page blobs; stream data using blobs; access blobs securely; implement async blob copy; configure Content Delivery Network (CDN); design blob hierarchies; configure custom domains; scale blob storage and implement blob tiering; create connections to files from on-premises or cloud-based Windows or Linux machines; shard large datasets; implement blob leasing; implement Storage Events; implement Azure File Sync\nDeciding when to use Azure Blobs, Azure Files, or Azure Disks: https://docs.microsoft.com/en-us/azure/storage/common/storage-decide-blobs-files-disks\nIntroduction to Blob storage: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction Quickstart: Upload, download, and list blobs using .NET: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet?tabs=macos\nSet Container Metadata: https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata Set and retrieve properties and metadata: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-properties-metadata\nSetting and Retrieving Properties and Metadata for Blob Resources: https://docs.microsoft.com/en-us/rest/api/storageservices/setting-and-retrieving-properties-and-metadata-for-blob-resources\n# Implement Azure storage tables, queues, and Azure Cosmos DB Table API Implement CRUD with and without transactions; design and manage partitions; query using OData; scale tables and partitions; add and process queue messages; retrieve a batch of messages; scale queues; choose between Azure Storage Tables and Azure Cosmos DB Table API How to create CRUD application using Azure Cosmos DB for MongoDB applications: http://www.siddharthpandey.net/how-to-create-crud-application-using-azure-cosmos-db-for-mongodb-applications/\nASP.NET MVC Tutorial: Web application development with Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-dotnet-application\nSimple CRUD Operations In Azure Cosmos DB: https://www.c-sharpcorner.com/article/simple-crud-operations-in-cosmos-db/\nPartition and scale in Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/partition-dataPartitioning in Azure Cosmos DB using the SQL API: https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-partition-data\nAzure Cosmos DB: Partitioned collections for higher storage and throughput: https://azure.microsoft.com/en-gb/updates/documentdb-partitioned-collections-for-higher-storage-and-throughput/\nTutorial: Query Azure Cosmos DB by using the Table API: https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-query-table\nSQL queries for Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query\nManage access and monitor storage Generate shared access signatures, including client renewal and data validation; create stored access policies; regenerate storage account keys; configure and use Cross-Origin Resource Sharing (CORS); set retention policies and logging levels; analyse logs; monitor Cosmos DB storage Using shared access signatures (SAS): https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1\nDelegating Access with a Shared Access Signature: https://docs.microsoft.com/en-us/rest/api/storageservices/delegating-access-with-a-shared-access-signature Generate SAS token: https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token\nCross-Origin Resource Sharing (CORS) Support for the Azure Storage Services: https://docs.microsoft.com/en-us/rest/api/storageservices/cross-origin-resource-sharing\u0026ndash;cors\u0026ndash;support-for-the-azure-storage-services\nHost a RESTful API with CORS in Azure App Service: https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-rest-api\nImplement Azure SQL Databases Choose the appropriate database tier and performance level; configure and perform point in time recovery; enable geo-replication; import and export data and schema; scale Azure SQL databases; manage elastic pools, including DTUs and eDTUs; manage limits and resource governor; implement Azure SQL Data Sync; implement graph database functionality in Azure SQL; design multi-tenant applications; secure and encrypt data; manage data integrity; enable metrics and diagnostics logs for monitoring; use adaptive query processing to improve query performance; implement sharding and elastic tools; implement SQL Server Stretch Database Azure SQL Database Documentation: https://docs.microsoft.com/en-us/azure/sql-database/\nChoose a cloud SQL Server option: Azure SQL (PaaS) Database or SQL Server on Azure VMs (IaaS): https://docs.microsoft.com/en-us/azure/sql-database/sql-database-paas-vs-sql-server-iaas\nAzure SQL Database Point in Time Restore: https://azure.microsoft.com/en-gb/blog/azure-sql-database-point-in-time-restore/\nRecover an Azure SQL database using automated database backups: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-recovery-using-backups\nBuilder Day: Doing a Point-in-Time Restore in Azure SQL DB: https://www.brentozar.com/archive/2017/06/builder-day-point-time-restore-azure-sql-db/Overview: Failover groups and active geo-replication: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-geo-replication-overview\nConfigure active geo-replication for Azure SQL Database in the Azure portal and initiate failover: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-geo-replication-portal\nDesigning highly available services using Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-designing-cloud-solutions-for-disaster-recovery\nImport and export data from SQL Server and Azure SQL Database: https://docs.microsoft.com/en-us/sql/relational-databases/import-export/overview-import-export\nExport an Azure SQL database to a BACPAC file: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-export\nImport a BACPAC file to a new Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-import\nSQL Server database migration to Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-cloud-migrate\nScaling out with Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-introduction\nAzure SQL Database dynamically scale-up or scale-down: https://azure.microsoft.com/en-gb/resources/videos/azure-sql-database-dynamically-scale-up-or-scale-down/\nAzure SQL Database resource limits: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-resource-limits\nGraph processing with SQL Server and Azure SQL Database: https://docs.microsoft.com/en-us/sql/relational-databases/graphs/sql-graph-overview\nHow to configure a new multi-tenant application: https://docs.microsoft.com/en-us/azure/active-directory/application-dev-setup-multi-tenant-app\nNew multi-tenant patterns for building SaaS applications on SQL Database: https://azure.microsoft.com/en-gb/blog/new-multi-tenant-patterns-for-building-saas-applications-on-sql-database/\nSecuring your SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-security-overview\nTransparent data encryption for SQL Database and Data Warehouse: https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-azure-sql\nSecure your Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-security-tutorial\nData Integrity in Azure SQL Database: https://azure.microsoft.com/en-gb/blog/data-integrity-in-azure-sql-database/\nAzure SQL Database Data Integrity Checks: https://blobeater.blog/2017/10/04/azure-sql-database-data-integrity-checks/\nData Integrity in Azure SQL Database: https://odetocloud.com/2017/10/03/data-integrity-azure-sql-database/\nAzure SQL Database metrics and diagnostics logging: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-metrics-diag-logging\nCollect and consume log data from your Azure resources: https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview-of-diagnostic-logs\nMonitoring database performance in Azure SQL Database: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-single-database-monitor\nAdaptive query processing in SQL databases: https://docs.microsoft.com/en-us/sql/relational-databases/performance/adaptive-query-processing\nEnhancing query performance with Adaptive Query Processing in SQL Server 2017: https://blogs.technet.microsoft.com/dataplatforminsider/2017/09/28/enhancing-query-performance-with-adaptive-query-processing-in-sql-server-2017/\nAdaptive query processing in SQL databases: https://docs.microsoft.com/en-us/sql/relational-databases/performance/adaptive-query-processing\nGet started with Elastic Database Tools: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-get-started\nAdding a shard using Elastic Database tools: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-add-a-shard\nSQL Server Stretch Database Documentation: https://docs.microsoft.com/en-us/azure/sql-server-stretch-database/\nStretch Database: https://docs.microsoft.com/en-us/sql/sql-server/stretch-database/stretch-database\nImplement Azure Cosmos DB Choose a Cosmos DB API surface; create Cosmo DB API databases and collections; query documents; run Cosmos DB queries; create Graph API databases; execute GraphDB queries; implement MongoDB database; manage scaling of Cosmos DB, including managing partitioning, consistency, and RU/m; manage multiple regions; implement stored procedures; implement JavaScript within Cosmos DB; access Cosmos DB from REST interface; manage Cosmos DB security Azure Cosmos DB Documentation: https://docs.microsoft.com/en-us/azure/cosmos-db/\nAzure Cosmos DB: REST API Reference: https://docs.microsoft.com/en-gb/rest/api/cosmos-db/index\nQuerying Azure Cosmos DB resources using the REST API: https://docs.microsoft.com/en-gb/rest/api/cosmos-db/querying-cosmosdb-resources-using-the-rest-api\nGetting started with Azure Cosmos DB: Graph API: https://azure.microsoft.com/en-gb/resources/samples/azure-cosmos-db-graph-dotnet-getting-started/\nIntroduction to Azure Cosmos DB: Graph API: https://docs.microsoft.com/en-us/azure/cosmos-db/graph-introductionAzure Cosmos DB: Develop with the Graph API in .NET: https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-develop-graph-dotnet\nTesting the Cosmos DB graph database: https://bricaud.github.io/personal-blog/azure-and-cosmos-db-graph/\nIntroduction to Azure Cosmos DB: MongoDB API: https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-introduction\nBuild an Azure Cosmos DB: API for MongoDB app using Node.js: https://docs.microsoft.com/en-us/azure/cosmos-db/mongodb-samples\nConnect a MongoDB application to Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/connect-mongodb-account\nPartition and scale in Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data\nPerformance and scale testing with Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/performance-testing\nPartitioning in Azure Cosmos DB using the SQL API: https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-partition-data\nHow to distribute data globally with Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/distribute-data-globally\nAutomatic regional failover for business continuity in Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/regional-failover\nHow to setup Azure Cosmos DB global distribution using the SQL API: https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-global-distribution-sql-api\nAzure Cosmos DB server-side programming: Stored procedures, database triggers, and UDFs: https://docs.microsoft.com/en-us/azure/cosmos-db/programming\nStored Procedures In Azure Cosmos DB - https://www.c-sharpcorner.com/article/stored-procedures-in-azure-cosmos-db/\nStored Procedures: https://docs.microsoft.com/en-gb/rest/api/cosmos-db/stored-procedures\nSQL Azure Tutorials Blog: http://sqlazuretutorials.com/wordpress/sql-stored-procedures-in-windows-azure-sql-database/\nAzure Cosmos DB database security: https://docs.microsoft.com/en-us/azure/cosmos-db/database-security\nSecuring access to Azure Cosmos DB data: https://docs.microsoft.com/en-us/azure/cosmos-db/secure-access-to-data\nAzure Cosmos DB firewall support: https://docs.microsoft.com/en-us/azure/cosmos-db/firewall-support\nImplement Redis caching Choose a cache tier; implement data persistence; implement security and network isolation; tune cluster performance; integrate Redis caching with ASP.NET session and cache providers; implement Redis data types and operations Redis Cache Documentation: https://docs.microsoft.com/en-us/azure/redis-cache/How to Use Azure Redis Cache: https://docs.microsoft.com/en-us/azure/redis-cache/cache-dotnet-how-to-use-azure-redis-cache\nRedis Cache: https://azure.microsoft.com/en-gb/services/cache/\nIntroduction to the Azure Redis Cache Premium tier: https://docs.microsoft.com/en-us/azure/redis-cache/cache-premium-tier-intro\nHow to configure data persistence for a Premium Azure Redis Cache: https://docs.microsoft.com/en-us/azure/redis-cache/cache-how-to-premium-persistence\nImport and Export data in Azure Redis Cache: https://docs.microsoft.com/en-us/azure/redis-cache/cache-how-to-import-export-data\nAzure Redis Security Caching: https://azure.microsoft.com/en-gb/resources/videos/azure-redis-security-cacheing/\nIncrease performance through Redis Cluster in Azure Redis Cache: https://azure.microsoft.com/en-gb/resources/videos/increase-performance-through-redis-cluster-in-azure-redis-cache/\nASP.NET Session State Provider for Azure Redis Cache: https://docs.microsoft.com/en-us/azure/redis-cache/cache-aspnet-session-state-provider\nAzure Redis Cache samples: https://docs.microsoft.com/en-us/azure/redis-cache/cache-redis-samples\nImplement Azure Search Create a service index; add data; search an index; handle search results Create Index (Azure Search Service REST API): https://docs.microsoft.com/en-us/rest/api/searchservice/create-indexCreate an Azure Search service in the portal: https://docs.microsoft.com/en-us/azure/search/search-create-service-portal\nCreate an Azure Search index using the .NET SDK - https://docs.microsoft.com/en-us/azure/search/search-create-index-dotnet\nCreate, query, and filter an Azure Search index in the portal: https://docs.microsoft.com/en-us/azure/search/search-get-started-portal\nIndexers in Azure Search: https://docs.microsoft.com/en-us/azure/search/search-indexer-overview\nHow to page search results in Azure Search: https://docs.microsoft.com/en-us/azure/search/search-pagination-page-layout\nQueries in Azure Search: https://docs.microsoft.com/en-us/azure/search/search-query-overview\nService limits in Azure Search: https://docs.microsoft.com/en-us/azure/search/search-limits-quotas-capacity\nAdd scoring profiles to a search index (Azure Search Service REST API) - https://docs.microsoft.com/en-us/rest/api/searchservice/add-scoring-profiles-to-a-search-index\n[Manage Identity, Application, and Network Services (10-15%)](https://www.microsoft.com/en-gb/learning/exam-70-532.aspx#syllabus-4) Integrate an app with Azure Active Directory (AAD)\nDevelop apps that use WS-federation, OAuth, and SAML-P endpoints; query the directory by using Microsoft Graph API, MFA and MFA API\nIntegrating applications with Azure Active Directory: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applicationsIntegrating Azure Active Directory with applications getting started guide: https://docs.microsoft.com/en-us/azure/active-directory/active-directory-integrating-applications-getting-started\nAzure Active Directory for developers: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-developers-guide\nConfigure multi-factor authentication for SQL Server Management Studio and Azure AD: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-ssms-mfa-authentication-configure\nMulti-Factor Authentication for Azure AD: https://azure.microsoft.com/en-gb/resources/videos/multi-factor-authentication-for-azure-ad/\nAuthentication Scenarios for Azure AD: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-scenarios\nAzure Active Directory Authentication Protocols: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-protocols\nDesign and implement a messaging strategy Develop and scale messaging solutions using service bus queues, topics, relays, event hubs, Event Grid, and notification hubs; monitor service bus queues, topics, relays, event hubs and notification hubs; determine when to use Event Hubs, Service Bus, IoT Hub, Stream Analytics, and Notification Hubs; implement Azure Event Grid Service Bus queues, topics, and subscriptions: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptionsAzure Service Bus: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-fundamentals-hybrid-solutions\nEvents, Data Points, and Messages - Choosing the right Azure messaging service for your data: https://azure.microsoft.com/en-gb/blog/events-data-points-and-messages-choosing-the-right-azure-messaging-service-for-your-data/\nAn introduction to Azure Event Grid: https://docs.microsoft.com/en-us/azure/event-grid/overview\nAzure Event Grid Documentation: https://docs.microsoft.com/en-us/azure/event-grid/\nA Tour of Azure Messaging Services (Queues, Event Grid, IoT Hub, and More): https://buildazure.com/2017/09/07/a-tour-of-azure-messaging-services-queues-event-grid-iot-hub-and-more/\nDevelop apps that use AAD B2C and AAD B2B Design and implement .NET MVC, Web API, and Windows Desktop apps that leverage social identity provider authentication, including Microsoft account, Facebook, Google+, Amazon, and LinkedIn; leverage Azure AD B2B to design and implement applications that support partner-managed identities, enforce multi-factor authentication Compare B2B collaboration and B2C in Azure Active Directory: https://docs.microsoft.com/en-us/azure/active-directory/active-directory-b2b-compare-b2cAzure Active Directory B2C: Sign in by using Azure AD accounts: https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-setup-aad-custom\nAzure AD B2C: Frequently asked questions (FAQ): https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-faqs\nKeep credentials out of code: Introducing Azure AD Managed Service Identity: https://azure.microsoft.com/en-gb/blog/keep-credentials-out-of-code-introducing-azure-ad-managed-service-identity/\nConfigure Azure Multi-Factor Authentication settings: https://docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-authentication-whats-next\nHow to require MFA in Azure AD Privileged Identity Management: https://docs.microsoft.com/en-us/azure/active-directory/active-directory-privileged-identity-management-how-to-require-mfa\nWhat is Azure Multi-Factor Authentication?: https://docs.microsoft.com/en-us/azure/multi-factor-authentication/multi-factor-authentication\nManage secrets using Azure Key Vault\nConfigure Azure Key Vault; manage access, including tenants; implement HSM protected keys; manage service limits; implement logging; implement key rotation; store and retrieve app secrets including connection strings, passwords, and cryptographic keys; implement Azure Managed Service Identity\nKey Vault Documentation: https://docs.microsoft.com/en-us/azure/key-vault/Get started with Azure Key Vault: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started\nAzure Key Vault Developer\u0026rsquo;s Guide: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-developers-guide\nUse Azure Key Vault from a Web Application: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application\nManaged Service Identity (MSI) for Azure resources: https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/overview\nUse Key Vault from App Service with Managed Service Identity: https://azure.microsoft.com/en-gb/resources/samples/app-service-msi-keyvault-dotnet/\nUse a Windows VM Managed Service Identity (MSI) to access Azure Key Vault - https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/tutorial-windows-vm-access-nonaad\n[Design and Implement Azure Compute, Web, and Mobile Services (35-40%)](https://www.microsoft.com/en-gb/learning/exam-70-532.aspx#syllabus-5) Design Azure App Service Web Apps\nDefine and manage App Service plans; configure Web Apps settings, certificates, and custom domains; manage Web Apps by using the API, Azure PowerShell, Azure Cloud Shell, and Xplat-CLI; implement diagnostics, monitoring, and analytics; design and configure Web Apps for scale and resilience; use Azure Managed Service Identity to access other Azure AD-protected resources including Azure Key Vault\nManage an App Service plan in Azure: https://docs.microsoft.com/en-us/azure/app-service/app-service-plan-manageAzure App Service plan overview: https://docs.microsoft.com/en-us/azure/app-service/azure-web-sites-web-hosting-plans-in-depth-overview\nDesigning resilient applications for Azure: https://docs.microsoft.com/en-us/azure/architecture/resiliency/\nScale up an app in Azure: https://docs.microsoft.com/en-us/azure/app-service/web-sites-scale\nHow to use Azure Managed Service Identity (public preview) in App Service and Azure Functions - https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity\nImplement Azure Functions and WebJobs Create Azure Functions; implement a webhook Function; create an event processing Function; implement an Azure-connected Function; design and implement a custom binding; debug a Function; integrate a Function with storage; implement and configure proxies; integrate with App Service plan; implement Azure Event Grid-based serverless applications Azure Functions Documentation - https://docs.microsoft.com/en-us/azure/azure-functions/Azure Functions Tools for Visual Studio: https://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs\nCreate a function in Azure that is triggered by a timer - https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-scheduled-function\nAzure Functions HTTP and webhook bindings: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook\nCreate a function triggered by a generic webhook: https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-generic-webhook-triggered-function\nCreate a Web Hook or API Azure Function: https://azure.microsoft.com/en-gb/resources/videos/create-a-web-hook-or-api-azure-function/\nStarting an Azure Automation runbook with a webhook: https://docs.microsoft.com/en-us/azure/automation/automation-webhooks\nIntroducing Azure Event Grid – an event service for modern applications: https://azure.microsoft.com/en-gb/blog/introducing-azure-event-grid-an-event-service-for-modern-applications/\nImplement API Management Create managed APIs; configure API Management policies; protect APIs with rate limits; add caching to improve performance; monitor APIs; customise the Developer portal; add authentication and authorisation to applications by using API Management; configure API versions by using API Management; implement git-based configuration using API Management API Management documentation: https://docs.microsoft.com/en-us/azure/api-management/What is API Management?: https://docs.microsoft.com/en-us/azure/api-management/api-management-key-concepts\nImport and publish your first API: https://docs.microsoft.com/en-us/azure/api-management/import-and-publish\nAPI Management policies: https://docs.microsoft.com/en-us/azure/api-management/api-management-policies\nPolicies in Azure API Management: https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-policies\nHow to set or edit Azure API Management policies: https://docs.microsoft.com/en-us/azure/api-management/set-edit-policies\nAdvanced request throttling with Azure API Management: https://docs.microsoft.com/en-us/azure/api-management/api-management-sample-flexible-throttling\nAPI Management: Quota versus Rate Limits: https://blogs.msdn.microsoft.com/sanket/2017/11/02/api-management-quota-versus-rate-limits/\nHow to customize the Azure API Management developer portal using templates: https://docs.microsoft.com/en-us/azure/api-management/api-management-developer-portal-templates\nCustomize developer portal pages using Azure API Management templates: https://azure.microsoft.com/en-gb/blog/customize-your-developer-portal-pages-with-azure-api-management-templates/\nAPI Versioning with Azure API Management - https://blogs.msdn.microsoft.com/apimanagement/2017/09/13/api-versioning-with-azure-api-management/\nVersions \u0026amp; Revisions - https://blogs.msdn.microsoft.com/apimanagement/2017/09/14/versions-revisions/\nDesign Azure App Service API Apps Create and deploy API Apps; automate API discovery by using Swagger and Swashbuckle; use Swagger API metadata to generate client code for an API app; monitor API Apps Host a RESTful API with CORS in Azure App Service: https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-rest-apiWorking With Azure API Apps: https://www.c-sharpcorner.com/article/working-with-azure-api-apps/\nInside Web APIs with Swagger and API Managment with Brady Gaster: https://azure.microsoft.com/en-gb/resources/videos/inside-web-apis-with-swagger-and-api-managment-with-brady-gaster/\nAnnouncing Azure Functions OpenAPI (Swagger) support preview: https://blogs.msdn.microsoft.com/appserviceteam/2017/03/30/announcing-functions-swagger-support/\nGenerating Swagger description metadata from your ASP.NET Core Web APIs with Swashbuckle - https://blogs.msdn.microsoft.com/cesardelatorre/2016/12/05/generating-swagger-description-metadata-from-your-asp-net-core-web-apis-with-swashbuckle/\nHow to: Monitor Apps in Azure App Service: https://docs.microsoft.com/en-us/azure/app-service/web-sites-monitor\nAzure Monitoring REST API walkthrough: https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-rest-api-walkthrough\nMonitoring Azure applications and resources: https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/monitoring-overview Develop Azure Logic Apps Create a Logic App connecting SaaS services; create a Logic App with B2B capabilities; create a Logic App with XML capabilities; trigger a Logic App from another app; create custom and long-running actions; monitor Logic Apps; integrate a logic app with a function; access on-premises data; implement Logic Apps with Event Grid Azure Logic Apps Documentation: https://docs.microsoft.com/en-us/azure/logic-apps/Common scenarios, examples, tutorials, and walkthroughs for Azure Logic Apps: https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-examples-and-scenarios\nIntroducing Azure Logic Apps: https://azure.microsoft.com/en-gb/resources/videos/introducing-azure-logic-apps\nDevelop Azure App Service Mobile Apps Create a Mobile App; add offline sync to a Mobile App; add authentication to a Mobile App; add push notifications to a Mobile App About Mobile Apps in Azure App Service: https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-value-propMobile Apps Documentation: https://docs.microsoft.com/en-us/azure/app-service-mobile/\nEasy Push Notifications with Azure App Service: https://azure.microsoft.com/en-gb/resources/videos/easy-push-notifications-with-azure-app-service\nDesign and implement Azure Service Fabric Applications Create a Service Fabric application; build an Actors-based service; add a web front-end to a Service Fabric application; monitor and diagnose services; migrate apps from cloud services; create, secure, upgrade, and scale Service Fabric Cluster in Azure; scale a Service Fabric app; deploy an application to a Container Overview of Azure Service Fabric: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-overviewSo you want to learn about Service Fabric?: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-content-roadmap\nIntroduction to Service Fabric Reliable Actors: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-introduction\nGetting started with Reliable Actors: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-get-started\nAzure Service Fabric and the Actor Model with Mark Fussell: https://azure.microsoft.com/en-gb/resources/videos/azure-service-fabric-and-the-actor-model-with-mark-fussell/\nCreate a Service Fabric cluster in Azure using the Azure portal: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-creation-via-portal\nCreate a standalone cluster running on Windows Server: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-creation-for-windows-server\nDesign and implement Third Party Platform as a Service (PaaS) Design and implement Third Party Platform as a Service (PaaS)\u0026quot;: Implement Cloud Foundry; implement OpenShift; provision applications by using Azure Quickstart Templates; build applications that leverage Azure Marketplace solutions and services; implement solutions that use Azure Bot Service; create Azure Managed Applications; implement Docker Swarm applications; implement Kubernetes applications Cloud Foundry on Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cloudfoundry-get-startedCloud Foundry on Azure(2): https://docs.microsoft.com/en-us/azure/cloudfoundry/\nDeploy your first app to Cloud Foundry on Microsoft Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cloudfoundry-deploy-your-first-app\nOpenShift on Azure: https://docs.microsoft.com/en-us/azure/openshift/\nDeploy OpenShift Container Platform in Azure: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/openshift-container-platform\nAzure Quickstart Templates: https://azure.microsoft.com/en-gb/resources/templates/\nAzure Marketplace and AppSource publisher guide: https://docs.microsoft.com/en-us/azure/marketplace/marketplace-publishers-guide\nManaged Applications are now Generally Available in the Azure Marketplace: https://azure.microsoft.com/en-us/blog/managed-applications-are-now-generally-available-in-the-azure-marketplace/\nAnnouncing Terraform availability in the Azure Marketplace: https://azure.microsoft.com/en-gb/blog/announcing-terraform-availability-in-the-azure-marketplace/\nWhat is Azure Marketplace?: https://azuremarketplace.microsoft.com/en-us/about\nAzure Managed Applications: https://azure.microsoft.com/en-gb/blog/azure-managed-applications/\nAzure Bot Service: https://azure.microsoft.com/en-gb/services/bot-service/\nAbout Bot Service: https://docs.microsoft.com/en-us/azure/bot-service/bot-service-overview-introduction\nCreate a new swarm on Microsoft Azure in Docker Cloud: https://docs.docker.com/docker-cloud/cloud-swarm/create-cloud-swarm-azure/\nAzure Container Service with DC/OS and Swarm Documentation: https://docs.microsoft.com/en-us/azure/container-service/dcos-swarm/\nDeploy Docker Swarm cluster: https://docs.microsoft.com/en-us/azure/container-service/dcos-swarm/container-service-swarm-walkthrough\nContainer management with Docker Swarm: https://docs.microsoft.com/en-us/azure/container-service/dcos-swarm/container-service-docker-swarm\nIntroduction to Azure Container Service (AKS) preview: https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes\nKubernetes on Azure: https://azure.microsoft.com/en-gb/services/container-service/kubernetes/\nDeploy using Kubernetes to Azure Container Service: https://docs.microsoft.com/en-us/vsts/build-release/apps/cd/azure/deploy-container-kubernetes?view=vsts\nDesign and Implement DevOps Instrument an application with telemetry; discover application performance issues by using Application Insights; deploy Visual Studio Team Services with Continuous integration (CI) and Continuous development (CD); deploy CI/CD with third party platform tools (Jenkins, GitHub, Chef, Puppet; TeamCity); implement mobile DevOps by using HockeyApp; perform root cause analysis using Azure Time Series Insights What is Application Insights?: https://docs.microsoft.com/en-us/azure/application-insights/app-insights-overviewTelemetry – Application Instrumentation CSF Blog: https://azure.microsoft.com/en-us/blog/telemetry-application-instrumentation-csf-blog/\nSeparating telemetry from Development, Test, and Production: https://docs.microsoft.com/en-us/azure/application-insights/app-insights-separate-resources\nContinuous Integration and Delivery: https://www.visualstudio.com/team-services/continuous-integration/\nCI/CD for Azure Web Apps: https://azure.microsoft.com/en-gb/solutions/architecture/vsts-continuous-integration-and-continuous-deployment-for-azure-web-apps/\nCI/CD for Containers: https://azure.microsoft.com/en-gb/solutions/architecture/cicd-for-containers/\nCI/CD for Azure VMs: https://azure.microsoft.com/en-gb/solutions/architecture/cicd-for-azure-vms/\nDevops for Mobile using HockeyApp: https://azure.microsoft.com/en-gb/services/hockeyapp/\nMobile DevOps? DevOps? What’s the Difference?: https://hockeyapp.net/best-practices/mobile-devops-devops-whats-the-difference.html\nRoot cause analysis and time exploration updates to Azure Time Series Insights: https://azure.microsoft.com/en-gb/blog/root-cause-analysis-and-time-exploration-updates-to-azure-time-series-insights/\nTime Series Insights: https://azure.microsoft.com/en-gb/services/time-series-insights/\n","date":"31 March 2018","externalUrl":null,"permalink":"/2018/03/31/70-532-developing-microsoft-azure-solutions-study-notes/","section":"Posts","summary":"","title":"70-532 Developing Microsoft Azure Solutions Study Notes","type":"posts"},{"content":"Developer Day Scotland (@DDDScot) was on Saturday 10th Feb 2018 and was fabulously organised by @crgrieve, @AndrewdeRozario and @ChristosMatskas at a great venue Paisley University in Paisley @UniWestScotland near Glasgow. The even was kindly sponsored by StreamBA, ScreenMedia, Aspose, Net Talent, MBN Recruitment, JetBrains, NDC Conferences, Arnold Clark, Product Forge, Endjin and J.P. Morgan.\nI attended the following talks:-\nContainers jumpstart from a DevOps perspective by @MattVSTS Breaking the Myths Around Artificial Intelligence by @galiyawarrier Secure in Cloud Native by @robinem Beyond C# 7.0 point releases reference semantics and nullablity by @citizenmatt Learning Kotlin as a C# developer by @joe_stead Adding a layer of Chocolate(y) by @gep13 I had a fantastic time and look forward to the next one, Was also great meeting all of the people I managed to speak to, and I also finally meet @tourismgeek.\nMany thanks to each and every the sponsors, there were some nice prices won too!\nI\u0026rsquo;ll add more on each talk later today.\n","date":"11 February 2018","externalUrl":null,"permalink":"/2018/02/11/dddscotland-restrospective/","section":"Posts","summary":"","title":"DDDScotland Restrospective","type":"posts"},{"content":"So one of the hottest thing in Azure these days is without doubt CosmosDB, Cosmos DB is A database for extremely low latency and massively scalable applications anywhere in the world, with native support for NoSQL To get started with your very first Azure CosmosDB\ngo into the portal and click ass on Azure CosmosDB\ngive your new database an id\nchoose an API from the options available\nSQL\nMongoDB\nCasandra\nAzure Table\nGremlin (graph)\nselect your Subscription select a resource group / create a new one choose a location optionally turn on geo-redundancy click pin to pin this to your dashboard\nFor this blog post I chose the SQL API and left geo-redundancy off.\nOk so once you\u0026rsquo;ve done this click on Quick Start Now you\u0026rsquo;ll see that you can download a sample app using .Net, .Net Core, Xamarin, Java, node.js and Python which will download code for you to play around with and create a to-do app.\nI chose .Net and downloaded the code to my machine and opened it up with Visual Studio, run the code and you have a working to-do application hitting your newly created Azure CosmosDB up in Azure.\nTime to go play with Azure CosmosDB, enjoy.\n","date":"3 February 2018","externalUrl":null,"permalink":"/2018/02/03/azure-cosmosdb-quick-start-demo-app/","section":"Posts","summary":"","title":"Azure CosmosDB - Quick Start Demo App","type":"posts"},{"content":"","date":"18 January 2018","externalUrl":null,"permalink":"/categories/aspect-oriented-programming/","section":"Categories","summary":"","title":"Aspect Oriented Programming","type":"categories"},{"content":"Since mid December I have spent a fair amount of time learning about Azure, the content I have covered so far is below, the rest I have yet to learn about =)\nQuick shout out to @Pluralsight, @AzureBarry and @Mark_heath without these courses I wouldn\u0026rsquo;t have learned most of what I know at this moment in time.\nSection 1: Basics of Cloud Computing and Azure Overview In this section we will see what is cloud computing and its acronyms concepts. At the end, the video provide an overview on Microsoft Azure. • The Course Overview • Cloud Computing Acronyms and Concepts • Microsoft Azure Overview 1.1 The Course Overview This video will an overview on the entire course 1.2 Cloud Computing Acronyms and Concepts In this video, we are going to take a look at several Cloud Computing Acronyms and Concepts. • Understand Private Cloud, Public Cloud, and Hybrid Cloud • Get to know IaaS, PaaS, SaaS, DRaaS, and BaaS • Describe several cloud computing characteristics (Scalability, High Availability, Cost, Pay per use,…) 1.3 Microsoft Azure Overview This video gives a high-level overview of the Microsoft Azure public cloud platform. • Know the concepts of the Microsoft Azure datacentre\u0026rsquo;s • Get an overview of Microsoft Azure components and Services • Understand the different Azure platforms, Azure Service Manager, and Azure Resource Manager\nSection 2: Introducing Azure Subscriptions This section introduces us to the Azure subscriptions and helps us to deploy an Azure trial subscription. • Azure Subscriptions • Deploying an Azure Trial Subscription 2.1 Azure Subscriptions This video will an overview on the entire course 2.2 Deploying an Azure Trial Subscription In this video, we are going to take a look at what it takes to deploy an Azure trial subscription. • Get free trial subscription details • Know the description of \u0026lsquo;other\u0026rsquo; free Azure resources that you can use without a cost • Watch a walk through demo on how to set up your trial Azure environment\nSection 3: Introduction to Microsoft Azure Management Portals In this section we will be exploring Azure portals also further the videos explains Azure Management tools in detail. • Exploring the Azure Portals • Azure Management Tools 3.1 Exploring the Azure Portals This video will an overview on the entire course. • Understand what lists are • See when lists are used • Learn how to perform data manipulation with lists\n3.2 Azure Management Tools In this video, we are going to take a look at the main differences between the Azure Classic Portal and the Azure Resource Manager Portal. • Explore the Azure Classic Portal • Explore the Azure Resource Manager Portal • Watch a demo on Azure portals\nSection 4: Implementing an Azure Virtual Machine Architecture This section defines the architectural design of the Azure VM and how to deploy it. • Azure VM Architectural Design • Deploying Your First Azure Virtual Machine • Deploying a More Complex Azure VM Architecture • Handling Azure VM High Availability 4.1 Azure VM Architectural Design In this video, we are going to take a look at the following: (a) Azure Resource Groups (b)Azure Virtual Network (c)Azure Storage Azure Virtual Machines. • Get to know what are Resource Groups and how to architect them • Understand the different Azure Storage accounts and their characteristics, and the highlights of Azure VNets • Know the Azure Virtual Machine sizes and different images available today 4.2 Deploying Your First Azure Virtual Machine In this section, we are going to take a look at Azure Virtual machines, going through different aspects of the creation process, deployment, and management. • Take a walk through of what settings and parameters are required for successful deployment of an Azure VM • Get to know what are the key Azure Virtual Machine requirements (Basics, VM size, settings and optional features) • Understand how to deploy and manage your first Azure VM: demo walk through 4.3 Deploying a More Complex Azure VM Architecture This video has three main sections, helping you in understanding how to deploy more complex Azure VM architectures. It will make clear most of the deployment process in Azure relies on automation and scripts. • Explain the Azure MarketPlace templates • Uncover the GitHub Azure QuickStart templates • Use Visual Studio to automate your Azure VM architecture deployment process 4.4 Handling Azure VM High Availability In this video, we discuss two prime features of Azure public cloud, allowing for a high available Azure VM architecture. • Explain Azure Virtual Machine High Availability SLAs • Get to know what are Azure Availability Sets and why to use them • Demo walk through configuring Azure Availability Sets\nSection 5: Azure Resource Manager (ARM) Templates In this section we will learn what Azure Resources are and how to create customized ARM templates. • Deploying Azure Resources from Community Templates • Creating Your Own Customized ARM Templates • Automating Azure VM Deployment Using Configuration Management 5.1 Deploying Azure Resources from Community Templates\nIn this video, you will learn the following: (a) The structure of an ARM template (b) Deployment from GitHub QuickStart Templates Deployment from Azure QuickStart Templates on azure.com • Know what is the purpose of an Azure ARM template, and how is it structured • Understand the key aspects of deployment of Azure Resources from the GitHub published QuickStart Templates • Learn the key aspects of deploying Azure Resources from the Azure.com templates gallery 5.2 Creating Your Own Customized ARM Templates This video is all about learning to build your own customized Azure ARM templates from Visual Studio • Get an overview of the creation process in Visual Studio • Demo walk through on how to create an Azure ARM template out of Visual Studio • Deploy Azure Resources using automation 5.3 Automating Azure VM Deployment Using Configuration Management In this video, we are going to take a look at what Azure VM Configuration Management means, discussing several of these Configuration Management tools, describing PowerShell DSC, Azure VM Extensions, and highlighting Chef and Puppet • Learn the different definitions of Configuration Management and several well-known Configuration Management tools • Get an overview of PowerShell DSC and VM Extensions in general and observe a demo on PowerShell DSC • Do a walk through of Chef and Puppet\nSection 6: Implementing Azure Identity This section gives detailed explanation on deploying, creating and integrating Azure directory. • Deploying Azure Active Directory • Integrating On-Premises Active Directory with Azure AD • Advanced Features of Azure Active Directory • Integrating Azure AD with SaaS Applications • Azure Active Directory Application Proxy 6.1 Deploying Azure Active Directory This video is all about Azure Active Directory; starting from what exactly Azure Active Directory is, you\u0026rsquo;ll learn about the different versions and SKUs; we\u0026rsquo;ll quickly touch on Azure AD Domain Services, B2B, and B2C and close this video with a deployment walk through. • Get to know what is Azure Active Directory • Understand the Azure Active Directory versions, SKUs, and the differences between them • Get an overview of Azure AD Domain Services, B2B, and B2C scenarios 6.2 Integrating On-Premises Active Directory with Azure AD This video clearly teaches you how to establish a hybrid Azure identity solution, integrating cloud with on-premises Active Directory. • Get to know what is the Azure AD Connect tool and how to use it. • Understand what is Active Directory Federation Services (ADFS) • Watch a demo on AD Connect in action 6.3 Advanced Features of Azure Active Directory In this video, I\u0026rsquo;ll discuss several advanced features of Azure Active Directory • Understand Multi-Factor Authentication (MFA) • Know the company branding • Get know what is advanced reporting 6.4 Integrating Azure AD with SaaS Applications In this video, we are going to take a look at the current issue with using multiple identities and where Azure Active Directory can be of help. • Understand the challenges with SaaS applications and authentication handling • Get to know the use of Azure Active Directory help in optimization and streamlining cloud authentication and identity • Understand what is the Azure Access Panel and how to enable and use it 6.5 Integrating Azure AD with SaaS Applications In this video, we are going to take a look at the current issue with using multiple identities and where Azure Active Directory can be of help. • Understand the challenges with SaaS applications and authentication handling • Get to know the use of Azure Active Directory help in optimization and streamlining cloud authentication and identity • Understand what is the Azure Access Panel and how to enable and use it\nSection 7: Azure Monitoring and Diagnostics In this section we will learn about Azure monitoring and operation management suite, also we will explore Azure application insights. • Azure Built-In Monitoring • Operations Management Suite 7.1 Azure Built-In Monitoring In this video, we are going to take a look at several concepts around Azure monitoring and diagnostics • Get to know the built-in monitoring features Azure provides • Understand Azure Service Health and Azure Boot Diagnostics • Learn how to configure alert notifications and customize your monitoring 7.2 Operations Management Suite Even with several built-in monitoring and diagnostics features, Azure is sometimes limited in output, especially in a hybrid or enterprise oriented environment. That\u0026rsquo;s where Operations Management Suite (OMS) comes to the rescue! • Understand what is Operations Management Suite (OMS) and how to deploy it • Extend Operations Management Suite with Solution Packs • Use OMS Log Search and Log Analytics\nSection 8: Azure Disaster Recovery Solutions This section gives thorough explanation on Implementing Azure for Azure VMs. The section also further explains the concept Azure Site Recovery (ASR) • Implementing Azure Backup for Azure VMs • Implementing Azure Backup (Hybrid) • Azure Site Recovery (ASR) in Hyper-V and Non-Hyper-V Scenarios 8.1 Implementing Azure Backup for Azure VMs Backup is still a vital point in providing a system\u0026rsquo;s high availability and disaster recovery, even when running as a public cloud virtual machine. While the Azure platform provides excellent uptime compared to most on-premises datacenters, one should not forget to take backup into account. • Understand why we use backups for Azure Virtual Machines • Know how to configure Azure Backups of Azure VMs, as well as how to restore an Azure VM • Demo walk through the backup and restore operation 8.2 Implementing Azure Backup (Hybrid) This video will teach you all about using Azure backup in a hybrid topology setup, mainly using Azure Backup solution as a target for your on-premises backups. • Get to know what does it take to use Azure as a backup target • Deploy Azure Backup (agent-based) and deploy Azure Backup Server • Watch a demo on implementing Azure backup in a hybrid scenario 8.3 Azure Site Recovery (ASR) in Hyper-V and Non-Hyper-V Scenarios Azure Site Recovery (ASR) provides organizations with a true disaster/recovery solution for VM workloads, no matter where they are running. Using an intelligent \u0026ldquo;write change\u0026rdquo; replication, an async copy of your VMs are available in Azure and provide RPO/RTO of minutes instead of hours in most other DR solutions. • Understand what is Azure Site Recovery (ASR) • Deploy ASR for Hyper-V workloads • Deploy ASR for non-Hyper-V workloads (Amazon AWS, VMware, Azure Classic VMs, and physical servers)\nSection 9: Creating and Managing SQL Services in Azure This section explores on creating and deploying SQL Azure. At the end, the section gives an overview on managing the SQL server and databases running in Azure. • Deploying SQL VM Solutions • Creating a SQL Azure DB Solution (PaaS) • Managing SQL Server and Databases Running in Azure • SQL Database (Backup and Restore) 9.1 Deploying SQL VM Solutions This video is oriented around using the Azure infrastructure (IaaS) platform, to deploy Virtual Machines running SQL Server. • Know what SQL Server VM Solutions can be deployed in Azure • Understand how to deploy SQL Server VM solutions from an Azure ARM template • Watch a demo on how to deploy SQL Server VM from a template in the Azure Portal 9.2 Creating a SQL Azure DB Solution (PaaS) This video explains the core concepts of using SQL Azure hosted databases, relying on the PaaS aspect of Azure platform. Hosting SQL databases in Azure gives you a lot of flexibility and scalability out of the box, which makes it an ideal candidate for public cloud. • Understand what are the main differences between SQL Server VM and SQL Azure • Deploy a SQL Azure database solution • Explain Azure SQL Database Tiers 9.3 Managing SQL Server and Databases Running in Azure\nThis video combines the management aspect of SQL databases, irrelevant from where they are running (on-premises, in-Azure VMs, or in-Azure PaaS) • Learn how to manage SQL Server VM solutions running in Azure • Learn what it takes to manage your SQL Azure hosted databases • Demo 9.4 SQL Database (Backup and Restore) This video details the flexibility of using Azure for storing your SQL database backups. • Get to know how to integrate SQL Server VM Solutions\u0026rsquo; backups with Azure • Understand how to manage SQL Azure database backups • Watch a demo on SQL backup and restore with the help of Azure platform services\nSection 10: Implementing Azure Web Apps In this section, we will see an overview on Azure Web Apps and plans. Further, we will learn building scalable Web App Solutions. • Azure Web Apps and Plans – An Overview • Deploying Web Apps • Configuring Azure Web Apps Settings • Azure Web Apps Monitoring and Diagnostics • Building Scalable Web App Solutions 10.1 Azure Web Apps and Plans – An Overview This video is part of a larger section, in which you\u0026rsquo;ll learn about Azure platform services. The key components you\u0026rsquo;ll see are Web Apps, Mobile Apps, and Logic Apps. This first video focuses on Azure Web Apps and how to deploy and manage them. • Get an overview of Azure Web Apps and Web Apps Services • Understand why we use Azure Web Apps • Get to know the different Azure Web Apps plans available today 10.2 Deploying Web Apps In this video, we are going to take a look at what it takes to deploy Azure Web Apps. • Learn to deploy Azure Web Apps from the Azure Portal • Learn to deploy Azure Web Apps from Visual Studio • Learn the different ways to publish Web App content 10.3 Configuring Azure Web Apps Settings This video is all about the configuration settings of an Azure Web App (and thus all other Azure App services if you want). • Configure the Web Apps general settings • Configure Web Apps authentication and authorization • Perform Web Apps backups and manage SSL certificates 10.4 Azure Web Apps Monitoring and Diagnostics We already discussed Azure monitoring and diagnostics in a previous video; but this one is specifically around Azure App Services monitoring • Monitor Azure App Services from the Azure Resource Manager Portal • Use specific monitoring and diagnostics for Azure Web Apps • Uncover Azure Application Insights 10.5 Building Scalable Web App Solutions Deploying Azure Web Apps shouldn\u0026rsquo;t always be that hard. But for most enterprises the challenge is keeping up with performance, which is a huge business driver for migrating your web applications to a public cloud platform such as Azure. • Use Staging and Production deployment slots (Continuous Integration/(CI)) • Use Continuous Deployment (CD) • Explain the scaling features per App Tier\nSection 11: Azure Platform-as-a-Service (PaaS) Components This section introduces us to the Azure Paas Solutions, Azure queue storage and table storage and finally Azure Machine Learning. • Introduction to Azure PaaS Solutions • Azure Queue Storage and Table Storage • Introduction to Azure Machine Learning • Azure Non-SQL Database Solutions and Cache • Azure IOT Solutions and Components • Azure Security Center 11.1 Introduction to Azure PaaS Solutions In this video, we will highlight several of the common Azure PaaS components, which basically means stepping away from managing the underlying infrastructure side of the Azure datacenters. • Get to know what is PaaS and how to describe it • Get an overview of Microsoft Azure PaaS Services and components • Explain PaaS characteristics 11.2 Azure Queue Storage and Table Storage This video will teach you all about using Azure Storage Account components, specifically around application integration. • Understand the Azure queue storage • Know the Azure table storage • Secure the storage account integration from your applications 11.3 Introduction to Azure Machine Learning Azure Machine Learning (ML) allows organizations to run high density, high volume based calculations and predictions. It is often used in an industrial or scientific context. • Understand why to use Machine Learning • Understand Azure solutions enabling data science • Get to know the Azure Machine Learning process and algorithms 11.4 Azure Non-SQL Database Solutions and Cache We already discussed SQL database on Azure in a previous video. But SQL Server is not the only database technology available on Azure, as you will learn from this video. • Get an overview of DocumentDB and MongoDB as non-SQL database solutions • Get an introduction to MySQL and how to use it within Azure • Get an overview of Redis Cache and how to use it 11.5 Azure IOT Solutions and Components IOT (short for Internet of Things) is becoming a very important topic in the IT space, and basically in about any industrial segment. By connecting devices to the Internet, they become \u0026lsquo;smarter.\u0026rsquo; In this video, I\u0026rsquo;ll describe the different aspects of IOT, and how it relates to Azure. • Get to know why is Internet of Things (IOT) a big thing, and about IOT devices • Understand the Azure IOT reference architecture • Know the Azure Event Hub, IOT Hub, and Azure Stream Analytics 11.6 Azure Security Center In this last video, I\u0026rsquo;ll talk about Azure security features, and more specifically about the \u0026ldquo;Azure Security Center.\u0026rdquo; This is a centralized dashboard, giving you real-detailed information and views on all-things security in your Azure environment. • Get to know what is Azure Security Center • Deploy Azure Security Center • Watch a demo on using Azure Security Center\nWay more to learn and I am really enjoying learning Azure.\n","date":"18 January 2018","externalUrl":null,"permalink":"/2018/01/18/my-azure-learning-plan-update/","section":"Posts","summary":"","title":"My Azure Learning plan - update","type":"posts"},{"content":"The following is a list of learning resources for your (and my) benefit, this list will be a work in progress and continually updated the more good stuff I come across.\nAzure overview, lists ALL of the Azure services - https://azure-overview.com/\nCreate your first Azure Function using Visual Studio 2017 - https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-your-first-function-visual-studio\nGreat link with lots of awesome content - https://github.com/markheath/azure-functions-links\nAzure Examples on Github - https://github.com/azure-samples\nCourses # Azure Friday - https://azure.microsoft.com/en-gb/resources/videos/azure-friday/ Free Pluralsight courses on Learning Azure - https://azure.microsoft.com/en-gb/training/free-online-courses/ Free Microsoft Learning Paths - https://azure.microsoft.com/en-gb/training/learning-paths/ Blogs on Azure # https://www.azurebarry.com/ https://buildazure.com/ Twitter Accounts to follow # @AzureFunctions - The Official account of the Azure Functions Product Team ","date":"29 December 2017","externalUrl":null,"permalink":"/2017/12/29/azure-learning-resources/","section":"Posts","summary":"","title":"Azure Learning Resources","type":"posts"},{"content":" So I have really gotten into Azure Functions of late and reading about some very clever usages of them, more on that later in another blog post coming soon.\nI have also just completed a demo order pipeline using Azure Functions which I learned about from a Pluralsight course by Mark Heath called Azure Functions Fundamentals (highly recommended).\nDuring this you build an order pipeline so you use Postman to send an example order in JSON to your azure function(s) which does a number of things, over the course you\u0026rsquo;ll add an order to Azure Table Storage, add the order to an Azure Storage Queue, generate a license file using Azure Blob Storage and the generate an email and send the license file using SendGrid a 3rd party email provider.\nThen you can use the Azure Table Storage Explorer tool to look into what you\u0026rsquo;ve managed to create within your tables in Azure Storage.\nWhat I like about this Pluralsight course is that I\u0026rsquo;m learning and also getting to see great demos of how to go about creating azure functions and using them for real scenarios all be it the code isn\u0026rsquo;t obviously production ready but its all about the learning at the moment.\nI haven\u0026rsquo;t finished this course yet but I will soon and more blog posts will follow, off the back of this course I am hoping to do a talk on FaaS and Azure Functions at work this coming March.\n","date":"28 December 2017","externalUrl":null,"permalink":"/2017/12/28/azure-functions/","section":"Posts","summary":"","title":"Azure Functions","type":"posts"},{"content":" So I have been getting my hands on Azure recently and just wanted to blog about what I have learned so far so here goes (condensed version as wanting to get back to learning way more)\nApp Service Plans\nWhat the different levels are Basic, Standard and Premium and what the differences are. App service plans govern how you pay for it Scale out - beef up the VM or the server Scale up - run more than one instance etc. You can have staging environments and automated backups Consumption plan - only pay for what u use What is Serverless?\nThere are still servers of course - you delegate the management of them to third party offerings Use third party Paas wherever possible (for example documentDB) Run your custom code on Azure Functions respond to events let the framework work out how many servers you need Functions as a Service (FaaS) Benefits of Azure functions?\nRapid and simple development module Code it within the portal Eliminate boilerplate Extremely reach feature set CI, Kudu, Easy Auth, Certs, Custom Domains, Settings etc. all included Cost effective pricing - only pay for what you use No servers to maintain Automatic scaling Next up is Azure Functions\u0026hellip;\n","date":"28 December 2017","externalUrl":null,"permalink":"/2017/12/28/what-have-i-learned-so-far-with-azure/","section":"Posts","summary":"","title":"What have I learned so far with Azure?","type":"posts"},{"content":"It\u0026rsquo;s time I got stuck into a learning plan and I\u0026rsquo;ve decided to start with Azure, something I really want to get my hands on more and use day to day.\nMy Azure Learning plan looks like this:-\nSection 1: Basics of Cloud Computing and Azure Overview In this section we will see what is cloud computing and its acronyms concepts. At the end, the video provide an overview on Microsoft Azure. • The Course Overview • Cloud Computing Acronyms and Concepts • Microsoft Azure Overview 1.1 The Course Overview This video will an overview on the entire course 1.2 Cloud Computing Acronyms and Concepts In this video, we are going to take a look at several Cloud Computing Acronyms and Concepts. • Understand Private Cloud, Public Cloud, and Hybrid Cloud • Get to know IaaS, PaaS, SaaS, DRaaS, and BaaS • Describe several cloud computing characteristics (Scalability, High Availability, Cost, Pay per use,…) 1.3 Microsoft Azure Overview This video gives a high-level overview of the Microsoft Azure public cloud platform. • Know the concepts of the Microsoft Azure datacentre\u0026rsquo;s • Get an overview of Microsoft Azure components and Services • Understand the different Azure platforms, Azure Service Manager, and Azure Resource Manager\nSection 2: Introducing Azure Subscriptions This section introduces us to the Azure subscriptions and helps us to deploy an Azure trial subscription. • Azure Subscriptions • Deploying an Azure Trial Subscription 2.1 Azure Subscriptions This video will an overview on the entire course 2.2 Deploying an Azure Trial Subscription In this video, we are going to take a look at what it takes to deploy an Azure trial subscription. • Get free trial subscription details • Know the description of \u0026lsquo;other\u0026rsquo; free Azure resources that you can use without a cost • Watch a walk through demo on how to set up your trial Azure environment\nSection 3: Introduction to Microsoft Azure Management Portals In this section we will be exploring Azure portals also further the videos explains Azure Management tools in detail. • Exploring the Azure Portals • Azure Management Tools 3.1 Exploring the Azure Portals This video will an overview on the entire course. • Understand what lists are • See when lists are used • Learn how to perform data manipulation with lists\n3.2 Azure Management Tools In this video, we are going to take a look at the main differences between the Azure Classic Portal and the Azure Resource Manager Portal. • Explore the Azure Classic Portal • Explore the Azure Resource Manager Portal • Watch a demo on Azure portals\nSection 4: Implementing an Azure Virtual Machine Architecture This section defines the architectural design of the Azure VM and how to deploy it. • Azure VM Architectural Design • Deploying Your First Azure Virtual Machine • Deploying a More Complex Azure VM Architecture • Handling Azure VM High Availability 4.1 Azure VM Architectural Design In this video, we are going to take a look at the following: (a) Azure Resource Groups (b)Azure Virtual Network (c)Azure Storage Azure Virtual Machines. • Get to know what are Resource Groups and how to architect them • Understand the different Azure Storage accounts and their characteristics, and the highlights of Azure VNets • Know the Azure Virtual Machine sizes and different images available today 4.2 Deploying Your First Azure Virtual Machine In this section, we are going to take a look at Azure Virtual machines, going through different aspects of the creation process, deployment, and management. • Take a walk through of what settings and parameters are required for successful deployment of an Azure VM • Get to know what are the key Azure Virtual Machine requirements (Basics, VM size, settings and optional features) • Understand how to deploy and manage your first Azure VM: demo walk through 4.3 Deploying a More Complex Azure VM Architecture This video has three main sections, helping you in understanding how to deploy more complex Azure VM architectures. It will make clear most of the deployment process in Azure relies on automation and scripts. • Explain the Azure MarketPlace templates • Uncover the GitHub Azure QuickStart templates • Use Visual Studio to automate your Azure VM architecture deployment process 4.4 Handling Azure VM High Availability In this video, we discuss two prime features of Azure public cloud, allowing for a high available Azure VM architecture. • Explain Azure Virtual Machine High Availability SLAs • Get to know what are Azure Availability Sets and why to use them • Demo walk through configuring Azure Availability Sets\nSection 5: Azure Resource Manager (ARM) Templates In this section we will learn what Azure Resources are and how to create customized ARM templates. • Deploying Azure Resources from Community Templates • Creating Your Own Customized ARM Templates • Automating Azure VM Deployment Using Configuration Management 5.1 Deploying Azure Resources from Community Templates\nIn this video, you will learn the following: (a) The structure of an ARM template (b) Deployment from GitHub QuickStart Templates Deployment from Azure QuickStart Templates on azure.com • Know what is the purpose of an Azure ARM template, and how is it structured • Understand the key aspects of deployment of Azure Resources from the GitHub published QuickStart Templates • Learn the key aspects of deploying Azure Resources from the Azure.com templates gallery 5.2 Creating Your Own Customized ARM Templates This video is all about learning to build your own customized Azure ARM templates from Visual Studio • Get an overview of the creation process in Visual Studio • Demo walk through on how to create an Azure ARM template out of Visual Studio • Deploy Azure Resources using automation 5.3 Automating Azure VM Deployment Using Configuration Management In this video, we are going to take a look at what Azure VM Configuration Management means, discussing several of these Configuration Management tools, describing PowerShell DSC, Azure VM Extensions, and highlighting Chef and Puppet • Learn the different definitions of Configuration Management and several well-known Configuration Management tools • Get an overview of PowerShell DSC and VM Extensions in general and observe a demo on PowerShell DSC • Do a walk through of Chef and Puppet\nSection 6: Implementing Azure Identity This section gives detailed explanation on deploying, creating and integrating Azure directory. • Deploying Azure Active Directory • Integrating On-Premises Active Directory with Azure AD • Advanced Features of Azure Active Directory • Integrating Azure AD with SaaS Applications • Azure Active Directory Application Proxy 6.1 Deploying Azure Active Directory This video is all about Azure Active Directory; starting from what exactly Azure Active Directory is, you\u0026rsquo;ll learn about the different versions and SKUs; we\u0026rsquo;ll quickly touch on Azure AD Domain Services, B2B, and B2C and close this video with a deployment walk through. • Get to know what is Azure Active Directory • Understand the Azure Active Directory versions, SKUs, and the differences between them • Get an overview of Azure AD Domain Services, B2B, and B2C scenarios 6.2 Integrating On-Premises Active Directory with Azure AD This video clearly teaches you how to establish a hybrid Azure identity solution, integrating cloud with on-premises Active Directory. • Get to know what is the Azure AD Connect tool and how to use it. • Understand what is Active Directory Federation Services (ADFS) • Watch a demo on AD Connect in action 6.3 Advanced Features of Azure Active Directory In this video, I\u0026rsquo;ll discuss several advanced features of Azure Active Directory • Understand Multi-Factor Authentication (MFA) • Know the company branding • Get know what is advanced reporting 6.4 Integrating Azure AD with SaaS Applications In this video, we are going to take a look at the current issue with using multiple identities and where Azure Active Directory can be of help. • Understand the challenges with SaaS applications and authentication handling • Get to know the use of Azure Active Directory help in optimization and streamlining cloud authentication and identity • Understand what is the Azure Access Panel and how to enable and use it 6.5 Integrating Azure AD with SaaS Applications In this video, we are going to take a look at the current issue with using multiple identities and where Azure Active Directory can be of help. • Understand the challenges with SaaS applications and authentication handling • Get to know the use of Azure Active Directory help in optimization and streamlining cloud authentication and identity • Understand what is the Azure Access Panel and how to enable and use it\nSection 7: Azure Monitoring and Diagnostics In this section we will learn about Azure monitoring and operation management suite, also we will explore Azure application insights. • Azure Built-In Monitoring • Operations Management Suite 7.1 Azure Built-In Monitoring In this video, we are going to take a look at several concepts around Azure monitoring and diagnostics • Get to know the built-in monitoring features Azure provides • Understand Azure Service Health and Azure Boot Diagnostics • Learn how to configure alert notifications and customize your monitoring 7.2 Operations Management Suite Even with several built-in monitoring and diagnostics features, Azure is sometimes limited in output, especially in a hybrid or enterprise oriented environment. That\u0026rsquo;s where Operations Management Suite (OMS) comes to the rescue! • Understand what is Operations Management Suite (OMS) and how to deploy it • Extend Operations Management Suite with Solution Packs • Use OMS Log Search and Log Analytics\nSection 8: Azure Disaster Recovery Solutions This section gives thorough explanation on Implementing Azure for Azure VMs. The section also further explains the concept Azure Site Recovery (ASR) • Implementing Azure Backup for Azure VMs • Implementing Azure Backup (Hybrid) • Azure Site Recovery (ASR) in Hyper-V and Non-Hyper-V Scenarios 8.1 Implementing Azure Backup for Azure VMs Backup is still a vital point in providing a system\u0026rsquo;s high availability and disaster recovery, even when running as a public cloud virtual machine. While the Azure platform provides excellent uptime compared to most on-premises datacenters, one should not forget to take backup into account. • Understand why we use backups for Azure Virtual Machines • Know how to configure Azure Backups of Azure VMs, as well as how to restore an Azure VM • Demo walk through the backup and restore operation 8.2 Implementing Azure Backup (Hybrid) This video will teach you all about using Azure backup in a hybrid topology setup, mainly using Azure Backup solution as a target for your on-premises backups. • Get to know what does it take to use Azure as a backup target • Deploy Azure Backup (agent-based) and deploy Azure Backup Server • Watch a demo on implementing Azure backup in a hybrid scenario 8.3 Azure Site Recovery (ASR) in Hyper-V and Non-Hyper-V Scenarios Azure Site Recovery (ASR) provides organizations with a true disaster/recovery solution for VM workloads, no matter where they are running. Using an intelligent \u0026ldquo;write change\u0026rdquo; replication, an async copy of your VMs are available in Azure and provide RPO/RTO of minutes instead of hours in most other DR solutions. • Understand what is Azure Site Recovery (ASR) • Deploy ASR for Hyper-V workloads • Deploy ASR for non-Hyper-V workloads (Amazon AWS, VMware, Azure Classic VMs, and physical servers)\nSection 9: Creating and Managing SQL Services in Azure This section explores on creating and deploying SQL Azure. At the end, the section gives an overview on managing the SQL server and databases running in Azure. • Deploying SQL VM Solutions • Creating a SQL Azure DB Solution (PaaS) • Managing SQL Server and Databases Running in Azure • SQL Database (Backup and Restore) 9.1 Deploying SQL VM Solutions This video is oriented around using the Azure infrastructure (IaaS) platform, to deploy Virtual Machines running SQL Server. • Know what SQL Server VM Solutions can be deployed in Azure • Understand how to deploy SQL Server VM solutions from an Azure ARM template • Watch a demo on how to deploy SQL Server VM from a template in the Azure Portal 9.2 Creating a SQL Azure DB Solution (PaaS) This video explains the core concepts of using SQL Azure hosted databases, relying on the PaaS aspect of Azure platform. Hosting SQL databases in Azure gives you a lot of flexibility and scalability out of the box, which makes it an ideal candidate for public cloud. • Understand what are the main differences between SQL Server VM and SQL Azure • Deploy a SQL Azure database solution • Explain Azure SQL Database Tiers 9.3 Managing SQL Server and Databases Running in Azure\nThis video combines the management aspect of SQL databases, irrelevant from where they are running (on-premises, in-Azure VMs, or in-Azure PaaS) • Learn how to manage SQL Server VM solutions running in Azure • Learn what it takes to manage your SQL Azure hosted databases • Demo 9.4 SQL Database (Backup and Restore) This video details the flexibility of using Azure for storing your SQL database backups. • Get to know how to integrate SQL Server VM Solutions\u0026rsquo; backups with Azure • Understand how to manage SQL Azure database backups • Watch a demo on SQL backup and restore with the help of Azure platform services\nSection 10: Implementing Azure Web Apps In this section, we will see an overview on Azure Web Apps and plans. Further, we will learn building scalable Web App Solutions. • Azure Web Apps and Plans – An Overview • Deploying Web Apps • Configuring Azure Web Apps Settings • Azure Web Apps Monitoring and Diagnostics • Building Scalable Web App Solutions 10.1 Azure Web Apps and Plans – An Overview This video is part of a larger section, in which you\u0026rsquo;ll learn about Azure platform services. The key components you\u0026rsquo;ll see are Web Apps, Mobile Apps, and Logic Apps. This first video focuses on Azure Web Apps and how to deploy and manage them. • Get an overview of Azure Web Apps and Web Apps Services • Understand why we use Azure Web Apps • Get to know the different Azure Web Apps plans available today 10.2 Deploying Web Apps In this video, we are going to take a look at what it takes to deploy Azure Web Apps. • Learn to deploy Azure Web Apps from the Azure Portal • Learn to deploy Azure Web Apps from Visual Studio • Learn the different ways to publish Web App content 10.3 Configuring Azure Web Apps Settings This video is all about the configuration settings of an Azure Web App (and thus all other Azure App services if you want). • Configure the Web Apps general settings • Configure Web Apps authentication and authorization • Perform Web Apps backups and manage SSL certificates 10.4 Azure Web Apps Monitoring and Diagnostics We already discussed Azure monitoring and diagnostics in a previous video; but this one is specifically around Azure App Services monitoring • Monitor Azure App Services from the Azure Resource Manager Portal • Use specific monitoring and diagnostics for Azure Web Apps • Uncover Azure Application Insights 10.5 Building Scalable Web App Solutions Deploying Azure Web Apps shouldn\u0026rsquo;t always be that hard. But for most enterprises the challenge is keeping up with performance, which is a huge business driver for migrating your web applications to a public cloud platform such as Azure. • Use Staging and Production deployment slots (Continuous Integration/(CI)) • Use Continuous Deployment (CD) • Explain the scaling features per App Tier\nSection 11: Azure Platform-as-a-Service (PaaS) Components This section introduces us to the Azure Paas Solutions, Azure queue storage and table storage and finally Azure Machine Learning. • Introduction to Azure PaaS Solutions • Azure Queue Storage and Table Storage • Introduction to Azure Machine Learning • Azure Non-SQL Database Solutions and Cache • Azure IOT Solutions and Components • Azure Security Center 11.1 Introduction to Azure PaaS Solutions In this video, we will highlight several of the common Azure PaaS components, which basically means stepping away from managing the underlying infrastructure side of the Azure datacenters. • Get to know what is PaaS and how to describe it • Get an overview of Microsoft Azure PaaS Services and components • Explain PaaS characteristics 11.2 Azure Queue Storage and Table Storage This video will teach you all about using Azure Storage Account components, specifically around application integration. • Understand the Azure queue storage • Know the Azure table storage • Secure the storage account integration from your applications 11.3 Introduction to Azure Machine Learning Azure Machine Learning (ML) allows organizations to run high density, high volume based calculations and predictions. It is often used in an industrial or scientific context. • Understand why to use Machine Learning • Understand Azure solutions enabling data science • Get to know the Azure Machine Learning process and algorithms 11.4 Azure Non-SQL Database Solutions and Cache We already discussed SQL database on Azure in a previous video. But SQL Server is not the only database technology available on Azure, as you will learn from this video. • Get an overview of DocumentDB and MongoDB as non-SQL database solutions • Get an introduction to MySQL and how to use it within Azure • Get an overview of Redis Cache and how to use it 11.5 Azure IOT Solutions and Components IOT (short for Internet of Things) is becoming a very important topic in the IT space, and basically in about any industrial segment. By connecting devices to the Internet, they become \u0026lsquo;smarter.\u0026rsquo; In this video, I\u0026rsquo;ll describe the different aspects of IOT, and how it relates to Azure. • Get to know why is Internet of Things (IOT) a big thing, and about IOT devices • Understand the Azure IOT reference architecture • Know the Azure Event Hub, IOT Hub, and Azure Stream Analytics 11.6 Azure Security Center In this last video, I\u0026rsquo;ll talk about Azure security features, and more specifically about the \u0026ldquo;Azure Security Center.\u0026rdquo; This is a centralized dashboard, giving you real-detailed information and views on all-things security in your Azure environment. • Get to know what is Azure Security Center • Deploy Azure Security Center • Watch a demo on using Azure Security Center\nTime to get stuck in\u0026hellip;.\n","date":"1 November 2017","externalUrl":null,"permalink":"/2017/11/01/azure-learning-plan/","section":"Posts","summary":"","title":"Azure Learning plan","type":"posts"},{"content":"In November last year I was given the chance to change my job role from a developer to become the teams SRE (Site Reliability Engineer) - this meant less time coding and I had to think about this, do I really want to do this as I do love writing code.\nTaking a look at the direction the world of web development was heading I had to think do I really want to give up on time coding and look for another challenge, and boy do I enjoy a new challenge.\nAt this time I was a .Net Developer writing C# and had been doing that for a long time, we were using AngularJS and doing the Agile thing with sprint ceremonies and what not. I really like AngularJS, writing API\u0026rsquo;s and tying it all together in our sprint work - but something just wasn\u0026rsquo;t quite right.\nLike most companies and teams within companies we had some technical debt to pay back and if you know me well I do love a good moan when things aren\u0026rsquo;t how they should be.\nSo now I have the opportunity to fix things, and I think this is my best skill if I\u0026rsquo;m honest, finding bugs and fixing them or taking something that works and making it better - better is a matter of opinion obviously.\nMoving back to my new role, it\u0026rsquo;s a devops/sre role with my own kanban board and list of stuff to work on with which itself will be mean a number of different things to get my teeth into, work for the rest of 2017 at least.\nSome of the things I will get my teeth into this year include improving our build pipeline, database deployments, metrics on a number of things including builds, code quality and the like.\nWe have some good metrics already and I\u0026rsquo;d like to add some tools I\u0026rsquo;ve used in the past which include @OctopusDeploy and @Raygunio\nAt work I\u0026rsquo;m an application security champion which means I have to make sure our code is secure and passes all of the security measure in place at work which I thoroughly enjoy - so lots to get stuck into.\nHeres to a productive 2017 and we shall see how far I get with some big changes ahead.\n","date":"3 January 2017","externalUrl":null,"permalink":"/2017/01/03/new-job-role/","section":"Posts","summary":"","title":"New Job Role","type":"posts"},{"content":"So for the first 3 months of 2107 I\u0026rsquo;m planning on learning as much @Docker as I can.\nSo far I have it installed on my Mac pulled down some different images and played around with Jenkins Blue Ocean and read some online articles, just some very basic stuff.\nMy goals for between now and end of March is as follows:-\nGet used to the commands and try them out and see what is available Read up on stuff like Swarm and the other Docker stuff which at this point I know nothing about Create some basic containers and see whats possible I have some stuff I\u0026rsquo;d like to try out and see what\u0026rsquo;s possible, how easy it is and the end goal is to have done a talk at work in February on Docker and to have learned as much as possible each week whenever possible.\nI am going to be using the following links, shout out if I am missing some invaluable content, be it blogs, books or training etc.\nDocker Training - https://training.docker.com Docker Blog - https://blog.docker.com Pluralsight - https://www.pluralsight.com That\u0026rsquo;s it for now, let me know if I\u0026rsquo;ve missed a great resource.\nThanks Gregor, @gregor_suttie\n","date":"3 January 2017","externalUrl":null,"permalink":"/2017/01/03/what-i-hope-to-learn-in-first-quarter-of-2017/","section":"Posts","summary":"","title":"What I hope to learn in first quarter of 2017","type":"posts"},{"content":"","date":"27 February 2016","externalUrl":null,"permalink":"/tags/hackathon/","section":"Tags","summary":"","title":"Hackathon","type":"tags"},{"content":"Last week at work we did an offsite hackathon over 2 days offsite at Skillsmatter which is in Central London, the idea was to get offsite and brainstorm ideas around how we can benefit our users and add more value to the product we work on.\nThe hackathon included everyone from the team including UX designers, QA testers, Developers and Product Owners, and we had a clear vision which was our goal for the 2 days.\nI had never been to a hackathon or anything like it before and I wont go into too much detail but the following is what we did for 2 days, how we went about it and perhaps you can take some ideas from it and do your own similar thing at your company or with your team.\nGround Rules\nDefine some grounds rules at the start and try to respect them over the 2 days.\nDay 1\nNo electronics allowed (i.e. mobiles or Ipad\u0026rsquo;s), except your laptop. No ideas are silly. Only one person speaks at anytime. Elmos - Enough Lets Move On (if one person talks for too long). HiPPO (highest paid person\u0026rsquo;s opinion, highest paid person in the office) - everyone\u0026rsquo;s opinion has same value and weight, bosses don\u0026rsquo;t make the decisions. Parking Lot - area where some ideas aren\u0026rsquo;t thrown out but places on this part of the whiteboard for later on future discussions perhaps. After we set some ground rules we split into teams and individually wrote down all of our ideas for ways to try to meet our vision and then we discussed and grouped them into similar types. From there we decided we had 3 ideas which we then whittled down to 2, we split into teams and started with some sprint planning in each team.\nAfter we planned out our ideas we then started work using small 1.5 hour sprints, each sprint ending with a sprint retrospective and show and tell to the other team, here we gave feedback to the other team and discussed the good and the bad and the potential with each idea etc.\nDay 1 lasted from 8:30 am to around about 6pm I think it was and it was a pretty long day but super awesome fun.\nDay 2\nDay 2 started again with some sprint planning, figuring out what we wanted to achieve and splitting out tasks for each person in the team to have something to work on and something to produce at the end of the sprint. Some people worked on the UI design, developers worked on the code, testers wrote some test and wire frames were also created by the Product Owners and some of the designers too.\nI\u0026rsquo;ll skip to the most important part of the 2 days and what I personally took away from the 2 day workshop/hackathon.\nWhat did we produce\nAfter the 2 days we came away with 2 separate pieces of work which met our vision and will definitely improve our product, we had working code, it was tested, it looked pretty good and with a couple of days work would be production ready.\nLessons Learnt\nWorking in a different way to our normal 2 week sprints was awesome, having everyone in the team, all together, working around a table, throwing ideas out, dismissing some and getting instant feedback resulted in rapid feature creation from start to finish, in 1.5 days of actually doing the work we had something not far off production ready. Instant Feedback - Feedback from everyone right there and then was key to delivering something we all thought worked, and would benefit our end users. Every single person had a voice, every single person had their own ideas and collaborating together to pull the best parts of these ideas together was something which we don\u0026rsquo;t always get to do. Offsite - being away from work and not having the disruptions of email/meetings/phonecall\u0026rsquo;s in a nice big building with areas to go eat and relax for a bit helped a lot. Writing down all the ideas, being able to group them together and see the most popular ideas helped drive the towards picking the ideas to work on. Being able to have everyone at the same level and not have the boss have the final say was quite an interesting take on it and one which I think everyone welcomed. This will hopefully change the way we do larger pieces of work going forward in our sprints, getting everyone together and brain storming ideas, designs and getting instant feedback and rapid development so that we can take a piece of work and deliver more over 1 sprint rather than breaking the same piece of work over say 2 sprints. Summary I\u0026rsquo;d recommend your team try something like this, keep it organised, keep it simple, everyone is equal in the room, set ground rules, have a vision or a goal your all attempting to try to reach and have fun, the best part of the 2 days it was fun, we were discussing it all week afterwards and every single person loved it.\nWe covered a lot more than this but I don\u0026rsquo;t want to bore people with all the details - if you want to ask me anything about this post add a comment.\nThanks Gregor\n","date":"27 February 2016","externalUrl":null,"permalink":"/2016/02/27/my-companys-2-day-hackathon/","section":"Posts","summary":"","title":"My company's 2 day hackathon","type":"posts"},{"content":"","date":"18 February 2016","externalUrl":null,"permalink":"/categories/javascript/","section":"Categories","summary":"","title":"JavaScript","type":"categories"},{"content":"","date":"18 February 2016","externalUrl":null,"permalink":"/categories/knockoutjs/","section":"Categories","summary":"","title":"KnockoutJS","type":"categories"},{"content":"Today, Feb 16th, I attended MSWebdevday ran by Microsoft in Glasgow which was an event covering all things web related from Microsoft, the speakers were @christosmatskas, @thebeebs and @martinkearn and was an all day event.\nThe Schedule for the day covered various topics and it was great to learn so many new things and get my first glimpse at some new technologies, I always love learning something new, and I even sat next to the illustrious Gary Ewan Park, someone who I have chatted to a few times on twitter but not every managed to meet.\nOk so lets cover the actual event:-\nThe first talk was by on What\u0026rsquo;s New in ASP.Net Core 1.0 and was a tour of the new features, how to get it, how to use it, whats new, whats no longer there and he also talked about how you can just take the files and drop them into a folder when deploying, there\u0026rsquo;s no gac, you can just deploy the Core files in a folder alongside your code, this is very neat, its cross-platform, and it means you could have the same site running under different version of Core going forward should you choose to or need to have this.\nThe second Talk was Building with JavaScript Task Runners, this was mainly about how to get gulp, how to set it up and how to run some tasks to minify your css, javascript files and all that good stuff, how to add it into Visual Studio as a build step after you compile your code, showed an example gulp file and lots more.\nThe third talk was Entity Framework Core 1.0, and covered EF and how to use it, how to use code first and also mentioned EF6 how its improved greatly from previous versions and why you should choose this version at the moment whilst EF Core 1.0 is still being worked on and has the tooling added to it for the Core 1.0 release.\nThe fourth talk was APIs: the cogs behind the machine and this talk was about api\u0026rsquo;s and mainly web api and how in Core 1.0 there is no MVC and WebAPI its just one thing now and your controller is an API controller, so no need for MVC and WebAPI there is just the controllers now which kind of merge both together.\nThe fifth talk was Dev Ops in Azure and this covered deploying your website to Azure, making changes, showing the changes, getting the publisher file for using in side Visual Studio and publishing your changes from Visual Studio using Git int his example to deploy your changes from within VS up to the new Azure portal.\nThe sixth talk was Hitchhikers Guide to JavaScript, this talk focused on ECMAScript and the future of JavaScript and basically how a lot more code that we write will be JavaScript and we saw examples of the features coming in the next few years etc.\nThe seventh talk was Web Performance and how to check your websites performance using tools like YSlow and Google Page Speed etc and then how to go about making it make far less requests, cache JavaScript, enable IIS features and how to optimise images etc to make your website perform much faster that it currently does.\nThe eight talk was Single Page Applications and was about KnockoutJS and Angular, talking about Angular 2 and how it makes use of TypeScript and showed code covering KnockoutJS and AngularJS.\nThe ninth talk was about Hybrid Web Apps and how you can create application that can appear as Windows 8/10 tiles, make use of Microsoft Office and showed some very neat stuff using ManifoldJS which is itself very cool stuff.\nOther stuff mentioned I wrote some notes during the talks (should have taken a lot more) but a couple of things I need to look at are listed below:-\nDeveloper Developer Developer Day in Scotland - DDD Scotland WebHackWednesday on Channel 9 - WebHackWednesday Free tools for cross-browser testing - Dev.MicrosoftEdge.com Project Oxford Api - Just go play here and try it out TodoMVC - Helping you select an MV* framework Remove the # in urls in Angular - use Html5Mode within routing config. Microsoft Virtual Academy - Free Online Technical Training Summary The event was great, full days learning, a lot of content covered, great speakers and good turn out. Spoke to some guys I chat to on twitter and all in all an awesome day spent learning some new stuff. There was a lot of content, I\u0026rsquo;ve missed half of it I\u0026rsquo;m sure so take a look at the slides on the site at MSWebdevday.\nDear Microsoft can we have some more of these days please? - especially Azure and Core related content.\n","date":"18 February 2016","externalUrl":null,"permalink":"/2016/02/18/mswebday-what-i-took-away-from-it/","section":"Posts","summary":"","title":"MSWebDay - What I took away from it","type":"posts"},{"content":"","date":"18 February 2016","externalUrl":null,"permalink":"/categories/mvc/","section":"Categories","summary":"","title":"MVC","type":"categories"},{"content":" On twitter recently I read a few people talking about technical debt and how it occurs and how to best tackle it, so here is my view on said subject.\nTechnical Debt\nTechnical debt comes in many forms, shapes and sizes and almost every team/developer is aware of technical debt within your company.\nOver the years I\u0026rsquo;ve worked in several companies most of which knew they had a fair bit of technical debt and did very little about it, sometimes nothing, so here are a few examples and how to go about fixing your technical debt:-\nWe didn\u0026rsquo;t write it So the developers who wrote the code have all left, ok then task a couple of current developer to report on this project and ask them to give your team a heads up on the state of the code base and there suggestions for removing this as technical debt, either get people up to speed with the code base, document the current state of the code base and perhaps even find out if its worth re-writing but by all means do something with this technical debt.\nDon\u0026rsquo;t let it mount up over time, It\u0026rsquo;ll be like the cupboard or the attic in the house where you put all the stuff you don\u0026rsquo;t want look at and that is not where you want to get to.\nIf the code is apart of your projects then your team owns that code, no one else does, it\u0026rsquo;s not an excuse.\nThe code is written using old technology Same as above, then document it, offer suggestions to get it up to newer technologies and task people with doing something about it, don\u0026rsquo;t let it remain in the state it currently is.\nThe code has no tests Same as before, get a developer up to speed with it and write unit tests, refactor the code and document they\u0026rsquo;re findings, it won remain technical debt for very long\nSummary I realise that some technical debt there is just nothing you can do, maybe you don\u0026rsquo;t have the source code for it or you don\u0026rsquo;t have any developers who know the language well enough to update the application, perhaps no one in your team knows how it\u0026rsquo;s supposed to work. The thing here is to try your very best to do something with your technical debt and as a team talk about it, work at decreasing the amount of technical debt your team owns, take actions to fix, document, rewrite or whatever but do something about it now, don\u0026rsquo;t let time drag on and just let it grow.\nDon\u0026rsquo;t start on new features unless they are critical and fix your technical debt, it could make the next persons job a lot easier and that can only be a good thing.\nDocument your solutions, the number of times I have started looking at code and asked what does this do and no one in the team can answer the question is quite scary, that should never be the case in my opinion.\n","date":"25 January 2016","externalUrl":null,"permalink":"/2016/01/25/technical-debt-in-your-team/","section":"Posts","summary":"","title":"Technical Debt in your team","type":"posts"},{"content":"","date":"19 January 2016","externalUrl":null,"permalink":"/categories/octopus-deploy/","section":"Categories","summary":"","title":"Octopus Deploy","type":"categories"},{"content":"","date":"19 January 2016","externalUrl":null,"permalink":"/categories/powershell/","section":"Categories","summary":"","title":"PowerShell","type":"categories"},{"content":"","date":"19 January 2016","externalUrl":null,"permalink":"/categories/teamcity/","section":"Categories","summary":"","title":"TeamCity","type":"categories"},{"content":"Over the last 20 years I\u0026rsquo;ve seen many a deployment, some good, some bad and the ugly, life\u0026rsquo;s too short for manual/long deployments.\nHere is what I recommend\nIf you have manual steps in your deployments then stop it, now, no seriously, you can deploy with zero manual steps (clicking deploy doesn\u0026rsquo;t count).\nWhat to do instead\nGet yourself TeamCity, yes TeamCity, Jenkins is ok but you get what you pay for, trust me Jenkins isn\u0026rsquo;t TeamCity. Ok now that you have an excellent build server, you\u0026rsquo;ll want to script your builds, for this I liked using psake along with PowerShell, honestly people who don\u0026rsquo;t know PowerShell are missing out, its awesome.\nSo get your scripts together and kick the builds off from TeamCity using psake.\nUnit Test your PowerShell Scripts\nUsing Pester you can unit test your PowerShell scripts, thus realising that their fragile or poorly written or just large function which are hard to test, well do yourself a favour and use pester to unit test them. Pester also gives you code coverage for your PowerShell scripts\nDeploy your app\nTo deploy any .Net app use Octopus Deploy, its easy, its painless, it deploys with error handling, rollback using transactions, and you can do blue/green deployments, if you want to deploy a previous release, one click, deploy to multiple environments, any previous version etc. all in one click.\nSummary To summarise, no more manual steps, no copying files, manually unzipping files, creating folders etc, - no need to do that, and leads to human error, highly recommend each of those tools.\n","date":"19 January 2016","externalUrl":null,"permalink":"/2016/01/19/tips-for-deploying-your-net-project/","section":"Posts","summary":"","title":"Tips for Deploying your .Net project","type":"posts"},{"content":"Ok so we have seen in parts 1, 2, and 3 how to go about adding your database to source control, as well as comparing the schema and the data held within our SQL Server databases.\nIts time to go about releasing changes made from one database to another (again think of you deploying changes from UAT to Production). There are several ways to go about releasing the changes, here are two of them:-\nScript the schema and data changes as 2 separate scripts, which you can easily combine yourself. Use Redgate SQL Packager and even create an .exe to run which will allow us to update the database. Ok so let me demo how to go about using option two using Redgate SQL Packager which comes with the Redgate SQL Toolbelt.\nStart up SQL Packager and you\u0026rsquo;ll see this start-up screen:-\nI want to package an upgrade to a database so I have selected that option already, the next screen shows this:- Above I have chosen my Database server and the database I want to use as the source and the target database (one we want to update).\nBelow shows the database objects I wish to package and apply on the target database.\nBelow shows the tables whose data I want to package and apply to the new database.\nBelow shows me the script that has been generated for me, first tab is the schema script, second tab is the data script and the third tab is for any warnings.\nAnd the last screen gives us a choice to either package the change as a .exe, package it as a c# project, launch the script in SQL Query Analyser or Save the script for further inspection.\nChoose option 1, run the exe and your database updates are complete, that\u0026rsquo;s all there is to it, any issues found the changes will be rolled back as they are transactional, leaving your database in tact.\nOnce complete, just run SQL Compare and SQL Data Compare and you can verify all is good - and viola, you\u0026rsquo;ve just updated production with schema and database changes, and you\u0026rsquo;ve been given a few different ways to do using RedGate SQL Toolbelt.\n","date":"12 January 2016","externalUrl":null,"permalink":"/2016/01/12/continuous-deployments-for-sql-server-part-4/","section":"Posts","summary":"","title":"Continuous Deployments for SQL Server - Part 4","type":"posts"},{"content":"","date":"12 January 2016","externalUrl":null,"permalink":"/categories/redgate/","section":"Categories","summary":"","title":"RedGate","type":"categories"},{"content":"Over the years I\u0026rsquo;ve seen a number of places of work which suffer from the following, a team member leaves or is on holiday and he or she is the go to developer, the developer that\u0026rsquo;s the only person who really knows that topic or area and as a result you have to wait for them to return, lets face it I\u0026rsquo;m pretty sure this has happened to a huge percentage of us, so here is an idea to help with this:-\nSo for example say we take the following as an example:-\nFrom the above we can figure out that Andy doesn\u0026rsquo;t know anything about the internal and external websites, perhaps he can be brought up to speed, also Andy is the only person who knows anything about the Deployment and the PowerShell scripts, that means he\u0026rsquo;s the bottleneck or however you want to put it, other developers should be brought up to speed so that he is not the only person with knowledge in that area, if he went on holiday or left then you have a glaring problem.\nYou can do this same will skills and this is much more common I have found, and yeah not everyone is keen to admit to not knowing much about a certain area but just reassure them that this is not what this matrix is for.\nMaybe some of you will find this useful, hopefully it doesn\u0026rsquo;t show that your team rely on some people, and its good to share knowledge within your teams.\n","date":"9 January 2016","externalUrl":null,"permalink":"/2016/01/09/liquidity-matrix-what-is-it-and-how-might-it-help-your-team/","section":"Posts","summary":"","title":"Liquidity matrix - what is it and how might it help your team?","type":"posts"},{"content":"Today at work, Friday 8th January, I gave a 5 minute lightning talk at work and I chose to talk about my list of top 10 best practices for developers, being 5 minutes I hadn\u0026rsquo;t much time but here is what I talked about with a little more meat on the bone in this blog post.\nKeep your kills up to date\nUse video websites like Pluralsight and the like to keep your skills relevant and up to date so you\u0026rsquo;re not left behind. Read books Have a blog Use twitter to keep up to date when possible, it\u0026rsquo;s a fast paced world and its difficult to keep up to date so try to make time Share your knowledge\nIf you hear about or read something of interest to colleagues pass it on Share the new technologies you\u0026rsquo;ve looked at or some code you came across which is well written. Give demo\u0026rsquo;s to your team mates and show them why this might be something worth learning etc. Have good personal discipline\nCheck your code in regularly Keep your check-ins small, don\u0026rsquo;t wait days before committing and don\u0026rsquo;t have one big check-in with hundreds of file changes if you can help it. Keep an eye on your build server, try not to have broken builds for days, when you check-in check your code builds on the build server, don\u0026rsquo;t be lazy. Tidy up as you go, don\u0026rsquo;t leave files, folders, backups etc. lying around. Take an interest\nTake part in code reviews, add your thoughts and comments. Take part in team meetings, add your voice, don\u0026rsquo;t be silent. Know your codebase, well as much of it as you can. Know how everything works from writing code, building it, running the tests on the build server and also how does it get deployed, don\u0026rsquo;t leave it for others to do. Test Everything\nWrite unit tests. Write Integration tests. Write front end tests. Write tests for your build scripts. Automate everything where possible\nAutomate Builds. Automate Tests. Automate Deployments. We are engineers so automate, less manual steps the better. Read other team members code. Read code from Github, BitBucket etc. Learn from other developers, there are plenty of great examples out there. Document your processes\nDocument your build process. Document your servers, accounts, permissions etc. Think of the next developer, maybe a new employee how would they benefit from your documentation. Limit technical debt - keep on top of your technical debt each sprint for example. Leave the code in a better place than when you found it\nClean up your codebase, remove dead code, remove unused namespaces etc. Remove or fix Skipped Tests. Tools like ReSharper can help you clean up code in seconds. Feedback\nFeedback good or bad is important, from colleagues, your boss, your end users/customers. Get Feedback on your software from people who use it day in day out. Get Feedback from your build server, how long are the builds taking, how long do tests take to run. Feedback is golden, and the beat way to improve. Give Back\nDo a lightning talk at work. Do a presentation or a demo at work. Giving back can be very rewarding. Encourage people, don\u0026rsquo;t criticise or condemn. It was fun doing it and I look forward to doing more talks soon.\n","date":"8 January 2016","externalUrl":null,"permalink":"/2016/01/08/lightning-talk-top-10-best-practices-for-developers/","section":"Posts","summary":"","title":"Lightning Talk - Top 10 Best Practices for Developers","type":"posts"},{"content":"In part 2, I covered how to compare the schemas of two databases, in part 3 I\u0026rsquo;ll to cover how to compare the data held within these two databases, for that I am going to use SQL Data Compare.\nAgain we will use the same two databases, imagine your comparing UAT to Production and wish to compare the data within these two databases:-\n(If the links are too small click on the image and then when the new window appears click on Original size at 1896 × 316)\nThe above image shows us that the t_depot database table has 4 rows which are in the Stock_DB_Deisgn table which aren\u0026rsquo;t within the STOCK_DB_DESIGN_ORIGINAL database. Again same as with SQL Compare, if we now click on Synchronization wizard we will see the following screen:-\nAnd again as with SQL Compare, we get 2 options:-\nCreate a deployment script - use this option if you want to script the changes and review before running in the changes. Synchronize Using SQL Data Compare - use this option if you want the tool to make the changes for you, you also get the option after its ran to automatically compare the 2 database data after the changes, to verify. And that is it, easy, simple and straightforward, no manual steps involving creating scripts, no real chance for it to go wrong, plus once again you can source control the script if you really wanted to or share it with colleagues.\nIn part 4 I\u0026rsquo;ll cover how to deploy changes to your database whether its schema changes, data changes or both.\n","date":"4 January 2016","externalUrl":null,"permalink":"/2016/01/04/continuous-deployments-for-sql-server-part-3/","section":"Posts","summary":"","title":"Continuous Deployments for SQL Server - Part 3","type":"posts"},{"content":"If you\u0026rsquo;re using SQL server at work and manually deploying changes to your database using manually crafted scripts then its time to stop, there is a better way to do this by automating it, remove the chance of human error, this will also ensure that before you deploy to production that your changes will work, guaranteed.\nIn this blog post, I\u0026rsquo;ll discuss comparing two SQL Server databases which you can use SQL compare to funnily enough compare them and see the differences between the two, very quickly and reliably, imagine you wanted to compare your local Development database with say your Staging database for example, or compare UAT to Production.\nIn this blog post I\u0026rsquo;ll go over the steps I went through and how to use Sql Compare to work out what\u0026rsquo;s changed between the two databases, schema wise, then in the second part I will show you how to use SQL Data Compare. to compare the data within both databases and in part 3 I will either create a script to update the database or run an exe which the tools will create for us to make both databases the exact same, both in schema and in data, so let\u0026rsquo;s get started.\nI\u0026rsquo;ve made dome schema changes to STOCK_DB_DESIGN and I wish to see whats changed, so lets see how to compare the 2 databases using SQL Compare (I\u0026rsquo;m using version 11). In the screen shot above I\u0026rsquo;ve chosen my databases to compare and the tool will now run and show me what the schema differences between the two. the screen shot below shows the results after the tool has been ran against both databases.\nOn the left pane we see the changed database, on the right the database without these changes, I clicked on the first row to show the changes in the t_depot table and in the split at the bottom it shows the differences per object - very quick and easy to see what\u0026rsquo;s changed.\nUpdate time In order to update the older database with the new changes, we simply click on Deployment Wizard at the top and we get the following screen with options:-\nHere we get 2 options:-\nCreate a deployment script - use this option if you want to script the changes and review before running in the changes. Deploy Using SQL Compare - use this option if you want the tool to make the changes for you, you also get the option after its ran to automatically compare the 2 database after the changes to verify. And that is it, easy, simple and straightforward, no manual steps involving creating scripts, no real chance for it to go wrong, plus you can source control the script if you really wanted to or share it with colleagues.\nIn part 3 I\u0026rsquo;ll cover comparing the 2 databases when it comes to data, for this we will use SQL Data Compare.\n","date":"4 January 2016","externalUrl":null,"permalink":"/2016/01/04/continuous-deployments-for-sql-server-part-2/","section":"Posts","summary":"","title":"Continuous Deployments for SQL Server - Part 2","type":"posts"},{"content":"Okay so your using a SQL Server database at work but you haven\u0026rsquo;t yet put the database into Source Control, here are some reasons as to why you want to do this:-\nSource control your database Trust me your going to want to do this if you haven\u0026rsquo;t already, it\u0026rsquo;s a good practice, it may save your skin some day, yes you can take backups which again is a good practice, here is an excellent article on why you want to do this:- Why put your database into source control?.\nOkay now that we wish to put our database into source control - we still use Subversion at work so I downloaded Subversion and installed it locally as well as TortoiseSVN. I have 2 databases called STOCK_DB_DESIGN and STOCK_DB_DESIGN_ORIGINAL within SQL Sever, the former had a few schema changes, imagine this is Development(STOCK_DB_DESIGN) and Staging(STOCK_DB_DESIGN_ORIGINAL).\nI created a local repository within Subversion and downloaded RedGate\u0026rsquo;s Database Lifecycle Management Products.\nThis tool comes with SQL Compare and SQL Data compare as well as a host of other awesome SQL Server tools which you can find out about at the above link.\nFor this post I\u0026rsquo;ll be using Redgate\u0026rsquo;s SQL Source Control which adds a tab to SQL Server Management Studio and looks something like this:-\nSo lets go ahead and add a database to our source control using this tool, Select the option above, and then Next\nI selected Subversion because at work we still use it, but you can use Git also and others, click Next\nI then give it a repository URL, I already created a repository within Subversion for my database and added the URL like above, click Next and that\u0026rsquo;s it, our database is now linked to source control. Now to get the database scripts into Subversion we need to right click on the Database in question within SQL Server Management studio like so and select Commit Changes to source control:-\nThis will then add all of the database objects to SQL Source Control, once that\u0026rsquo; completed, go into windows explorer and I use TortoiseSVN I can right click within my local SVN repository folder and then select Checkout or get latest version and this will result in the following folders being populated:-\nAnd when I go into say the tables folder I\u0026rsquo;ll see the following:-\nAnd that\u0026rsquo;s all there is to source controlling your SQL Server database. If I make change to an object say a table I\u0026rsquo;ll see whats changed locally in SQL Management Studio and I\u0026rsquo;ll know I still need to commit the change as seen below:-\nIn Part 2 I\u0026rsquo;ll show you how to compare schemas on both databases to work out what changes are required, and how to script them using the tool.\n","date":"4 January 2016","externalUrl":null,"permalink":"/2016/01/04/continuous-deployments-for-sql-server-part-1/","section":"Posts","summary":"","title":"Continuous Deployments for SQL Server - Part 1","type":"posts"},{"content":"Its 2016 and I like to make a list of things I wanna look into and put into place at work so here is a list of things I am aiming to do which also includes at my job in 2016:-\nA blog post each week, last year I only managed 11 blog posts and that\u0026rsquo;s poor, so more blog posts will come in 2016. Lightning Talks, we have started doing these at work and this year I plan to do a few of them if given the chance, I\u0026rsquo;m doing one on the 6th of January on as Developers Top 10 Best Practices which I will share about once I have done my talk. Test 3rd party end points, have a dashboard page which tells us what is up and what is down, going to try to use the Chrome add-on called Postman and use collections within Postman to do this. Database Deployments, currently we manually script everything and then get the dba to run the scripts in manually, we need to script the database and put it into Source control each release as a starting point, I\u0026rsquo;m looking forward to this as it well help aid with our deployments and speed them up. Hoping to get the RedGate Sql Toolbelt into the company so we can use this to help us achieve this. Red/Green deployments, we currently deploy at weekends and this can and should change so that we aren\u0026rsquo;t spending time at weekends doing releases which take quite a lot of time, we can automate them more and this year I plan to fix that. More Testing, we are closing in on unit testing our PowerShell scripts, this will be another nice addition to the number of different areas which we are currently testing which is great. Code Reviews, need to figure out a way that keeps everyone from being bored, brings benefit to the team and keeps us developers on our toes going forward. Continuous Improvement, test more, more in-depth code reviews, automate more, release finished work, tackle the back log each sprint. That\u0026rsquo;s it for now, I will add to this lost throughout the year as we go, i will keep an eye on this post and how we get on and blog about each one individually, hopefully I\u0026rsquo;ll get the chance to work on some if not all of these this year.\nFeel free to follow me on twitter at @gsuttie\n","date":"1 January 2016","externalUrl":null,"permalink":"/2016/01/01/my-todo-list-for-work-in-2016/","section":"Posts","summary":"","title":"My todo list for work in 2016","type":"posts"},{"content":"","date":"1 January 2016","externalUrl":null,"permalink":"/categories/testing/","section":"Categories","summary":"","title":"Testing","type":"categories"},{"content":"","date":"15 December 2015","externalUrl":null,"permalink":"/categories/interview-questions/","section":"Categories","summary":"","title":"Interview Questions","type":"categories"},{"content":"The last few weeks I\u0026rsquo;ve heard some interesting interview questions for candidates and without going into too much detail asking a developer questions like, where do you see yourself in 5 years? just doesn\u0026rsquo;t cut it for me, so here is a list of interview questions I would ask a developer looking to join a company I work at.\nDo you have a StackOverflow profile, a Github or Bitbucket repo where I can take a look at some of your contributions or work? Are you a member of any User Groups or do you attend conferences etc? How do you keep up to date with the latest technologies and keep your skills up to date? Do you know more than one programming language and if so which ones and what ones do you like and why? If you\u0026rsquo;re interviewing and get to the next stage you will be asked to write code on a laptop and write unit tests, are you comfortable doing that? What are your thoughts around TDD? Are you happy to look at some code and review it and give us your thoughts around it? Do you have any knowledge of PowerShell? Tell me your thoughts around code reviews, are they important, if so why? Tell me your thoughts around code coverage, what percentage is reasonable and is it worth while? What is your favourite technology and why? If a member of your team is lazy and not putting in enough effort what would you do about it? Have you ever worked for a difficult boss and if so how did you handle it? Are you ok with doing support on legacy applications and fixing production issue on the legacy code base? What are some best practices you follow, and why do you follow them? Ok short and sweet and off the top of my head - I\u0026rsquo;ll add to them over time.\n","date":"15 December 2015","externalUrl":null,"permalink":"/2015/12/15/interview-questions-for-developers/","section":"Posts","summary":"","title":"Interview Questions for Developers","type":"posts"},{"content":"","date":"15 December 2015","externalUrl":null,"permalink":"/tags/interviewquestions/","section":"Tags","summary":"","title":"InterviewQuestions","type":"tags"},{"content":"","date":"24 November 2015","externalUrl":null,"permalink":"/tags/bestpractices/","section":"Tags","summary":"","title":"BestPractices","type":"tags"},{"content":"Over the 19 years I\u0026rsquo;ve been a developer I can say I have seen some good, some bad and some ugly practices, but lets remain positive and here is my list of best practices/thoughts to which I hope have adopted to over the years:-\nMake sure you have the latest version of the code before you check in (if you\u0026rsquo;re using SVN). Small commits and commit often, after you\u0026rsquo;ve run your tests locally that is. Don\u0026rsquo;t be the developer who is always breaking the build, check that your code builds on the build server. Check your builds daily, make sure builds aren\u0026rsquo;t left broken for days. Automate builds/deployments where practical, manual deployments are a no-no. Measure code coverage as it can point to bad smells in your code base. Write Integration tests and Unit Tests which add value, not just to get code coverage up. Clean up after you, don\u0026rsquo;t leave stuff lying around. Make sure your log files are actually helpful, don\u0026rsquo;t fill them with useless info and make the log level easily configurable. If you create Helpdesk tickets then give some meaning to the piece of work, don\u0026rsquo;t be lazy. Don\u0026rsquo;t check in Third Party Nuget packages to source control - keep your repositories lean as possible. Begin Transaction put your update statement here Rollback Transaction, trust me this can save your ass. Leave the code in a better place than it was before you touched it, remove unused code, unused using statements, refactor duplicated code etc. Get the database Id in SQL using \u0026lsquo;select db_id()\u0026rsquo; and trace it so you know exactly what your stored procedure is doing At the daily stand up, have a note of what you were working on, \u0026ldquo;I don\u0026rsquo;t know what I did yesterday helps no one\u0026rdquo;. Try and figure out why its broken, don\u0026rsquo;t leave it for others to fix, you wont learn much doing that. Take an interest from development right through to deployment, the more you know the more you\u0026rsquo;ll understand and can perhaps help out. We are professionals, act like one and take pride in your work. I will add to this list over time, feel free to comment on any of this and tell me your thoughts.\nCatch me on twitter @gsuttie\n","date":"24 November 2015","externalUrl":null,"permalink":"/2015/11/24/my-list-of-best-practices/","section":"Posts","summary":"","title":"My list of best practices","type":"posts"},{"content":"","date":"22 November 2015","externalUrl":null,"permalink":"/tags/codecoverage/","section":"Tags","summary":"","title":"CodeCoverage","type":"tags"},{"content":"ReportGenerator\nOk so after part 1 now we have code coverage results it would be nice to see a report of this so we can display this on our build server after our tests have run.\nTo do this we can use ReportGenerator which is also on Github and an executable.\nThis can also run be run locally or on the build server which is nice as its a pretty useful feature to see your code coverage after a build on your build server.\nThe nice part being we can drill into namespaces and see what\u0026rsquo;s covered and what\u0026rsquo;s not.\nNow over time it would be great to see code coverage historical results and see the coverage going up, well ReportGenerator now does historical graphs which is just another type of chart which we can very easily have generated for us.\nWhen I add the flag -historydir:SOME_DIRECTORY I can have the report keep a chart of coverage of a history of time/builds so we can see our code coverage going in the right direction over time which is what we are after.\nIn the above screen shot as I write tests which cover my code and do builds I can see a graph over time of the coverage going up which is exactly what we are after, add more code that\u0026rsquo;s uncovered and the graph will trend downwards which isn\u0026rsquo;t what we are after.\nI hope this helps someone out there, feel free to get in touch with questions, best place to get me is on twitter @gsuttie\nFore more information about report generator check out the guy who wrote it https://github.com/danielpalme/ReportGenerator. Big thanks to Daniel Palme who you can reach out to on twitter @danielpalme.\n","date":"22 November 2015","externalUrl":null,"permalink":"/2015/11/22/continous-deployment-free-code-coverage-tools-part-2/","section":"Posts","summary":"","title":"Continous Deployment – Free Code Coverage tools Part 2","type":"posts"},{"content":"","date":"22 November 2015","externalUrl":null,"permalink":"/tags/opencover/","section":"Tags","summary":"","title":"OpenCover","type":"tags"},{"content":"","date":"22 November 2015","externalUrl":null,"permalink":"/tags/reportgenerator/","section":"Tags","summary":"","title":"ReportGenerator","type":"tags"},{"content":"**\n**\nIf you\u0026rsquo;re looking for some free code coverage tools then the good news is look no further than OpenCover.\nOpenCover can be run from the command line, which also means you can run it as part of your continuous deployment all for free, I like free.\nIf you\u0026rsquo;d like to get code coverage built into Visual Studio then look no further than the extension called OpenCover UI, this will give you code coverage results and show you which lines of code are covered by your tests, giving you no excuse to not test as much of your code where possible.\nI created a very simple Calculator class library project and then add a class library for testing my calculator class, I\u0026rsquo;ll spare you showing the simple code, but here is a screen shot of me having ran the tests using OpenCover within Visual Studio.\nThe Above screen shows the lines in the class which are covered by tests in green, red are lines uncovered by any tests, below that is a break down showing the percentages of code covered and on the right is the test explorer showing the list of tests available.\nIf you want to run OpenCover within Visual Studio then add it via Extensions and Updates in the Tools menu of Visual Studio.\nIf you want to run OpenCover from the console then you can run it via the command prompt, doing it this way has much more flexibility as you can filter out test projects and generated code etc using the arguments you pass into the OpenCover executable.\nNow once we have the code coverage within Visual Studio we can also get code coverage on our build server which is really what were after, due to OpenCover being an executable this is very easy to set up, you can find all the info you need to do this at the OpenCover Usage link.\nIn the second part of this blog post I\u0026rsquo;ll show how to generate a web page to show off these results which can be easily incorporated into your build server after each build, this will also show history of code coverage over time in case you want that feature too.\n","date":"10 November 2015","externalUrl":null,"permalink":"/2015/11/10/continous-deployment-free-code-coverage-tools-part-1/","section":"Posts","summary":"","title":"Continous Deployment - Free Code Coverage tools Part 1","type":"posts"},{"content":" Having looked at different code bases this past 3 weeks, one thing springs to mind, if you use StyleCop use it in a way where all projects are consistent, no point having only a few rules if the code base can compile but look entirely different project to project, be much nicer for a new start to open up 3 or 4 solutions and they all look fairly similar in layout, same naming conventions etc.\nWhat I am getting it really is if you have coding standards how do you enforce them?, oh such a strong words brings terror to co-workers opinions on writing code, but with a little bit of discipline you may be surprised when you look at someone else\u0026rsquo;s project and the code looks very similar to yours as they are sharing the teams ReSharper and StyleCop settings.\nHere is a list of a few things which I think can improve code quality\nRemove all use of regions If you have coding guidelines - use tools to enforce them otherwise what\u0026rsquo;s the point Put Using statements in alphabetical order at the top of the file Naming conventions for your code/test projects - check these in code reviews. So does your company have coding standards?, and if so how do you go about implementing them?, are they enforced? if not why not? - no need to piss developers off, in time they should see the light and you can shape your StyleCop rules etc. to fit.\nI still bet out in the wild many teams have a coding standards guide yet they don\u0026rsquo;t enforce it other than the odd glance if your lucky.\n","date":"28 August 2015","externalUrl":null,"permalink":"/2015/08/28/coding-guidleines-how-do-you-do-yours/","section":"Posts","summary":"","title":"Coding Guidleines - how do you do yours?","type":"posts"},{"content":"","date":"28 April 2015","externalUrl":null,"permalink":"/tags/octopus-deploy/","section":"Tags","summary":"","title":"OctoPus Deploy","type":"tags"},{"content":" First of all I\u0026rsquo;ve been using Octopus Deploy for a couple of months maybe less, and to be honest its freaking awesome, its easy to set up, easy to use, has an awesome API and is just a really well thought out piece of software.\nHaving used it I have one or two minor little things I\u0026rsquo;d love to see in the next version, I could go off and find out if there in the uservoice system for Octopus but I like giving credit where credits due so mentioning Octopus Deploy in another blog post is never a problem, anyone I talk to who I don\u0026rsquo;t work with currently, I always try to get them to go off and take a look at Octopus Deploy.\nMoving on here is my wish list for the next version of Octopus, some of them may already be done, may not be an issue, might even just be pilot error from myself but any hoo here goes, off the top of my head.\nAbility to make a step disabled I know a workaround is to create a dummy environment and set the task to this which will be ignored but disabling steps would be great. Export settings option to be able to export all of the variables. Variables, be able to go back and time and see the variables held against a specific release at on the date and time it was released at. Email Template that you can use to send out which allow variables, this can be used across all projects. Automated releases for doing out of hours releases, this options hard to find. Automated releases which have the option to ignore manual step, so we can release to production out of hours without having to still accept the manual step we normally have for production. Backups, when you take a backup have the ability to restore it and not lose all of the packages you had originally - this isn\u0026rsquo;t huge but a bit of a shock when I restored and we had no packages.\nI will add more if I come across any but to be very fair this is all pretty much nice to have options.\nBy the way did you check our the api for Octopus Deploy in case I haven\u0026rsquo;t mentioned it before - real nice work!\n","date":"28 April 2015","externalUrl":null,"permalink":"/2015/04/28/octopus-deploy-my-wishlist/","section":"Posts","summary":"","title":"Octopus Deploy - my wishlist","type":"posts"},{"content":"","date":"27 April 2015","externalUrl":null,"permalink":"/tags/squirrel/","section":"Tags","summary":"","title":"Squirrel","type":"tags"},{"content":"Last week I was taking a look at Squirrel which states Squirrel: It\u0026rsquo;s like ClickOnce but Works™\nThe goal of me looking at Squirrel was to find a decent replacement to ClickOnce, I read a tweet from @paulcbetts mentioning his work and how he had created Squirrel as a replacement to using ClickOnce.\nHaving spent some time implementing this and coming across one or two issues which I overcame, the good news is ClickOnce is hopefully no longer needed.\nSquirrel works and does exactly what we require, our windows forms application\u0026rsquo;s can have a \u0026lsquo;check for updates\u0026rsquo; option, which updates to the latest release, close the old application down after its updated, re-open from the original desktop or start menu shortcut and your done.\nSteps to get Squirrel working\nSourcecode is on GitHub. Create a simple Windows Forms Application Add the nuget package called squirrel.windows like so:- Add the following to the program.cs like so (line 19 is the only one I added) :- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;\nusing Squirrel;\nnamespace WindowsFormsApplication1 { static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { SquirrelAwareApp.HandleEvents(onAppUpdate: Form1.OnAppUpdate, onAppUninstall: Form1.OnAppUninstall, onInitialInstall: Form1.OnInitialInstall);\nApplication.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } [/sourcecode]\nAdd some content like a simple button or a menu with the choice to check for updates\nin the code behind we implement squirrel like so:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;\nusing System.Configuration; using Squirrel; using System.Reflection; using System.IO;\nnamespace WindowsFormsApplication1 { public partial class Form1 : Form { private const ShortcutLocation DefaultLocations = ShortcutLocation.StartMenu | ShortcutLocation.Desktop;\npublic Form1() { InitializeComponent(); } private void checkForUpdatesToolStripMenuItem_Click(object sender, EventArgs e) { // Check for Squirrel Updates var t = UpdateApp(); } public async Task UpdateApp() { var updatePath = ConfigurationManager.AppSettings[\u0026quot;UpdatePathFolder\u0026quot;]; var packageId = ConfigurationManager.AppSettings[\u0026quot;PackageID\u0026quot;]; using (var mgr = new UpdateManager(updatePath, packageId, FrameworkVersion.Net45)) { var updates = await mgr.CheckForUpdate(); if (updates.ReleasesToApply.Any()) { var lastVersion = updates.ReleasesToApply.OrderBy(x =\u0026gt; x.Version).Last(); await mgr.DownloadReleases(new[] { lastVersion }); await mgr.ApplyReleases(updates); await mgr.UpdateApp(); MessageBox.Show(\u0026quot;The application has been updated - please close and restart.\u0026quot;); } else { MessageBox.Show(\u0026quot;No Updates are available at this time.\u0026quot;); } } } public static void OnAppUpdate(Version version) { // Could use this to do stuff here too. } public static void OnInitialInstall(Version version) { var exePath = Assembly.GetEntryAssembly().Location; string appName = Path.GetFileName(exePath); var updatePath = ConfigurationManager.AppSettings[\u0026quot;UpdatePathFolder\u0026quot;]; var packageId = ConfigurationManager.AppSettings[\u0026quot;PackageID\u0026quot;]; using (var mgr = new UpdateManager(updatePath, packageId, FrameworkVersion.Net45)) { // Create Desktop and Start Menu shortcuts mgr.CreateShortcutsForExecutable(appName, DefaultLocations, false); } } public static void OnAppUninstall(Version version) { var exePath = Assembly.GetEntryAssembly().Location; string appName = Path.GetFileName(exePath); var updatePath = ConfigurationManager.AppSettings[\u0026quot;UpdatePathFolder\u0026quot;]; var packageId = ConfigurationManager.AppSettings[\u0026quot;PackageID\u0026quot;]; using (var mgr = new UpdateManager(updatePath, packageId, FrameworkVersion.Net45)) { // Remove Desktop and Start Menu shortcuts mgr.RemoveShortcutsForExecutable(appName, DefaultLocations); } } } } [/sourcecode]\nWe now need to create a .nuspec file which we will use to package up our application, Squirrel needs to have every file within the lib\\net45 folder. To create a .nuspec file I simply copied nuget.exe into the solution and then went to a command prompt and typed:- nuget spec, this creates a .nuspec file which we can then hand edit inside Visual Studio and looks like this:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\nWindowsFormsAppliation1 1.0.0.0 Gregor Suttie WindowsFormsAppliation1 Squirrel Tester Testing out Squirrel false None Copyright 2015 [/sourcecode]\nNext we need to pack the .nuspec file to generate the nuget package, so run the following:- Nuget pack WindowsFormsApplication1.nuspec From the package manager console inside Visual Studio we now need to run the following command:- squirrel \u0026ndash;releasify C:\\Squirrel\\WindowsFormsApplication1\\WindowsFormsApplication1\\WindowsFormsApplication1.1.0.0.0.nupkg\nIn the folder above we should now have a folder called Releases, containing a setup.exe which we use to install the application.\nRun setup.exe and your app will install with shortcuts on the desktop and the start menu if you use the code above which has defined these as shortcut options. If you then run check for updates, the code will go off and check the folder you specify in the app.config like so:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n[/sourcecode]\nIn order to update our app we also need the following appsetting which is the id of the Nuget package we created earlier, be careful not to have the id with a space or a dot (.) within the Nuget package Id.:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] [/sourcecode]\nAlso add this one line to the assmblyinfo.cs:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] [assembly: AssemblyMetadata(\u0026ldquo;SquirrelAwareVersion\u0026rdquo;, \u0026ldquo;1\u0026rdquo;)] [/sourcecode] Once you install the application, go back and make a change to the code, save it, update the .nuspec file version number from 1.0.0 to 1.0.1 and then redo steps 7 and 8 (with the path to the new WindowsFormsApplication1.1.0.0.1.nupkg file) Almost done, copy the content of the releases folder to our location where we store the updates (our app.config setting for UpdatePathFolder which was set to c:\\updatesForMyApp) Run the app and choose the menu option \u0026lsquo;Check for Updates\u0026rsquo; and you\u0026rsquo;ll get the latest version. Also note of you add a Debugger.Launch() statement in the code you can debug the code and step through line by line. To find out more about further options available and much more about Squirrel click here.\n","date":"27 April 2015","externalUrl":null,"permalink":"/2015/04/27/squirrel-replace-clickonce-the-easy-way/","section":"Posts","summary":"","title":"Squirrel - replace ClickOnce the easy way","type":"posts"},{"content":"","date":"1 March 2015","externalUrl":null,"permalink":"/tags/octopus-deloy/","section":"Tags","summary":"","title":"Octopus Deloy","type":"tags"},{"content":" So its been a one week of using Octopus Deploy for me and its fair to say I am impressed.\nAPI Octopus deploy was written API-first with the UI built on top, this mean that anything you need to do or access can be done either from the command line or from the available Nuget package, documentation for the API is also great and is up on github here.\nDocumentation The documentation is very thorough, don\u0026rsquo;t think I have managed to come across anything which hasn\u0026rsquo;t either been covered or discussed via the support forums which have plenty of detail.\nBlue/Green Deployment One necessity at work for us is repeatable automated deployments, we currently have this already as I\u0026rsquo;ve mentioned before with MSBuild scripts and use of TeamCity for the builds. The idea of Blue/Green deployments is something we need for our external facing website at work and is a major plus point with Octopus Deploy, we can build our release version of the website and publish this internally for testing purposes and then switch this to production in an instant, this way we know our production environment includes the latest fixes/changes and has been tested by our QA department.\nThe documentation for OD covers Blue-green deployments and this along with Scheduled Deployments make the case for using Octopus Deploy a strong one.\nWhy you should look at Octopus Deploy I have spent a week trying out different kinds of project deployment, as per previous post as well as testing out deploying an internal .Net website, its been pretty much very straight-forward, it handles web.config transforms, app.config transforms and even substituting variables held within OD for settings in both app.configs and web.configs (connection strings, NLog settings etc.).\nScheduled deployments, Blue/Green deployments are a big selling point to us, on top of that a well written API with good documentation (which uses confluence which is also nice) makes it an easy sell - I am fairly sure we will be changing our deployment strategy to use this going forward and I am happy about that.\nOne last very nice thing is the sharing of PowerShell scripts which means you can make use of existing scripts, write new ones and share them with the community up on github and help make OD even better - version 3.0 also looks like it will bring even more good stuff to the mix when that is released in the coming months.\nI hope to look at deploying database\u0026rsquo;s using Octopus Deploy at some point fairly soon.\nSo take a look at Octopus Deploy and I\u0026rsquo;m sure you wont be disappointed! - that\u0026rsquo;s all for now.\n","date":"1 March 2015","externalUrl":null,"permalink":"/2015/03/01/one-week-using-octopus-deploy/","section":"Posts","summary":"","title":"One week using Octopus Deploy","type":"posts"},{"content":" The last couple of days I have been taking Octopus Deploy for a spin, we have been working on a new project and I have been tasked with using Octopus Deploy to see how easy it would be to deploy our application to our Development, Staging and Production environments.\nThe application itself isn\u0026rsquo;t really import but its a TopShelf Web Service running on Katana which includes the use of certificates, url acl\u0026rsquo;s, MSMQ and some RavenDB for good measure.\nCurrent Setup Our current deployment setup makes use of Teamcity and MSBuild to deploy our applications, making use of a set of standard .proj files we use to deploy all types of applications, we have it down to 1 click deployments, which covers:-\nCheckout from Source Control Inspections Compile/Build Unit Tests / Integration Tests Deploy Change to our process With Octopus Deploy (calling it OD from here on in) I changed this slightly removing the Deploy step above from our MSBuild script and looked into how to deploy the code using OD.\nOD takes your code and bundles into a nuget Package using a tool called OcotPack, an add-on for Visual Studio as well as an executable which looks at your code and figures out what\u0026rsquo;s needed to package your code into a Nuget package. Once you have your Nuget package you put that into your Nuget feed, either your own or using OD\u0026rsquo;s in built Nuget feed (very handy and much quicker to use) and then you create a Release based on the nuget package, steps outlined below for clarification:-\nRun OctoPack on project you wish to Deploy, this creates you a Nuget package Copy your nuget package to Nuget Feed (even has an option to do that for you) Create a Release pointing to your package Deploy to chosen environment Job done I will be covering more on Octopus Deploy but so far I have managed to deploy the application in question to Development and Staging, register URLACL\u0026rsquo;s, register the Certificate, create our private message queues, and install and start the Katana based Top Shelf Service in 2 days worth of work from having really no idea about how Octopus Deploy works, fair to say I like what I see and so far so good! - Oh and the documentation and sample videos are excellent - more coming soon on my use of OD, if your deployments aren\u0026rsquo;t using Octopus Deploy I recommend you take some time and take a look, its been well thought out with a REST API and the UI built on top of that, it allows you to run custom PowerShell scripts which I really like and in general looks like a good addition to our tools belt.\n","date":"24 February 2015","externalUrl":null,"permalink":"/2015/02/24/giving-octopus-deploy-a-test-drive/","section":"Posts","summary":"","title":"Giving Octopus Deploy a Test Drive","type":"posts"},{"content":" If your using nuget and have a solution level nuget package you wish to add to a project, install-package will install your package as suggested, however update-package wont work as it wont find the nuget package your trying to update, this is only the case if the solution level package contains any dependencies, remove your dependencies and update-package does work.\nThis appears to be a bug, the obvious way to get around it is to use uninstall-package then install-package but its a bug none the less, I spent some time trying to get around this.\nI was hoping this would have been fixed in nuget version 2.8 but it hasn\u0026rsquo;t been as yet.\n","date":"12 January 2015","externalUrl":null,"permalink":"/2015/01/12/nuget-bug-i-ran-into-with-solution-level-packages-and-dependencies/","section":"Posts","summary":"","title":"Nuget bug I ran into with solution level packages and dependencies","type":"posts"},{"content":" Cannot add part to the package. Part names cannot be derived from another part name by appending segments to it\nLast week I ran into an issue where I was using nuget to package a .csproj file. What I was after was the contents of the nuget package to contain a Content folder and inside this Content folder have one file called app.config.transform, that\u0026rsquo;s it.\nIf my .csproj file contained the following:-\n[sourcecode language=\u0026ldquo;xml\u0026rdquo;]\n..\\.shared\\SlowCheetah.Transforms.targets [/sourcecode]\nThen the package contents had a single file called content - which is incorrect.\nThe way I fixed this was inside the .csproj file I changed the type of the app.config.transform from Content to None. I then changed my .nuspec file to have the following:-\n[sourcecode language=\u0026ldquo;xml\u0026rdquo;]\n[/sourcecode]\nThis fixed my issue with the contents of my nuget package, just incase anyone runs into the same issue.\n","date":"10 January 2015","externalUrl":null,"permalink":"/2015/01/10/issue-i-ran-into-when-using-nugetslowcheetah/","section":"Posts","summary":"","title":"Issue I ran into when using Nuget/SlowCheetah","type":"posts"},{"content":"","date":"10 January 2015","externalUrl":null,"permalink":"/tags/nuget/","section":"Tags","summary":"","title":"Nuget","type":"tags"},{"content":"","date":"10 January 2015","externalUrl":null,"permalink":"/categories/slowcheetah/","section":"Categories","summary":"","title":"SlowCheetah","type":"categories"},{"content":"","date":"10 January 2015","externalUrl":null,"permalink":"/tags/slowcheetah/","section":"Tags","summary":"","title":"SlowCheetah","type":"tags"},{"content":" I\u0026rsquo;ve recently been working on a number of projects/solutions which contain nuget packages, one of the requirements I had been given was to add a nuget package which I had created at a solution level instead of it being at project level.\nThis means just that, the package is for the project solution and not for a particular project within the solution. If you\u0026rsquo;re still not sure what I mean let me explain with an example to better illustrate.\nIf you create an empty console application and add the nuget package called xunit runners:-\nThis will add the package at the solution level rather than to the consoleapplication1 project as shown below:-\nContrast this will a package level nuget package such as NUnit which is a project level nuget package:-\nIf you need to create a solution level nuget package then here is what I have found so far:-\nDon\u0026rsquo;t reference a version of the framework within your Nuspec file Don\u0026rsquo;t reference any dll\u0026rsquo;s If you do either then you\u0026rsquo;ll end up with a project level nuget package.\nThere is more information on this here.\n","date":"26 December 2014","externalUrl":null,"permalink":"/2014/12/26/nuget-packages-solution-level-versus-project-level/","section":"Posts","summary":"","title":"Nuget Packages - solution level versus project level","type":"posts"},{"content":" The PowerShell Community Extensions are a set of additional cmdlets, providers, functions and scripts which the community asked for and have been written for us to use and take advantage of.\nOnce you download PSCX you\u0026rsquo;ll want to add this module to something called your PowerShell Module path, this is the place you\u0026rsquo;d normally put your PowerShell Modules so that you can import them for using in your scripts. To check what your PowerShell Module path is from within PowerShell type:-\n$env:PSModulePath\nAdd PSCX to your $env:PSModulePath so you can import it and use it anytime you start using PowerShell, to add PSCX type the following:-\n$env:PSModulePath = $env:PSModulePath + \u0026ldquo;;C:\\Program Files (x86)\\PowerShell Community Extensions\\Pscx3;\u0026rdquo;\nthe last part should be where you chose to install PSCX.\nOk so no we have this added to our PowerShell Module path lets see if we can start using it.\nTo check what PowerShell modules are already imported type:-\nGet-Module\nThe screen shot below shows me which modules have been imported:-\nTo add PSCX you need to import the module, so lets do that by typing:-\nImport-Module PSCX\nAnd that\u0026rsquo;s it we can call any of the PSCX cmdlets from our scripts, the list of which are extensive and include:-\nWrite-Zip Format-XML Get-XML UnBlock-File\nand many more\nHopefully this is enough to whet your appetite.\n","date":"30 April 2014","externalUrl":null,"permalink":"/2014/04/30/learning-powershell-using-powershell-community-extensions/","section":"Posts","summary":"","title":"Learning PowerShell - Using PowerShell Community Extensions","type":"posts"},{"content":"","date":"30 April 2014","externalUrl":null,"permalink":"/tags/powershell/","section":"Tags","summary":"","title":"PowerShell","type":"tags"},{"content":"Piping in PowerShell is awesomesauce and best explained by some examples, but firstly a quick explanation of piping, lets say we want to get a list of files from the c:\\windows folder on your machine, order them by the last modified date and select the first 50 files and output the list to a text file in the current folder, simple requirements and here it is:-\nSet-Location c:\\windows Get-ChildItem | Sort-Object LastWriteTime -Descending | Select-Object -First 50| Out-File files.txt\nSet-Location is the cmdlet which is roughly the equivalent to the cd command found in a command prompt. Get-ChiLdItem is the cmdlet which is roughly the equivalent to the dir command found in a command prompt, but you can use it with objects, lists and so on. Sort-Object is the cmdlet to sort obviously and can be used against your objects, lists and much more. Select-Object tis the cmdlet to select a number of objects (files, records, results), you can use this with -first, -last, -skip and much more Out-File will is the cmdlet to simply write output to a file. Obviously a very simple example but you take A pass the results to B, B then does work on it, passes it to C and you got the idea. This is a how piping works and can yield the data your looking for quickly and in very little code indeed.\nPowerShell Blog Posts\n","date":"27 April 2014","externalUrl":null,"permalink":"/2014/04/27/learn-powershell-piping/","section":"Posts","summary":"","title":"Learn PowerShell - Piping","type":"posts"},{"content":" Check what the script execution policy is currently set to on your system:-\nGet-ExecutionPolicy\nThe options are AllSigned, ByPass, Default, Remote Signed, Restricted or undefined\nYou can read about each of these by typing in the following command:-\nGet-Help Set-ExecutionPolicy -online\nThis will load the online help for this command, if your ever needing help with PowerShell then you can search for help like so, Get-Help services, this will show you what commandLet\u0026rsquo;s are available for working with Services, i.e. starting them stopping them and so on.\nI set the execution policy to RemoteSigned so that I can run my own PowerShell scripts but ones I download from the internet wont run unless I change the setting, so that my system is secure from any unwanted side effects from other peoples scripts.\nPowerShell Blog Posts\n","date":"24 April 2014","externalUrl":null,"permalink":"/2014/04/24/learn-powershell-executionpolicy/","section":"Posts","summary":"","title":"Learn Powershell - ExecutionPolicy","type":"posts"},{"content":" As part of my blog post series on learning PowerShell I thought it might be a good time to list the tools I have came across and give them a shout out as I reckon the list of tools have been very helpful in learning some good practices when writing PowerShell scripts.\nLets get to the list:-\nPowerShell ISE Steroids - this is a great add-on for PowerShell ISE, its not free but you get 10 days to check it out and I recommend you do. PowerShell Script Browser Script Browser for Windows PowerShell ISE enables you to search for script samples in the TechNet Script Center, invaluable tool in my opinion for looking at example scripts Power GUI PowerShell Editor with a few nice extras I will add more as I come across them ;)\n","date":"22 April 2014","externalUrl":null,"permalink":"/2014/04/22/powershell-useful-tools/","section":"Posts","summary":"","title":"PowerShell useful Tools","type":"posts"},{"content":" To Start PowerShell, click Start, and type in PowerShell, choose Windows PowerShell ISE and run this as an Administrator (right click).\n**Tip:- **To check which version of PowerShell you have type $PSVersionTable, this will show a table of results and your looking for the top one which is the PSVersion, if this is 2.0 then you really should update before we go any further. At work I have been using PowerShell 3.0 and now 4.0 is out.\nTo update to version 3.0 the download link is PowerShell 3 To update to version 4.0 the download link is PowerShell 4\n**Tip:- **PowerShell has in-built help which is really great, make sure its up to date by typing in Update-Help\nPowerShell Blog Posts\n","date":"22 April 2014","externalUrl":null,"permalink":"/2014/04/22/learn-powershell-getting-started/","section":"Posts","summary":"","title":"Learn PowerShell - Getting Started","type":"posts"},{"content":" Over the last couple of months I have been working with PowerShell on a daily basis, I had initially looked at PowerShell at home a little bit and thought yeah its fairly cool and left it at that, if you haven\u0026rsquo;t looked at PowerShell and want to learn some quick tips for getting started then stick around.\nAt work I was tasked with doing a small project using PowerShell and I can now report that I think PowerShell is pretty awesome, I have even found myself thinking you could do that using PowerShell.\nThe learning curve for PowerShell is not that high and if you put a little bit of effort into learning the basics it starts to become pretty easy to do most things.\nThis will be the first post covering a number of topics within PowerShell and I will cover what I have been learning as we go.\nLearn PowerShell - Getting Started Learn PowerShell - PowerShell Useful Tools Learn PowerShell - PowerShell ExecutionPolicy Learn PowerShell - PowerShell Piping ","date":"22 April 2014","externalUrl":null,"permalink":"/2014/04/22/adventures-into-powershell/","section":"Posts","summary":"","title":"Adventures into Powershell","type":"posts"},{"content":" **Day 3 - Knocking it out the park, with KnockoutJS by Miguel A. Castro **(@miguelcastro67) The first talk I attended on day 3 was Knocking it out the park, with KnockoutJS by Miguel A. Castro\nMiguel\u0026rsquo;s talk walked you through KnockoutJS, what you would use it for and showed you several demos as he went building upon each one as he covered more and more on KnockoutJS. Miguel is a very good speaker, his talk was very well delivered and flowed excellently - his demos were useful and were very well explained.\nDay 3 - ASP.NET SignalR 2.0 and beyond by Damien Edwards and David Fowler(@DamianEdwards) The second talk on day 3 I attended was ASP.NET SignalR 2.0 and beyond by Damien Edwards and David Fowler\nDamien Edwards and David Fowler introduced everyone to a new major version of SignalR and what has been added/updated. There is tighter integration with OWIN, .NET 4.5 server dependency, full support for self-hosting, new clients, massively improved cross-domain/CORS support, API usability improvements, easier hub unit testing and better error handling. We\u0026rsquo;ll cover all this and give a sneak peak and new features in upcoming releases in this information packed session. Very informative talk which I enjoyed.\n**Day 3 - The future of C# by Mads Torgersen **(blogs.msdn.com/b/madst/) The third talk I attended on Day 3 was The future of C# by Mads Torgersen\nMads talked about how the past several years, the Microsoft C# team has been focused on rebuilding the compilers and editing experiences as part of Project Roslyn. He also introduced us to potential new language features are on the designers’ minds. Features discussed included read only auto properties, multiple return values, null checking, structural typing is \u0026lsquo;on the radar\u0026rsquo;.\n**Day 3 - Object Oriented Design in the Wild by Jessica Kerr **(@jessitron) The fourth talk I attended on Day 3 was Object Oriented Design in the Wild by Jessica Kerr\nJessica talked about the reasoning behind object-oriented design principles, and how we find their application in the wider world. This session will challenge you to go beyond rules and standards and ask, when is clean code worth your time? Go beyond OO and come back with new insight. Interesting talk all about OO in different languages.\nDay 3 - ASP.NET SignalR 2.0 and beyond by Damien Edwards and David Fowler(@davidfowl) The fifth talk on day 3 I attended was Using ASP.NET SignalR in Anger by Damien Edwards and David Fowler\nDamien Edwards and David Fowler What showed off the best patterns for using SignalR in a real application - both guys walked through code samples of how to go about doing such a thing and discussed a number of topics including when best to use SignalR as opposed to other technologies.\n","date":"15 December 2013","externalUrl":null,"permalink":"/2013/12/15/ndc-london-day-three/","section":"Posts","summary":"","title":"NDC London - Day Three","type":"posts"},{"content":"","date":"15 December 2013","externalUrl":null,"permalink":"/tags/ndclondon/","section":"Tags","summary":"","title":"NDCLondon","type":"tags"},{"content":" **Day 2 - Build Real World Cloud Apps using Windows Azure Part I and II by Scott Guthrie **(@scottgu) The first and second talks I attended on day 2 were Build Real World Cloud Apps using Windows Azure Part I and II by Scott Guthrie\nScott gave a two part covering the following:-\n•Automating Everything •Source Control Best Practices •Continuous Integration/Delivery •Enterprise Identity and SSO Integration •Web Development Best Practices •Data Storage Options •Data Storage Partitioning Approaches •Using unstructured Blob storage •Designing to survive failures •Monitoring and Diagnostics •Transient Fault Handling •Distributed Caching •Using the Queue Centric Work Pattern\nWas a really great insight into the capabilities of Azure and how as developers we can use these features for building applications right now.\n**Day 2 - Automating Testing in the big, bad Enterprise World by Jeremy D. Miller **(@jeremydmiller) The third talk on day 2 I attended was Automating Testing in the big, bad Enterprise World by Jeremy D. Miller\nJeremy discussed how his team has a strategy for faster and more productive manual testing and troubleshooting when using RavenDB and just how easy it is to use RavenDB for in memory creation and deletion of the entire database for unit testing purposes. He talked about how automated testing efforts frequently fail because the tests are too time-consuming to author, too brittle when the underlying application changes and showed examples of how he tried to make this process easier.\n**Day 2 - Functional Programming: What? Why? When? by Robert C. Martin (Uncle Bob) **(@unclebobmartin) The fourth talk I attended on Day 2 was Functional Programming: What? Why? When? by Robert C. Martin (Uncle Bob)\nUncle Bob talked about a number of things from the past to the future and was as always very entertaining but also thought provoking - this guys a legend and listening to him talking was a pleasure.\n**Day 2 - AngularJS Directives And The Computer Science Of JavaScript by Burke Holland **(@burkeholland) The fifth talk I attended on Day 2 was AngularJS Directives And The Computer Science Of JavaScript by Burke Holland\nBurke gave us a run through of Directives in AngularJS, what they are and how they work showing code samples.\n**Day 2 - Test Your Javascript\u0026hellip;with the Help of D\u0026amp;D by Tim G. Thomas **(@timgthomas) The fifth talk I attended on Day 2 was Test Your Javascript\u0026hellip;with the Help of D\u0026amp;D by Tim G. Thomas\nTim talked about how testing JavaScript—the modern Web\u0026rsquo;s ubiquitous development language—can be a daunting task. In his session he introduced us to some methods to do just that\u0026hellip;but with a Dungeons and Dragons twist.\n","date":"15 December 2013","externalUrl":null,"permalink":"/2013/12/15/ndc-london-2013-day-two/","section":"Posts","summary":"","title":"NDC London 2013 - Day Two","type":"posts"},{"content":" KeyNote with Dan North - JackStones: the Journey to Mastery (@tastapod)\nDan\u0026rsquo;s talk was about how you go about becoming a Master at something and was very insightful, Dan talked about a lot of cool stuff and talked about learning how you learn to become at whatever it is your trying to master.\nDan described some of the many facets of craftsmanship and talks about trying to figure out exactly what the craft is that we programmers do.\n**Day 1 - Cleaning up Code Smell by Venkat Subramaniam **(@venkat_s) The first talk I attended was Cleaning Up Code Smell by Venkat Subramaniam - his talk was covering ways to identify code smell, how to clean them up. We will also discuss proactive ways to avoid smells in the first place.\nVenkat is a superb speaker and covered a lot within 1 hour, his talk was well delivered and he cracked a few good jokes along the way, very entertaining talk.\n**Day 1 - Simple.Web 101 by Mark Rendle **(@markrendle) The second talk I attended was Simple.Web 101 by Mark Rendle - his talk was covering his .NET/Mono web framework Simple.Web.\nSimple.Web applies the SOLID design principles to web application development, and makes building web applications an experience of the deepest joy. Simple.Web makes keeping your code clean, and building real REST/HATEOAS APIs.\nMark talked about why he wrote Simple.Web, showed us some of the code and then showed off some examples of how to use Simple.Web in an application\n**Day 1 - Introduction to Windows Azure Part I and II by Scott Guthrie **(@scottgu) The third and fourth talks I attended was Introduction to Windows Azure Part I by Scott Guthrie\nScott gave a two part talk which provided an overview of Windows Azure – including a number of demos, and how you can take advantage of it to build great applications in the cloud. His talk was a superb introduction to what Azure is and how you can leverage Windows Azure to build great applications. As always his talks were very informative, every question was given a detailed answer and was a really great way to learn about what Azure can do.\n**Day 1 - Windows Azure Essentials by Michele Leroux Bustamante **(@michelebusta) The fifth talk I attended was Windows Azure Essentials by Michele Leroux Bustamante\nMichele\u0026rsquo;s session was aimed at getting you up to speed on the essential features developers should be aware of, and how to apply them in practical scenarios on all aspects of Windows Azure.\nMichele showed off the differences between web sites and cloud services, as well as other practical tips for building Azure apps such as storing content, sending email, working with queues and choosing the right technology, and collecting important metrics for visibility into application health.\n**Day 1 - Why Agile doesn\u0026rsquo;t scale - and what you can do about it by Dan North **(@tastapod) The sixth and final talk I attended was Why Agile doesn\u0026rsquo;t scale - and what you can do about it by Dan North\nDan talked about shared guiding principles, a clear vision and a common understanding enable what he called contextual consistency. He also talked about delivery assurance, governance and portfolio management in the enterprise.\nWas a very interesting talk and a nice end to the day.\n","date":"15 December 2013","externalUrl":null,"permalink":"/2013/12/15/ndc-london-2013-day-1/","section":"Posts","summary":"","title":"NDC London 2013 - Day 1","type":"posts"},{"content":" NDC London was last week and I have to say I enjoyed every second of it.\nThis was my first conference and I will hopefully be back, the content each day was fantastic, the choice of content varied enormously and the people who run it, sponsor it and attend it deserve huge credit.\nHaving the chance to talk to developers from all over the world working on all sorts of projects and that was probably my favourite part of the conference, hugely grateful to my company for giving me this opportunity.\nI will cover the 3 days I attended in a separate blog post but for now I just wanted to take the time to thank everyone involved, I managed to chat with of attendees and met some folks I chat to on twitter which was pretty cool.\nBig thanks to the guys at Redgate who I managed to chat to and get a demo of some of their tools which I haven\u0026rsquo;t had the chance to try out as yet, was really nice to put a face to some of them.\nI now have my blogging mojo back and have lots of content to go off and learn about - the next blog post coming soon will cover each of the 3 days I spent learning new technologies.\nThanks once more to all involved - hopefully see you again.\n","date":"8 December 2013","externalUrl":null,"permalink":"/2013/12/08/ndc-london-2013-big-thank-you-to-all/","section":"Posts","summary":"","title":"NDC London 2013 - big thank you to all","type":"posts"},{"content":"","date":"29 July 2013","externalUrl":null,"permalink":"/categories/visual-studio/","section":"Categories","summary":"","title":"Visual Studio","type":"categories"},{"content":"The last couple of days I\u0026rsquo;ve been trying to figure out why a console application we use at work was throwing an error whilst trying to connect to oracle, we had some issues with Devart\u0026rsquo;s DotConnect for Oracle throwing the following error - \u0026lsquo;Error loading db connection\u0026rsquo;\nHaving tried a number of options it was suggested to me that I should try remote debugging, something that I had never actually done before, odd I know but I had never set this up so below are the steps I followed to get it working:-\nDownload and install Remote Tools for Visual Studio 2012 Update 2 here - (Make sure to install the correct version x86 or x64). I then started the Remote Desktop Service making sure to \u0026lsquo;Run As Administrator\u0026rsquo;. An entry with the date and time and a description will be shown once we connect to the remote debugging service. In my case I wanted to debug a console application - so I ran the console application (on the remote server) Make sure to have your VS 2012 solution open, add some breakpoints to the code you\u0026rsquo;re looking to debug on the remote server - its important that the code on the remote server is exactly the same as the code which is open in VS 2012 - if not breakpoints wont be hit. Now go back to Visual Studio and from the debug menu select Attach to Process, on this screen I change the Qualifier to the name of the remote server and select the console application process from the list of running processes on the remote server. If you check back on the remote server it should say that you\u0026rsquo;ve connected to the remote debugger service. If all is setup correctly then your breakpoints will be hit and hopefully you can figure out why your code wasn\u0026rsquo;t working Turned out the licence file we had been using was empty and by debugging I was able to see a more detailed exception stack trace and information. This is how I got it running fairly easily - if you run into any issues :- For more info on setting up remote debugging follow this link here.\nHope this helps someone out there.\n","date":"29 July 2013","externalUrl":null,"permalink":"/2013/07/29/visual-studio-2012-remote-debugging-how-to-getting-it-working/","section":"Posts","summary":"","title":"Visual Studio 2012 Remote Debugging - how to getting it working","type":"posts"},{"content":"","date":"15 April 2013","externalUrl":null,"permalink":"/categories/ravendb/","section":"Categories","summary":"","title":"RavenDB","type":"categories"},{"content":"","date":"15 April 2013","externalUrl":null,"permalink":"/tags/ravendb/","section":"Tags","summary":"","title":"RavenDB","type":"tags"},{"content":" Smuggler is a tool for RavenDB which is used for exporting and importing data - today at work I was shown a nice way to use it to take production data out and import it locally for just one collection of documents - something which might be useful and I know I will forget the syntax I the future for so blogging about it helps me know remember it and I can always read here again in the future if and more likely when I do forget it.\nThe syntax for exporting a collection called Categories would be as follows:-\nWhat are we doing here, well we are saying use Smuggler to export from the Catalogue Tenants database a dump file - we are also using metadata so that we are only exporting a collection of documents called Categories and then only the latest version so no revisions, and lastly only export the Documents so no Indexes or any other types of documents.\nI wanted to then import this into my local instance of RavenDB so the following command does just that:-\nThis will import the Categories and override any existing Categories in my local RavenDB instance.\nYou can read more about smuggler here.\nHope someone finds that useful.\n","date":"15 April 2013","externalUrl":null,"permalink":"/2013/04/15/ravendb-exporting-and-importing-using-smuggler/","section":"Posts","summary":"","title":"RavenDB - Exporting and Importing using Smuggler","type":"posts"},{"content":"","date":"15 April 2013","externalUrl":null,"permalink":"/tags/ravendb-tutorial/","section":"Tags","summary":"","title":"RavenDB Tutorial","type":"tags"},{"content":"","date":"15 April 2013","externalUrl":null,"permalink":"/tags/smuggler/","section":"Tags","summary":"","title":"Smuggler","type":"tags"},{"content":"","date":"3 April 2013","externalUrl":null,"permalink":"/tags/elmah/","section":"Tags","summary":"","title":"Elmah","type":"tags"},{"content":"","date":"3 April 2013","externalUrl":null,"permalink":"/tags/elmahr/","section":"Tags","summary":"","title":"Elmahr","type":"tags"},{"content":"If your unfamiliar with Elmah and/or ElmahR then please take a quick look here.\nIf you\u0026rsquo;re using Elmah but haven\u0026rsquo;t taken advantage of ElmahR then read on.\nIf you have one or more application(s) which currently use Elmah then you can very easily add in ElmahR which gives you a superb dashboard from where you can monitor either one or all of you applications which log errors.\nThe dashboard is basically one webpage which makes very nice use of SignalR to display information regarding errors thrown by your application(s), so if you deploy something and you monitor this page and see the error count for your application counting up quickly then you know you have a problem. You can use the dashboard to monitor a number of applications on different environments for example.\nExisting/New Web Application\nEither create a brand new test web application or you can use an existing web application - add ElmahR to this application using the Nuget package as below:- Ok now that we have added ElmahR to a web application we need to configure it accordingly, open up the web.config and look for the elmah section, should look something like this:- Important - The sourceId setting needs to match the sourceId setting in our dashboard application\u0026rsquo;s web.config DashBoard\nNow lets create our dashboard, so create a new MVC or Web application, then add the Nuget package as below:- Now we need to edit the dashboard\u0026rsquo;s web.config so that the sourceId\u0026rsquo;s match, shown below:- Testing ElmahR is working\nWithin your web application we want to test that ElmahR is set up and working correctly, to do this we need to have an error generated, so deliberately add an exception, such as a throw new NotImplementedException() or similar into an area you can test quickly (e.g. index actionresult within the home controller in MVC) Run the dashboard application, which should look something like this:- Then run your web application and browse to the page which will generate an error so we can see if it logs as we expect. If you have everything configured correctly then you will see the error count change in the dashboard application, like so:- TroubleShooting\nIf you don\u0026rsquo;t see your application logging errors on the dashboard it\u0026rsquo;s usually the sourceId element or the targetUrl element within your web.config Hope you find this of use and start using ElmahR.\nIf you get stuck or something isn\u0026rsquo;t working add a comment.\n","date":"3 April 2013","externalUrl":null,"permalink":"/2013/04/03/elmahr-monitor-errors-in-your-app-using-a-dashboard/","section":"Posts","summary":"","title":"ElmahR - monitor errors in your app using a dashboard","type":"posts"},{"content":"","date":"3 April 2013","externalUrl":null,"permalink":"/tags/monitoring-app/","section":"Tags","summary":"","title":"MONITORING APP","type":"tags"},{"content":"","date":"3 April 2013","externalUrl":null,"permalink":"/categories/signalr/","section":"Categories","summary":"","title":"SignalR","type":"categories"},{"content":"","date":"3 April 2013","externalUrl":null,"permalink":"/tags/signalr/","section":"Tags","summary":"","title":"SignalR","type":"tags"},{"content":" The developers at Redgate are working on a new resource for learning MVC and are looking for you\u0026rsquo;re feedback - you can take a look here and give them your feedback on how to improve it and make it grow.\nAbove is a sample of what there is currently - more to come very shortly.\nEnjoy.\n","date":"19 March 2013","externalUrl":null,"permalink":"/2013/03/19/new-mvc-learning-resource-feedback-requested/","section":"Posts","summary":"","title":"New MVC Learning Resource - feedback requested","type":"posts"},{"content":"I wanted to find out if there were any tools that can display code coverage results for JavaScript code (without the need for Java on the server or having to use Node), I experimented with a few different frameworks, test runners and what not and have spent a couple of hours looking in to this, in the end I opted for the following:-\nAt work we currently use Jasmine which is a behaviour-driven development framework for testing JavaScript code along with PhantomJS which we use to run the tests using a specrunner (there are several ways to do it but this works for now)\nI have installed the Visual Studio Extension called Chutzpah which is a JavaScript Test Runner which gives you a few nice things such as integration with TeamCity and the ability to right-click and then select Run Tests similarly to unit testing your C# code with your favourite unit testing framework.\nOk so back to code coverage for our JavaScript code - Matthew the guy who created Chutzpah is working on integrating code coverage into the next release so in the mean time here is how you get it to work - enter one further library called Blanket.js - Blanket.js is used to give us the code coverage results and currently supports Qunit, Mocha and Jasmine. An adapter API exists for supporting other test runners.\nAt this point you might be thinking its a fair amount of work to get this going but I will simplify the steps required to get your JavaScript code outputting code coverage results.\nDownload Blanket.js and look for the file called blanket-jasmine.js, add this to your Scripts folder inside your web application. This file is blanket version that works with Jasmine. Add the Nuget package jasmine.js Add some JavaScript code as below for example this is code.js Add a JavaScript file with your Jasmine tests for the code above like so :- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] describe(\u0026ldquo;general\u0026rdquo;, function () { it(\u0026ldquo;A basic test\u0026rdquo;, function () { expect(true).toBeTruthy(); var value = \u0026ldquo;hello\u0026rdquo;; expect(\u0026ldquo;hello\u0026rdquo;).toEqual(value); }); }); describe(\u0026ldquo;stringLib\u0026rdquo;, function () { it(\u0026ldquo;will get vowel count\u0026rdquo;, function () { var count = stringLib.vowels(\u0026ldquo;hello\u0026rdquo;); expect(count).toEqual(2); }); });\ndescribe(\u0026ldquo;mathLib\u0026rdquo;, function () { it(\u0026ldquo;will add 5 to number\u0026rdquo;, function () { var res = mathLib.add5(10); expect(res).toEqual(15); });\nit(\u0026quot;will multiply 5 to number\u0026quot;, function () { var res = mathLib.mult5(10); expect(res).toEqual(50); }); }); [/sourcecode]\nOk so we have some JavaScript code and Jasmine tests for the code, lets add some required links to our Jasmine specrunner page so we can see the code coverage results output to the screen, edit the spec runner like so:- The above screen shot shows that we have added a reference to both our JavaScript code file and the file containing the Jasmine tests.\nNow if we browse to the specrunner page for Jasmine we will see the results of the test - green for passed and red for failed (no code coverage results yet). Now lets show the JavaScript code coverage results - which is as simple as adding in the line to reference Blanket for Jasmine:- Refresh the specrunner page and you will now see your JavaScript code coverage results like so:- The screen shot above shows us 100% code coverage, so no lines of JavaScript are coloured red (not covered)\nIf I comment out one of the tests we can see the difference below:- And there we have it code coverage results of your JavaScript, brief post but enough to get you started I hope, next time I will add this to TeamCity and see what that gives us. ","date":"18 March 2013","externalUrl":null,"permalink":"/2013/03/18/code-coverage-for-your-javascript/","section":"Posts","summary":"","title":"Code coverage results for your JavaScript","type":"posts"},{"content":"","date":"18 March 2013","externalUrl":null,"permalink":"/categories/tdd/","section":"Categories","summary":"","title":"TDD","type":"categories"},{"content":"","date":"5 February 2013","externalUrl":null,"permalink":"/tags/knockoutjs/","section":"Tags","summary":"","title":"KnockoutJS","type":"tags"},{"content":"","date":"5 February 2013","externalUrl":null,"permalink":"/tags/kolite/","section":"Tags","summary":"","title":"KoLite","type":"tags"},{"content":"KoLite its written by John Papa and Hans Fjällemark and has helpers which add some extra very nice functionality to KnockoutJS.\nI was working on a project which uses KnockoutJS and had the need to implement the idea of setting a dirty flag if a user made a change to a form, this would in turn enable a save button and allow the changes to be saved.\nKoLite makes this very easy indeed, I decided to put together some quick code demonstrating the features I mention - at work jsfiddle.net doesn\u0026rsquo;t work too well so I have added the code to a sample app and uploaded it to GitHub.\nThe original samples and more information can be found here, I thought they could do with being expanded upon a little.\nThe ViewModel I used for the demo code is as follows:-\nDirty Flag and how to use it\nThe code on line 10 is creating the dirtyflag by using KoLite\u0026rsquo;s DirtyFlag - I pass in which observable\u0026rsquo;s I want to monitor to see if they become dirty when they\u0026rsquo;re value changes. The code on line 27 is setting up a computed observable which will return true if the observables have theyre values changed, otherwise it will return false. So by having some observables updated we can track for dirty changes and then decide what we want to do on our form, an example would be to enable the clear form button as well as enable the save button on when we have the dirty flag set to true.\nGrey out button when Ajax request is in progress\nThe code on lines 29-33 is making use of the KoLite asyncCommand If you then add the code below, to the html then we have the functionality were after. [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] **Save [/sourcecode]\nGrey out button when Ajax request is in progress and show activity icon**\nIf you add in the extra binding like so:- KoLite will now add in an activity icon within the button, and that\u0026rsquo;s it - in the example code I am using an Ajax post to call the MVC Controller and whilst this is off doing work the activity icon spins.\nMy demo code can be found here You can download the code for KoLite here Leave a comment after the beep.\n","date":"5 February 2013","externalUrl":null,"permalink":"/2013/02/05/kolite-dirty-flag-and-more/","section":"Posts","summary":"","title":"KoLite - dirty flag and more","type":"posts"},{"content":"","date":"7 January 2013","externalUrl":null,"permalink":"/tags/dot-net-curry/","section":"Tags","summary":"","title":"Dot Net Curry","type":"tags"},{"content":"","date":"7 January 2013","externalUrl":null,"permalink":"/tags/magazine-article/","section":"Tags","summary":"","title":"Magazine Article","type":"tags"},{"content":"Over the last couple of months I have been privileged to write a couple of articles for the free .Net Developer Magazine brought to you by DotNetCurry.\nIts been my first attempt at writing for a magazine and has been a lot of fun, maybe in the future I can write more articles.\nPlease enjoy and give them a read - and sign up for the magazine - its FREE!\nCreate a Snappy UI with KnockoutJS -\u0026gt; Issue 3 This article explores KnockoutJS and what KnockoutJS gives you as a developer.\nWeb Essentials for Visual Studio 2012 -\u0026gt; Issue 4 This article explores the Visual Studio 2012 Web Essential add-on.\nWhat\u0026rsquo;s New in RavenDB 2.0 -\u0026gt; Issue 5 This article explores RavenDB 2.0\nTake a look at these articles and hopefully you will learn something new - Gregor.\n","date":"7 January 2013","externalUrl":null,"permalink":"/2013/01/07/magazine-articles/","section":"Posts","summary":"","title":"My DotNetCurry Magazine Articles","type":"posts"},{"content":"","date":"7 January 2013","externalUrl":null,"permalink":"/tags/web-essentials-2012/","section":"Tags","summary":"","title":"Web Essentials 2012","type":"tags"},{"content":" Book Review: C# Smorgasbord by Filip Ekberg\nAbout the Author: Filip is a Software Engineer working with various techniques such as C#, WPF, WCF, ASP.NET MVC, ASP.NET and much more. Currently working at Star Republic in Sweden as a Software Engineer working with both newer and older technologies in a Windows environment, mainly focusing on ASP.NET MVC development.\nDuring his years of Programming, Filip has managed to accomplish some of the following: • Software Engineering Degree @ Blekinge Institute of Technology • Managing the Software Development Company SmartIT eSolutions Sweden which focused mainly on developing software and web solutions. • Working as an Amanuensis ( Teacher ) @ Blekinge Institute of Technology teaching Java, C++, Sql and Network-programming.\nYou can read more on his blog here.\nI saw a tweet from @daniellangnet who said this book was fantastic and if your looking for something to read over the holidays then give this a go, I actually ordered the book without even reading anything about it, unusual but glad i did!\n**Chapter 1: Introduction to Parallel Extensions ** :- Learn the basics of paralleization, use basic Linq, and how to optimize code by introducing parallelization. Chapter 2: Productivity and Quality with Unit Testing :- Understand why tests are import, create a test project and improve code quality. Chapter 3: Is upgrading your code a productive step? :- How to find bugs faster, How to use Resharper to get a more manageable project and to get things done faster. Chapter 4: Creating a challenge out of the trivial tasks :- Challenge yourself to create understandable and higher quality software. Chapter 5: Asynchronous programming with async and await :- Identify where yo might need asynchronous processing, refactor a synchronous app into becoming more responsive. Chapter 6: Dynamic program :- Create and extend a dynamic object by using the ExpandObject, also understand why introducing dynamic objects might cause problems long-term.\nChapter 7: Increase readability with anonymous types and methods :identify where you might have single purpose methods that you can replace with anonymous methods for increased readability and lucidity. Chapter 8: Exploring Reflection :- User reflection to get information about types at runtime and understand more about properties and methods. Chapter 9: Creating things at runtime :- Create your own method at runtime using Reflection, be able to read IL and understand portions of it. Chapter 10: Introducing Roslyn :- Create a basic code analysis that suggest issues in your code, run code snippets on entire code files. Chapter 11: Adapting to Inversion of Control :- Understand the basics of Inversion of Control, introduce a Dependency Injector into your application. Chapter 12: Are you Mocking me? :- Create a mock of any interface and write tests that introduce\nThis book as you can see has something for everyone, i have thoroughly enjoyed reading it from cover to cover and will be reading a good few of the chapters again, it\u0026rsquo;s a very handy reference book and covers a number of topics that as a developer can help you explore, improve and be inspired - just as it says on the front cover.\nI picked this book up on Amazon for £19 and its well worth it - recommended reading for 2013.\n","date":"1 January 2013","externalUrl":null,"permalink":"/2013/01/01/book-review-c-smorgasbord-by-filip-ekberg/","section":"Posts","summary":"","title":"Book Review: C# Smorgasbord by Filip Ekberg","type":"posts"},{"content":"","date":"1 January 2013","externalUrl":null,"permalink":"/categories/book-reviews/","section":"Categories","summary":"","title":"Book Reviews","type":"categories"},{"content":"","date":"1 January 2013","externalUrl":null,"permalink":"/categories/dependency-injection/","section":"Categories","summary":"","title":"Dependency Injection","type":"categories"},{"content":" I have seen a few of my good friends on twitter discussing what technologies/frameworks they use and why they chose them.\nI have also seen people saying why they should use this technology/framework over that technology all with really good arguments, as well as people asking which technologies/frameworks/libraries they should look at.\nNote:- This is from the perspective of a company and not an individual developers stand point.\nIt comes down to a number of things and twitter isn\u0026rsquo;t really the best place to discuss this as it\u0026rsquo;s too small to get your point across hence this blog post.\nI have worked in a few different places over time and there really is no single answer, some financial place I was in you were told which technology you were going to be using and it wasnt even up for debate, software architects who you would never even see had made the decisions already whether that be a good idea or not.\nI would say choose the technology/framework that fits your current criteria as well as the technology/framework that matches your teams skill sets.\nThere has been a few posts about MVC or Nancy, in the end who cares what you choose? - if it gets the job done right?\nPerhaps if you\u0026rsquo;re in a small team then its easier to choose say Nancy over MVC perhaps? - but if you walked into a team of 50-100 developers in a company im betting more people know MVC than know Nancy, that\u0026rsquo;s not to say MVC is better than Nancy, I havent even looked at Nancy, why not? - for a couple of reasons, why do I want to look at Nancy when MVC is used through our solutions, do I want to spend time learning another tool that does the same job? - no I don\u0026rsquo;t have time, don\u0026rsquo;t get me wrong I love to look at new ways of doing things, but I want to spend time learning something else like KnockoutJS or RavenDB and expand on my skill set, id rather do that port perfectly fine code bases which use a number of tools that run on MVC to Nancy and then have to check everything still works as expected including tests, build scripts, all sorts of other tools we use like chirpy and T4MVC.\nPeople wonder why companies choose Microsoft products over other similar products and from experience it\u0026rsquo;s usually for either the option of MSDN licence support if required, or that more developers out there know and understand the product therefore there is more chance of help/finding a solution to a nasty bug - sort of strength in numbers it\u0026rsquo;s also easier for a manager to say to their boss look we will use SQL Server instead of CouchDB because of the products past history and thy can sleep safe in the knowledge its proven - I am not saying that other products are brand new and not to be trusted far from it, but I hope you get the point.\nRecently we started using CoffeeScript for our latest project and to be honest I have never liked it, it was good for organising code in a better structured manner and I will leave it at that - we are looking to move to TypeScript and this isn\u0026rsquo;t because it\u0026rsquo;s a Microsoft product, its open source and I just think it\u0026rsquo;s so much nicer due to the tooling. It\u0026rsquo;s a better too for the job in my opinion and in summary there is no magic answer to what the best technology is, decide upon the variables in play and go from there is what I would suggest.\nNot everyone will agree so feel free to add a comment.\n","date":"31 December 2012","externalUrl":null,"permalink":"/2012/12/31/choosing-what-technologiesframeworks-to-use/","section":"Posts","summary":"","title":"Choosing what Technologies/Frameworks to use","type":"posts"},{"content":"I have been using KnockoutJS at work for the last few weeks and thought it might be an idea to blog about my findings whilst using KnockoutJS within an MVC 4 project, so here goes: -\nWith KnockoutJS you can get a really slick user experience if you show discipline in structuring your code, you can separate out your concerns using unobtrusive JavaScript - i.e. don\u0026rsquo;t put your JavaScript in the HTML, yes add data-bind attributes but that should be all you need, your JavaScript can be referenced from a file within a JS folder or similar keeping your HTML clean and free from being polluted by lots of inline JavaScript.\nIf you\u0026rsquo;re wondering how you go about going from your MVC model and working with this in KnockoutJS then look no further than KnockoutJS mapping. This plugin will take your existing Model from c# and convert it into what you will use within KnockoutJS, for example if in your model you have a string[] defined like so:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public string[] EmailAddresses { get; set; } [/sourcecode] then the mapping plugin converts this to an observableArray, and if you have a simple string property such as: - [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public string Email { get; set; } [/sourcecode] then the plugin will map this to a knockout observable for you.\nWhen using ObservableArrays note that the number of items in the array is tracked - not the actual values within the array - this is important if, if the front end requires updated to the values within the array then you need to make the items within the ObservableArray observable also.\nTake a look at the ko.utils code mentioned here for some hidden gems when working with KnockoutJS.\nDont store a lot of information in observables if you don\u0026rsquo;t have to, it\u0026rsquo;s not a good idea to store 10,000 records in an observable array and then bind that to a grid (Only store what you need in observables)\nIt can be a good idea to display on your page the contents of your viewmodel whilst you\u0026rsquo;re debugging so you can see what the observable and observable arrays you\u0026rsquo;re using contain\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n## Debug [/sourcecode]\nMore soon as I use it more and more, hope that helps.\n","date":"29 October 2012","externalUrl":null,"permalink":"/2012/10/29/knockoutjs-what-ive-learned-so-far/","section":"Posts","summary":"","title":"KnockoutJS - what I've learned so far","type":"posts"},{"content":"","date":"29 October 2012","externalUrl":null,"permalink":"/tags/mvc/","section":"Tags","summary":"","title":"MVC","type":"tags"},{"content":"","date":"20 October 2012","externalUrl":null,"permalink":"/tags/coffeescript/","section":"Tags","summary":"","title":"CoffeeScript","type":"tags"},{"content":" \u0026ldquo;CoffeeScript is a little language that compiles into JavaScript. Underneath all those awkward braces and semicolons, JavaScript has always had a gorgeous object model at its heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way\u0026rdquo;\nIf your writing JavaScript in your web application, and the chances are these days you will be, then CoffeeScript is well worth a look - if your like me and you don\u0026rsquo;t particularly like writing JavaScript then bare with me you might learn some new tricks - CoffeeScript attempts to make your life easier when writing JavaScript and for the most part does a good job, it\u0026rsquo;s not all plain sailing as you might expect if you have worked with JavaScript much in the past.\nOk lets crack on, if you have Visual Studio handy make sure you have installed the Web Essentials Extension. This is a beauty of an add-on and has a nice little add-on for CoffeeScript included.\nOpen up a new web solution either MVC app or a Web app Right click on your solution and then click Add in the next menu look for CoffeeScript, click this and we have a new CoffeeScript file added to your solution. On the left hand pane of the split is where you type your CoffeeScript and this is converted into JavaScript on the right hand side. Each time you save your changes the JavaScript file is updated for you - if you make any syntactical changes incorrectly then the preview tab on the right hand side will show you which line the error is on. Some CoffeeScript basics are as follows:-\nSemicolons are not required -\u0026gt; ; Parenthesis are usually not required -\u0026gt; () Curly braces are usually not required -\u0026gt; {} Commas are sometimes not required -\u0026gt; , Indent your code by tabbing for the start of a code block Decrease indentation - end of a code block The following screen shot shows you Visual Studio 2012 using the Web Essentials extension and I have added some CoffeeScript on the left and Web Essentials does the rest for me turning this into JavaScript. To learn more about CoffeeScript check out the official website here. Summary CoffeeScript can be useful when your using something like KnockoutJS and you want to structure your code nicely using JavaScript classes and namespaces - I have been suing it recently and it has good points and bad points.\n**The good: - **It allows you to structure your JavaScript easily and you can use namespaces as you would within C# classes. Less code is always good in my opinion and with CoffeeScript its easier to write less code to create your JavaScript files.\nThe bad: - Tabbing indents your code and this is how you create functions and loops and so on, miss one tab out and you can be left scratching your head but with some care this should be easily fixed.\nLearn anything useful? - please let me know by leaving a comment after the beep.\n","date":"20 October 2012","externalUrl":null,"permalink":"/2012/10/20/create-coffeescript-using-visual-studio-and-the-web-essentials-add-on/","section":"Posts","summary":"","title":"Create CoffeeScript using Visual Studio and the Web Essentials Add-On","type":"posts"},{"content":"","date":"20 October 2012","externalUrl":null,"permalink":"/tags/web-essentials/","section":"Tags","summary":"","title":"Web Essentials","type":"tags"},{"content":" In the last couple of weeks I have been using .Net Demon which is an add-on for Visual Studio 2012.\nAs you write your code in Visual Studio code it can take time to stop and check if the solution still builds as expected, with a larger solution this can become a fairly slow and laborious task - .Net Demon compiles your code as you type, this means you no longer have to stop coding and then rebuild your solution which is a really nice feature. The second you introduce an error you will be notified in the bottom right hand corner - this may sound intrusive but its far from that, your simply notified when you introduce an error.\nThe tool comes with some nice options including:-\nAnd the description for these options:- Below I have just opened Visual Studio 2012 and .Net Demon is building the project:-\nBelow .Net Demon has built all the projects in my solution and is showing no errors:-\nBelow .Net Demon has built all the projects in my solution and is showing an error after introduced a typo:-\nSummary .Net Demon is a very nice little inexpensive add-don for Visual Studio which will speed up your development process and give you a nice little productivity boost for a very small amount of your hard-earned cash, I recommend you give it a try, a 14 day trial is available Let me know if you try it and what your thoughts are - enjoy.\n","date":"10 October 2012","externalUrl":null,"permalink":"/2012/10/10/net-demon-review/","section":"Posts","summary":"","title":".Net Demon Review ","type":"posts"},{"content":"One of RavenDB\u0026rsquo;s unique features is something called safe by default - this means that the database is configured to stop users querying for large amounts of data which is never a good idea, to have a query return thousands of records is inefficient and can also take a long time.\nWith RavenDB safe by default limits the number of records by default on the client side to 128 (by default means its configurable) if you don\u0026rsquo;t make use of Take(). Server side you can use .Take(1024) if you want to go up to the limit configured by the server, if you try to bring back more than 1024 then it will default to 1024 results returned if you need to return more data than that then you should be asking yourself why?, page your data if you need to return more than this number of records.\nSafe by default is attempting to stop a developer from writing poor queries, there is nothing to stop you from changing the defaults to a higher level but if you\u0026rsquo;re looking to display thousands of records on a webpage without paging through your data then this is seen as poor design, here is a nice a quote from the RavenDB website: -\nRavenDB will let you shoot yourself in the foot, but only after you make it absolutely clear that this is what you actually want to do\nIt seems to be quite common for developers to try to work around the limits and actually want to block their leg off, this usually stems from a misunderstanding of how to use RavenDB, it really is a very simple concept which I find to be a nice feature.\nRavenDB also had a very useful option to stop yourself from creating the dreaded SELECT N+1 scenario - this feature stops after 30 request to the server per session, again configurable but if you\u0026rsquo;re hitting this limit then your more than likely querying incorrectly.\nTo summarise safe by default is there to help and not hinder, yes you\u0026rsquo;ll write code then realise your only returning 128 records when there should be more results, no doubt everyone has done that whilst using RavenDB, either your unit tests aren\u0026rsquo;t right or you\u0026rsquo;ve forgotten to use .Take()\n","date":"5 October 2012","externalUrl":null,"permalink":"/2012/10/05/ravendb-safe-by-default/","section":"Posts","summary":"","title":"RavenDB - Safe By Default","type":"posts"},{"content":" My colleague at work Mohammed Ibrahim is doing a free talk titled RavenDB: working with NoSQL data in .NET at Glasgow Caledonian University on Nov 14.\nIf your unfamiliar with noSQL and want to know more then come along and you will learn all about it and more.\nSo come along, learn, ask some questions and to get an insight into why RavenDB rocks, register at http://ravendbglasgow.eventbrite.com - tickets are selling fast so get yours while you can.\nThere will be free swag! to give away at the event, including t-shirts and RavenDB stickers.\n","date":"5 October 2012","externalUrl":null,"permalink":"/2012/10/05/free-ravendb-talk-in-glasgow-on-november-14th/","section":"Posts","summary":"","title":"Free RavenDB Talk in Glasgow on November 14th","type":"posts"},{"content":"This past week I have been mainly working with KnockOutJS, if you looking for a way to create a rich UI that users will love and your building a website then I highly recommend you take a look at KnockoutJS\nWhat I learned this past week\nWeb Essentials 1.1 for VS 2012 by Mads Kristensen has been updated, you can read more here - go check it out. RavenDB Backups - I decided to instead of using the RavenDB Backup.exe - I am going to stick with just exporting the tenant database and saving this off to a network share. At work we are looking at introducing CoffeeScript - CoffeeScript is a language that sits on top of JavaScript and compiles down to JavaScript but has added benefits including making your code cleaner and has much more signal to noise ratio - more on CoffeeScript soon , I\u0026rsquo;m off to learn more on it via PluralSight. Redgate have taken on the 2 developers who write Glimpse and will be adding to the project - you can read more here. What did you find useful this week? - please let me know by leaving a comment after the beep.\n","date":"9 September 2012","externalUrl":null,"permalink":"/2012/09/09/what-i-learned-last-week-3rd-september-7th-september/","section":"Posts","summary":"","title":"What I learned last week – 3rd September - 7th September","type":"posts"},{"content":"","date":"30 August 2012","externalUrl":null,"permalink":"/categories/jquery/","section":"Categories","summary":"","title":"JQuery","type":"categories"},{"content":"If your writing a web application and using any kind of JavaScript library then jsfiddle is something worth taking 5-10 minutes to look at in my opinion.\nYou can try out your JavaScript (any library you can think of) add some HTML and sprinkle with CSS and quickly see the results, its a no brainer.\nAt work we are starting out on a web application which we will be using KnockoutJs on and jsfiddle will be invaluable, I have been watching the Pluralsight and Tekpub videos on KnockoutJs and wanted to blog about jsfiddle after watching John Papa talk about it in one of his KnockoutJS modules.\nJohn\u0026rsquo;s courses on Pluralsight are awesome and I highly recommend them, the one I refer to was his course on Buiding HTML 5 apps (middle one below):-\njsfiddle.net is a website where you can test out some JavaScript code snippets you have, before you add them to your project, it\u0026rsquo;s an excellent little test harness for ideas and trying things out.\nYou can save the fiddles you create and share fiddles with others if you can\u0026rsquo;t get something working and could use some help with some tricky JavaScript.\nOk less talk more action:-\nBrowse to jsfiddle.net and then sign up for an account, the reason you want an account is so you can save fiddles for later and come back to them in the future. You can add in pretty much any JavaScript library as a a managed resource so that you test all kinds of stuff, jquery, jquery ui, knockoutj, kendoui and more. If you see a blog post that mentions a js fiddle and you want to it then I will show you how to use it below:- How to create your first fiddle using jsfiddle\nFor simplicity we will use the demo from the knockoutJs website which has fantastic tutorials on how to use knockout. Since this demo is going to use KnockoutJS we will add a reference to KnockoutJS Browse to https://github.com/SteveSanderson/knockout/downloads and then copy the location to the latest version of the knockoutJS library, at this moment in time this link to the file we need is :- https://github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js To add this to our jsfiddle look at the left hand side looking for \u0026lsquo;Add Resources\u0026rsquo; and then paste in the link to the js file and then click the plus icon. The screen is split into 4 sections:- Top Left is for HTML Top Right is for any css styling you wish to add/try out Bottom Left is where you add your JavaScript code. Bottom right shows the output you would see in the browser Add the following into the top left hand window pane (Html):- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] First name: ****\nLast name: ****\n[/sourcecode]\nNow add the following into the bottom left window pane (JavaScript):- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] // This is a simple viewmodel - JavaScript that defines the data and behavior of your UI function AppViewModel() { this.firstName = \u0026ldquo;Bert\u0026rdquo;; this.lastName = \u0026ldquo;Bertington\u0026rdquo;; } // Activates knockout.js ko.applyBindings(new AppViewModel()); [/sourcecode]\nAnd thats it we are ready to save the fiddle and test it out. To test out our code click Run up at the top and you can use your favourite browser to check for any errors that may arise as you play around with the code. A very simple demo but you get the idea on whats possible, and if like me your trying to learn KnockoutJS its an invaluable tool. Ok now that you get the idea, go create some fiddles and test our your ideas using any JavaScript library you can think of - enjoy!\n","date":"30 August 2012","externalUrl":null,"permalink":"/2012/08/30/jsfiddle-net-what-is-it-and-why-is-it-so-useful/","section":"Posts","summary":"","title":"jsfiddle.net - what is it and why is it so useful?","type":"posts"},{"content":"So I want to learn KnockoutJS as we are going to be using it on a project at work very soon, I have had a look at it briefly but not really used it in anger as they say. I will be using this for the next few weeks at the very least so lets get started learning it.\nIn order to learn knockoutJS I will be using the following resources (click the images):-\nOfficial KnockoutJS site Tekpub Course Pluralsight Courses KnockmetOut.Net Ok so thats enough to get me started with, I\u0026rsquo;ll blog more each week maybe even each day as I come across useful tidbits of learning KnockoutJS.\nIf anyonelse has useful KnockoutJS let me know and I\u0026rsquo;ll add them as I go.\n","date":"27 August 2012","externalUrl":null,"permalink":"/2012/08/27/starting-out-learning-knockoutjs/","section":"Posts","summary":"","title":"Starting out learning KnockoutJS","type":"posts"},{"content":"","date":"20 August 2012","externalUrl":null,"permalink":"/tags/aop/","section":"Tags","summary":"","title":"AOP","type":"tags"},{"content":"Code become\u0026rsquo;s messy with error handling logic all over our code, wouldn\u0026rsquo;t it be nice to be able to log the error, the offedning method name and the line number of the code that caused the error in the first place.\nIf you\u0026rsquo;ve done any MVC development then you are already familiar with AOP, [HandleError] is an example of an aspect and with very little effort indeed you can create your own. Creating an aspect means you can reuse logic for tracing, error handling and more very easily.\nAt work we use PostSharp for our AOP aspect-oriented programming and its doesn\u0026rsquo;t get much easier. The guys even give you an add on in visual studio and it walks you through how to go about learing AOP and how to create aspects using PostSharp - the tutorial is superb and very well thought out.\nWe have a class library logging class which we use as an aspect using Postsharp and this means that we can add a [Catch] attribute to the method and we now have error logging for this new method:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] [Catch] public MyNewMethod() { throw new applicationException(); } [/sourcecode]\nAnd that is it, download the demo and give it a try its so easy but quite powerful - I recommend you take a look.\n","date":"20 August 2012","externalUrl":null,"permalink":"/2012/08/20/error-handling-using-aspect-oriented-programming-aop/","section":"Posts","summary":"","title":"Error handling using aspect-oriented programming (AOP)","type":"posts"},{"content":"","date":"20 August 2012","externalUrl":null,"permalink":"/tags/postsharp/","section":"Tags","summary":"","title":"PostSharp","type":"tags"},{"content":"This week I have been busy mostly busy with bug fixing some code we have which used to be a windows service but is now a TopShelf service - if you use windows services you\u0026rsquo;ll know that there hard to debug, enter TopShelf TopShelf is almost identical to a windows service but runs like a console app and that allows you to debug the code you would have within your windows service. To change your code from a windows service to a TopShelf service is minimal code indeed and well worth the small amount of effort.\nWhat I learned this past week\nVisual Studio 2012 and Windows 8 are available, if you use Visual Studio 2012 then check out a fantastic extension called Web Essentials - go check it out. RavenDB - the guys who bring you Raven are hard at work on a 1.2 release which will bring a number of great changes, I have upgraded my home-brew project to the latest unstable version and the upgrades to the front end are cool and most welcome - more soon when I get more time hands on. Select2 is a very neat little javascript library which you use to make your select boxes on web pages far sexxier - take a look here. Elmahr 0.91 is out - more here. What did you find useful this week? - please let me know by leaving a comment after the beep.\n","date":"20 August 2012","externalUrl":null,"permalink":"/2012/08/20/what-i-learned-last-week-13th-august-17th-august/","section":"Posts","summary":"","title":"What I learned last week – 13th August - 17th August","type":"posts"},{"content":"Having listening to hanselminutes podcasts and a few other ones as well as discussions with others I felt the need to ask people out here - how do you keep up to date?\nI speak with a good friend of mine who is a social carer and she is always talking about how hard it is to keep up to date and how often things change and how she goes about keeping up to date with these changes - as developers I\u0026rsquo;m sure we can all relate to that in some way.\nHow I keep up to date In order to at least try to stay up to date I read blog posts and carefully select who I follow on twitter. For me the easiest way to stay up to date is to actually harness twitter in a way that allows me to follow the people who tweet about content I want to learn about, of course they also tweet other stuff which is also good but I use twitter as a learning tool, if people stop tweeting useful content then I will unfollow them as I like to have a useful twitter stream as a posed to tweets about running times and how they became the major of some place I\u0026rsquo;ve never heard of ;)\nPeople ask me a lot why am I always on twitter - the real answer is I keep my ear to the ground and I like to learn whats new out there or what people find useful.\nYeah blog posts are an invaluable tool but I have spent less time recently reading my rss feeds and more time reading what people are tweeting about - I like to try to encourage people to tweet about useful stuff they come across on a day-to-day basis and is a reason I started my what I learned last week blog post series.\nSo my question to you guys out there is how do you go about keeping up to date, so you use twitter like me or not really? has it made you think about what you tweet or you dont care who reads what you tweet? discuss\u0026hellip;\n","date":"19 August 2012","externalUrl":null,"permalink":"/2012/08/19/using-twitter-to-stay-up-to-date-as-a-developer/","section":"Posts","summary":"","title":"Using twitter to stay up to date as a developer","type":"posts"},{"content":"","date":"14 August 2012","externalUrl":null,"permalink":"/tags/jetbains/","section":"Tags","summary":"","title":"JetBains","type":"tags"},{"content":"At work we use TeamCity from Jetbrains on our build server, the product itself is the best there is out there.\nGood products should be talked up more on twitter in my opinion, so that more people learn about what is good out there. If you\u0026rsquo;re considering software to use for building software then look no further than TeamCity.\nWe recently created quite a few nuget packages for internal use at work and we have them building as part of our builds on the buildserver using Teamcity. They used to be class libraries used as externals and these were causing us some pain so we decided to make them into Nuget packages and build them as part of our build process.\nOur build process at work is pretty neat, I can push a website/windows service to dev, or staging environments with once click and it build the code, runs all the unit tests, check the level of code coverage is above a certain level and then removes the current installation and installs the new version - all in one click (for production we have 3 clicks due to having to log onto production servers and clicking on a batch file to do remove the old code and install the new version)\nTo set that up took time but worth doing as it means anyone can build and deploy to any environment with 3 clicks or less, thats quite powerful.\nNow before going into the issue, let me say that people use TeamCity in different ways, the way people build Nuget packages will also no doubt differ.\nOur Issue As part of the code we were referencing internal and external Nuget packages, the NuSpec files had the following:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n[/sourcecode]\nWasnt till I suddenly realised that this means go get the latest version of the example package from Nuget if one is available, which wasnt really what we wanted in this scenario.\nVersioning packages within Nuget is covered here Versioning Nuget packages and was just what I needed.\nOnce I updated the Nuspec files to have:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n[/sourcecode]\nThis square brackets around the version number means that instead of going off to Nuget to get the latest version, go off and get this version (if not installed already).\nNow when i do a build it wont try and pull down the latest version of Nuget goodies such as AutoMapper and StructureMap.\nFeel free to ask any questions or leave a comment on this post.\n","date":"14 August 2012","externalUrl":null,"permalink":"/2012/08/14/small-nuget-gotya-with-our-teamcity-builds/","section":"Posts","summary":"","title":"Small Nuget gotya with our TeamCity builds","type":"posts"},{"content":"","date":"14 August 2012","externalUrl":null,"permalink":"/tags/teamcity/","section":"Tags","summary":"","title":"TeamCity","type":"tags"},{"content":"","date":"3 August 2012","externalUrl":null,"permalink":"/tags/tutorial/","section":"Tags","summary":"","title":"Tutorial","type":"tags"},{"content":"This week I have been busy watching the KnockoutJS videos on Pluralsight, my favourite way to learn a new technology other than sitting coding - I am also working on a little home-brew website and this set of learning videos has been very handy.\nWhat I learned this past week\nVisual Studio 2012 will be out August 15th for MSDN subscribers. RavenDB has some very cool bundles and this week I looked at the uniqueconstraint bundle - more here. RavenDB has an updated client Nuget package that allows it to work with an MVC 4 application, before this release the RavenDB client package had a conflict in the version of NewtonSoft.JSon used - this is fixed in the latest stable release. Countersoft have releases a beta of Gemini 5 -if you\u0026rsquo;re not familiar with Gemini its simple, it\u0026rsquo;s the best issue tracker software on the web today bar none. Please leave a comment after the beep.\n","date":"3 August 2012","externalUrl":null,"permalink":"/2012/08/03/what-i-learned-last-week-july-30-3rd-august/","section":"Posts","summary":"","title":"What I learned last week – July 30 - 3rd August","type":"posts"},{"content":"During the week at work we came across an issue where we are doing a linq query which is using a statement such as this:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] var product = session.Query().Single(GetSource(key)); [/sourcecode]\nIn Sql Server land we have a product table and the field productcode is unique - we noticed that in RavenDB we were seeing products which had the same productcode in different documents (not unique), this was not the desired outcome and so we looked into how to go about fixing this in RavenDB, enter the uniqueconstraints RavenDB bundle.\nRavendDB bundles are like add-ons and Raven comes with quite a few and they can be exceptionally handy. To use the uniqueconstraints bundle you create a folder and call it plugins, usually you keep this inside the server folder but you can put it anywhere and add a config value so that Raven can find your plugins, an example of how to set up your config to locate plugins:-\n[sourcecode language=\u0026ldquo;xml\u0026rdquo;]\n[/sourcecode]\nServer side checking\nTo to use the uniqeconstraints bundle add the Raven.Bundles.UniqueConstraints.dll from the bundles folder to your plugins folder where ever you decide to put them. Then restart RavenDB To see if they have been installed and picked up - go to the Raven Management Studio and then at the bottom left hand side, click on statistics - next to where it says Triggers it should say something like Raven.Bundles.UniqueConstraints.UniqueConstraintsDeleteTrigger Client Side checking\nIn order to implement the check through code we borrowed the example written by Richard Dingwall taken from his blog.\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] namespace WhateverNameSpaceYouHave.Extensions.RavenUniqueConstraint { using System; using System.Linq.Expressions;\nusing Raven.Client; public interface IRavenUniqueInserter { void StoreUnique(IDocumentSession session, T entity, Expression\u0026gt;; keyProperty); } } [/sourcecode]\nAboove the interface, below that code that uses it:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] namespace WhateverNameSpaceYouHave.Extensions.RavenUniqueConstraint { using System; using System.Linq.Expressions;\nusing Raven.Abstractions.Exceptions; using Raven.Client; public class RavenUniqueInserter : IRavenUniqueInserter { public void StoreUnique(IDocumentSession session, T entity, Expression\u0026gt; keyProperty) { if (session == null) { throw new ArgumentNullException(\u0026quot;session\u0026quot;); } if (keyProperty == null) { throw new ArgumentNullException(\u0026quot;keyProperty\u0026quot;); } if (entity == null) { throw new ArgumentNullException(\u0026quot;entity\u0026quot;); } var key = keyProperty.Compile().Invoke(entity).ToString(); var constraint = new UniqueConstraint { Type = typeof(T).Name, Key = key }; DoStore(session, entity, constraint); } private static void DoStore(IDocumentSession session, T entity, UniqueConstraint constraint) { var previousSetting = session.Advanced.UseOptimisticConcurrency; try { session.Advanced.UseOptimisticConcurrency = true; session.Store(constraint, string.Format(\u0026quot;UniqueConstraints/{0}/{1}\u0026quot;, constraint.Type, constraint.Key)); session.Store(entity); session.SaveChanges(); } catch (ConcurrencyException) { // rollback changes so we can keep using the session session.Advanced.Evict(entity); session.Advanced.Evict(constraint); throw; } finally { session.Advanced.UseOptimisticConcurrency = previousSetting; } } } } [/sourcecode]\nHow to call it from code [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] try { new RavenUniqueInserter().StoreUnique(session, destination, x =\u0026gt; x.Code); LogManager.GetCurrent().Event(LoggingLevel.Info, \u0026ldquo;Inserting Product:+\u0026rdquo; + destination.Code, \u0026ldquo;Method name here\u0026rdquo;); } catch (ConcurrencyException) { LogManager.GetCurrent().Event( LoggingLevel.Error, \u0026ldquo;Product code already in use. Code: \u0026quot; + destination.Code, \u0026ldquo;Method name here\u0026rdquo;); } [/sourcecode]\nAnd thats it, now we wont be able to add a product with a productcode which already exists in our RavenDB database, making it a unique constraint just as youd have in Sql.\nPlease add a comment or ask a question if you found this useful.\n","date":"3 August 2012","externalUrl":null,"permalink":"/2012/08/03/ravendb-using-the-uniqueconstraint-bundle/","section":"Posts","summary":"","title":"RavenDB - using the uniqueconstraint bundle","type":"posts"},{"content":"This is the first in a series I am going to do on what I learned last week - it will cover what I\u0026rsquo;ve been up to and what I have read and learnt throughout the week - ok let\u0026rsquo;s get started.\nFound a really nice sample on how to notify users when an action on your site has taken place - say you save a record or delete a record, perhaps you need to show a validation message, maybe even a banner at the top that has to stay there, Take a look at the oh so simple to use JQuery plugin called Notify.\nAwesome Stuff\nVisual Studio 2012 is really nice to use! - you should take a look now if you havent already. Shout out to the guys at RavenDb highly recommend it, also note its FREE until you need to release to production, so if you\u0026rsquo;re doing demos, needing a quick win on a project - take it for a spin. Resharper 7 is out - if you\u0026rsquo;re not already using this then do yourself a favour, why walk when you can run, go try it now Resharper 7. Redgate have brought out a plugin for setting up a database build in TeamCity Redgate TeamCity Plugin Please leave a comment after the beep.\n","date":"27 July 2012","externalUrl":null,"permalink":"/2012/07/27/what-i-learned-last-week-july-23-27th/","section":"Posts","summary":"","title":"What I learned last week - July 23-27th","type":"posts"},{"content":" Last week we had AspConf - \u0026ldquo;aspConf is a virtual conference focused on one thing: showcasing the ASP.NET stack as the platform for great web applications.\u0026rdquo;\nOver 2 days they had 5 virtual rooms used to present lots of fascinating stuff on .Net, including talks about all manner of things in the Asp.Net world.\nThe sessions on both days covered topics such as, Async in .Net 4.5, Glimpse, TDD, Azure and Cloud Computing and lots lots more, you can read more about the sessions here.\nAlthough it had some technical difficulties, due to its popularity I may add, the conference is an awesome way to learn for free - and free is always good. It\u0026rsquo;s a superb way to learn about content you havent had time to look at it, or new technologies you havent heard of. Hopefully next year they might try to use something different from livemeeting.\nIf you missed any of the session then fret not, most of them if not all of them were recorded and put up on Channel 9 here\nI only managed to see sessions from day 2 so I am off to go watch more content on Channel 9 - a great resource for free learning.\n","date":"22 July 2012","externalUrl":null,"permalink":"/2012/07/22/aspconf-my-review/","section":"Posts","summary":"","title":"AspConf - My Review","type":"posts"},{"content":"","date":"22 July 2012","externalUrl":null,"permalink":"/categories/entity-framework/","section":"Categories","summary":"","title":"Entity Framework","type":"categories"},{"content":"","date":"15 July 2012","externalUrl":null,"permalink":"/tags/javascript-improvements/","section":"Tags","summary":"","title":"Javascript Improvements","type":"tags"},{"content":"","date":"15 July 2012","externalUrl":null,"permalink":"/tags/scott-hanselman/","section":"Tags","summary":"","title":"Scott Hanselman","type":"tags"},{"content":" Scott Hanselman was touring Scotland and taking in some of our country as well as some talks in Edinburgh, Dundee, Aberdeen and finally Glasgow. You can read more about the event on his site Scott\u0026rsquo;s tour of Scotland. The following is my review of his talk in Glasgow which was on Friday 13th of July.\nScott was delivering his - One ASP.NET (super everything talk) covering almost everything going on that Microsoft are working on/have to offer for developers within Asp.Net\nThe talk covered the following areas - Visual Studio 2012, SignalR, WebAPI, Webform improvements, Azure and also what to look forward to when .Net 4.5 is released.\nVisual Studio 2012 - Scott was kind enough to demo a build newer than the RC which had some unseen bits.\nCSS improvements - Scott demoed some of the new features when you have a .css file open in the VS 2012 editor, actual colour pickers where you can choose the colour, including a droplet for choosing a colour out with Visual Studio which will be picked up when selected. Styles are also indented so for example you can have an .li tag and a .li a tag nicely formatted and indented below the .li tag.\n**Browse with option **- you can now select from any browser which you have installed on your pc as well as iphone and ipad and this will display your website rendered in which ever browser you wish, you can also mark several of these as default, this means that when you run your site in VS 2012 and say you have selected FireFox, IE and Ipad as your default browsers the site will open up in all 3.\nJavascript improvements - VS 2012 has much better intellisense and by this I mean true intellisense, if you define a new function within your javascript file or webpage and then call it elsewhere you\u0026rsquo;ll get full intellisense for the function your calling - impressive stuff indeed.\nWebAPI - Scott demoed WebAPI as there were quite a few people myself included who hadn\u0026rsquo;t really looked into this as yet, it looks cool though and a lot easier than WCF, also if you\u0026rsquo;re using MVC seems very easy to pick up. Scott demoed just how easy it was to create a class and change the response from a method to return XML or JSON just by changing the content-type from within Fiddler, this means that you can have your methods returned using XML or JSON as well as other formats and then send this data off to whatever system requires data in whatever format it requires - nice!.\nFind more info about WebAPI on the Asp.Net website here.\nSignalR - and the SignalR demo Scott showed are both available on Nuget using the following command from the package manager console:-\nand the demo Stock Sample application\nAzure - Scott talked about the hard work Scott Guthrie and his team had recently put into Azure and showed the latest release of Azure and it all looked pretty impressive stuff, you can create up to 10 websites and have them deployed and hosted on Azure for free. Also available is VM\u0026rsquo;s with different operating systems such as Windows Server and Linux.\nWithin a couple of minutes Scott had created a website and added it to Git and deployed to Azure, then made an update and deployed the change, he then rolled the deployment back to a previous version of the website all in seconds - cool stuff indeed.\nYou can get a free trial of Azure by following this link here.\n.Net 4.5 - Scott talked about Tasks and the new asynchrony possibilites coming with it, showing some nice additions you can use to have truelly asynchronous code - you can read more on this on msdn blogs here.\nFeedback on his Talk Scott is obviously a great speaker and a funny guy too and the content of the talk was excellent, I like demos and the content he showed was pretty neat, VS 2012 looks very promising. I liked how he gives his opinion on things that aren\u0026rsquo;t the Microsoft opinion and will openly slate something he doesn\u0026rsquo;t like. The questions asked by the attendees were very good too and he covered a fair amount of stuff in the time given - hopefully he will return sometime in the future and I hope he and his dad enjoyed their tour of Scotland.\nYou can follow Scott Hanselman on Twitter here.\nI know i missed some of the content out, forgot to take notes, if anyone wants to ask questions or comment on this post please by all means do - I\u0026rsquo;ll update this post If i remember anything I missed.\n","date":"15 July 2012","externalUrl":null,"permalink":"/2012/07/15/scott-hanselmans-scotland-tour-glasgow-talk/","section":"Posts","summary":"","title":"Scott Hanselman's Scotland Tour - Glasgow Talk","type":"posts"},{"content":"","date":"15 July 2012","externalUrl":null,"permalink":"/tags/software-development/","section":"Tags","summary":"","title":"Software-Development","type":"tags"},{"content":"","date":"15 July 2012","externalUrl":null,"permalink":"/tags/touring-scotland/","section":"Tags","summary":"","title":"Touring Scotland","type":"tags"},{"content":"","date":"10 June 2012","externalUrl":null,"permalink":"/tags/asp.net/","section":"Tags","summary":"","title":"Asp.Net","type":"tags"},{"content":"","date":"10 June 2012","externalUrl":null,"permalink":"/tags/book-review/","section":"Tags","summary":"","title":"Book Review","type":"tags"},{"content":" Practical Performance Improving the efficiency of .NET code is written by MVP Jean-Philippe Gouigoux.\nAbout the Author: JP Gouigoux is a MCTS/MCPD Enterprise Architect, and MVP \u0026ldquo;Connected System Developer,\u0026rdquo; with an Engineering degree in Mechanical Systems from the Université de Technologie de Compiègne (France) and a Master of Science in Advanced Automation and Design from Cranfield University (UK). JP works as a software architect, and is a board member at MGDIS, an innovative software company based in Vannes (France). His role includes responsibility for platform architecture for a customer base of ~850, as well as R\u0026amp;D, internal and external training, and expertise in .NET.\nYou can read more on his blog here.\nChapter 1: Profiling Principles: :- Chapter 1 discusses the ideas and principles behind profiling your application and talks about goal setting and making measurable improvements, with real world examples.\nChapter 2: Profiling an Asp.Net Application :- Chapter 2 goes covers the unpredictability with garbage collection, how .net helps us, memory leaks, disk usage, network bandwidth and more.\n**Chapter 3: Sample Application **:- Covers how to set up the example application which is a very bad example of how to write an application which is perfect for pointing out mistakes made and how to go about recognising them and then fixing them.\nChapter 4: Profilers :- This chapter covers how to use the profiler of choice and covers Ants Performance Profiler, JetBrains dotTrace performance, Eqatec Profiler as well as Open Source profilers.\nChapter 5: Profiling the Sample Application - Client Side:- This chapter covers some scenarios where we are shown how to\nprofile the application and study the output, we identify the slow parts of the application aka bottlenecks.\nChapter 6: Profiling the Sample Application - Server Side :- This chapter covers profiling the server-side, the service layer basically and in the sample application layer its a web service. It covers memory profiling, analysing the results and working out where the bottlenecks are occurring.\nChapter 7: Beyond Profling :- This Chapter covers performance analysis without using profilers including verbose logging, duplicate sql calls and even over architecting an application.\nChapter 8: Conclusion :- The last chapter reminds us that everything can be a performance problem, reminds us of the root causes of errors as well as the important part profilers lay in improving application performance.\nMy review is quite brief but the books covers a lot of ground, its well written , very detailed and with the sample application the structure of the chapters make sense. If your interested in learning more about profiling an application to improve its performance then this book is for you.\n","date":"10 June 2012","externalUrl":null,"permalink":"/2012/06/10/book-review-practical-performance-improving-the-efficiency-of-net-code/","section":"Posts","summary":"","title":"Book Review: Practical Performance Improving the efficiency of .NET code","type":"posts"},{"content":"","date":"10 June 2012","externalUrl":null,"permalink":"/tags/performance-monitoring/","section":"Tags","summary":"","title":"Performance Monitoring","type":"tags"},{"content":"What is it? - If your creating a new web project and want it to start off on a good footing using HTML 5, CSS, JQuery, templating, boilerplates and all that\u0026rsquo;s generally good for a new or existing project then this is for you.\nTwitter bootstrap comes with layouts and templates to use all built for you using best practice web standards. Recently it has received a fair bit of attention and there are a large number of people using it out there.\nWhat does it contain? - html templates and boilerplates to get you started, JQuery plugins for a number of things, thumbnails, progress bars, all sorts of navigation aids such as tabs, pagers and label and much, much more.\nYou can learn more and download it from the official site here.\nIf you like twitter bootstrap then try this too:- Initializer\nHow many of you are using it? - have you come across any other useful bootstrap projects? - If so please leave me a comment.\n","date":"6 June 2012","externalUrl":null,"permalink":"/2012/06/06/twitter-bootstrap-what-is-it/","section":"Posts","summary":"","title":"Twitter Bootstrap - What is it?","type":"posts"},{"content":"If your using Elmah then you\u0026rsquo;ll be familiar with most of this blog post, if not then don\u0026rsquo;t worry Elmah stands for Error Logging Modules and Handlers and is used to log unhandled exceptions to the file system, event log, databases or even have it email you the errors.\nElmahR was created by Roberto Vespa (@wasp_twit) and his blog on ElmahR can be found at:- Roberto\u0026rsquo;s blog The basics - ElmahR uses Elmah and SignalR to create a dashboard page where you can monitor any unhandled exceptions in all of the applications you have running which use Elmah, that means if you have 5 websites in production you can have one web page monitor them all.\nTo view an example dashboard running on app harbor.\nElmahR uses SignalR which again you can read more on Scott hanselman\u0026rsquo;s blog Now lets see how we go about setting this up to work with a new MVC 3 project - the same steps apply to adding it to an existing web application.\nCreate a brand new web application, mvc or normal web app works fine. Using Nuget add the following packages to your blank MVC solution, so add Elmah and JQuery. Once both added follow the configurations steps here You can install the Nuget Package:- ","date":"4 June 2012","externalUrl":null,"permalink":"/2012/06/04/elmahr-elmah-fused-with-signalr/","section":"Posts","summary":"","title":"ElmahR - Elmah fused With SignalR","type":"posts"},{"content":"Monday 11th May will see be me 6 months into my new job, my last place I was there for 11 years so it was quite a big thing for me moving on.\nThe new job is going well, I like the way we go about our work, we talk about it, we plan it, then we try as best we can to do proper test driven development.\nLast week saw us starting a new RavenDB based MVC 3 project which will be using Agile techniques using sprints - it will also include some new tools which I havent yet used such as initializer and twitter bootstrapper - more on them to come as I get hands on during the project.\nStarting a new project is always great, although we are under pressure to get this out the door, were luck to not having paying customers demanding software releases as soon as possible, this means we don\u0026rsquo;t cut corners and can produce code which has been thoroughly tested and due to the tools we use we know it\u0026rsquo;s of decent high quality.\nTesting driven development has been quite a mind shift from what I have been used to, in the past I would have written the code and then done some manual testing usually from the front end, so this has been a great leap forward - it\u0026rsquo;s not the be all and end all of course and code can still contain bugs, however, changing code and knowing if you broke something is very nice.\nThe main difference has been using Resharper, style cop and unit tests along with a great build system - all checked in code has the same style and formatting which is rather nice.\n","date":"13 May 2012","externalUrl":null,"permalink":"/2012/05/13/6-months-into-the-job/","section":"Posts","summary":"","title":"6 months into the job","type":"posts"},{"content":"","date":"30 April 2012","externalUrl":null,"permalink":"/tags/mvc3/","section":"Tags","summary":"","title":"MVC3","type":"tags"},{"content":"I always wondered how easy it would be to do a RavenDB CRUD (Create, Read, Update, Delete) example, so lets create a simple MVC application which we can use to create, read, update and delete.\nThe following is some very basic code and yes you guessed it not for production but more of a quick sample to get you on your way with RavenDB and adding, editing and deleting documents.\nWe shall use a product model as our basis for the demo application - let\u0026rsquo;s get started.\nCreate a blank MVC solution to begin with\nUsing Nuget add in the Nuget package called RavenDB\nLets setup RavenDB as we require within the global.asax.cs file as below:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_Start() { AreaRegistration.RegisterAllAreas();\nRegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes);\nStore = new DocumentStore { ConnectionStringName = \u0026ldquo;RavenDB\u0026rdquo;, DefaultDatabase = \u0026ldquo;Products\u0026rdquo; }; Store.Initialize(); } [/sourcecode] Note:- I have added in a DefaultDatabase config value above which means I have created a new Products Raven Database within the RavenDB Management Studio called Products, if you don\u0026rsquo;t do this and just want to use the default database then remove the part DefaultDatabase = \u0026ldquo;Products\u0026rdquo;\nAdd a class into the Models folder called Product as below:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public class Product { public string Id { get; set; } public string CategoryId { get; set; } public string SupplierId { get; set; } public string Name { get; set; } public string Code { get; set; } public decimal StandardCost { get; set; } public decimal ListPrice { get; set; } public int UnitsOnStock { get; set; } public int UnitsOnOrder { get; set; } public bool Discontinued { get; set; } } [/sourcecode]\nNow that we have our Model, let\u0026rsquo;s go ahead and add in a couple of controllers. We will use a base controller when working with our RavenDB project so firstly create a RavenDB Controller, to do this right-click on controllers folder and then select Add then choose Controller, select Empty Controller.\nPaste this code into your RavenController:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public class RavenController : Controller { public IDocumentSession _session { get; private set; }\npublic const int DefaultPage = 1; public const int PageSize = 10;\nprotected override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.IsChildAction) return; _session = MvcApplication.Store.OpenSession(); base.OnActionExecuting(filterContext); }\nprotected override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.IsChildAction) return;\nusing (_session) { if (filterContext.Exception != null) return;\nif (_session != null) _session.SaveChanges(); } }\nprotected int CurrentPage { get { var s = Request.QueryString[\u0026ldquo;page\u0026rdquo;]; int result; if (int.TryParse(s, out result)) return Math.Max(DefaultPage, result); return DefaultPage; } } } [/sourcecode]\nLets now add a ProductController and this time choose, Controller with empty read/write actions as below:- We will start off by adding in some code which I have already written for the methods which we will use on the Products Controller, add them into your code:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public class ProductController : RavenController { // // GET: /Product/\npublic ActionResult Index() { var model = _session.Query() .Paging(CurrentPage, DefaultPage, PageSize) .ToList(); Mapper.Map, List\u0026gt;(model); return View(model); } // // GET: /Product/Details/5 public ActionResult Details(string id) { var model = _session.Load(id); return View(model); } // // GET: /Product/Create public ActionResult Create() { var model = new Product(); return View(model); } // // POST: /Product/Create [HttpPost] public ActionResult Create(Product product) { try { _session.Store(product); return RedirectToAction(\u0026quot;Index\u0026quot;); } catch { return View(); } } // // GET: /Product/Edit/5 public ActionResult Edit(string id) { var model = _session.Load(id); return View(model); } // // POST: /Product/Edit/5 [HttpPost] public ActionResult Edit(Product product) { try { _session.Store(product); return RedirectToAction(\u0026quot;Index\u0026quot;); } catch { return View(); } } // // GET: /Product/Delete/5 public ActionResult Delete(string id) { var model = _session.Load(id); return View(model); } // // POST: /Product/Delete/5 [HttpPost, ActionName(\u0026quot;Delete\u0026quot;)] public ActionResult DeleteConfirmed(string id) { try { _session.Advanced.DatabaseCommands.Delete(id, null); return RedirectToAction(\u0026quot;Index\u0026quot;); } catch { return View(); } } public ActionResult StoreSomeProductInDatabase() { var product = new Product { Name = \u0026quot;Product Name\u0026quot;, CategoryId = \u0026quot;category/1024\u0026quot;, SupplierId = \u0026quot;supplier/16\u0026quot;, Code = \u0026quot;H11050\u0026quot;, StandardCost = 250, ListPrice = 189 }; _session.Store(product); _session.SaveChanges(); //return Content(product.Id); return RedirectToAction(\u0026quot;Index\u0026quot;); } public ActionResult InsertSomeMoreProducts() { for (int i = 0; i (id); return Content(product.Name); } public ActionResult LoadAndUpdateProduct() { Product product = _session.Load(\u0026quot;products/5\u0026quot;); product.ListPrice -= 10; _session.SaveChanges(); return Content(\u0026quot;Product 5 successfully updated\u0026quot;); } public ActionResult DeleteProduct(int id) { Product product = _session.Load(id); if (product == null) return HttpNotFound(\u0026quot;Product {0} does not exist\u0026quot;); _session.Delete(product); _session.SaveChanges(); return Content(string.Format(\u0026quot;Product {0} successfully deleted\u0026quot;, id)); } /// /// Get all the products that are available for sale (discontinued equal to false) ordered by the product’s list price /// /// public ActionResult GetDiscontinuedProducts() { var products = from product in _session.Query() where product.Discontinued == false orderby product.ListPrice select product; return View(products.ToList()); } } [/sourcecode]\nOk so above we added a lot of code but this is good as this is the entire product controller and will allow us to add/edit/delete new products into RavenDB.\nI also added in a couple of methods for creating some test data, and also a method for returning discontinued products, mainly to show how you can go about doing this.\nSome screen shots are below, note they show me using RavenDB Profiler and MiniProfiler:-\nThe code for this article is up on github here. For more on RavenDB have a look at my other RavenDB posts here.\nPlease leave a comment, ask a question, find a bug or anything like that please let me know.\n","date":"30 April 2012","externalUrl":null,"permalink":"/2012/04/30/ravendb-crud-how-to/","section":"Posts","summary":"","title":"RavenDB CRUD - How To","type":"posts"},{"content":"I was wondering how I would go above upgrading from one build version of RavenDB (build 701) to a newer version of RavenDB (build 888) and decided to find out how.\nAs it turns out like most things in RavenDB its very easy! - the following is how to go about upgrading from one version of RavenDB to another.\nNote:- You can do it this way and this is the recomended way here however I wanted to try doing it using importing and exporting the data.\nPlease not that this was done on my local dev machine at work and not done in a production environment, it wont cover replication as well as some other things to think about but its covers the basics.\nI have RavenDB build 701 running from d:\\ravedb-build\\701 which runs on http://localhost:8080, I then added some test documents to the default database.\nI noticed RavenDB had been updated to Build 888 and I began to think how do I get the data out of the old build version and into the new version, having a quick look I soon realised that I need to export data from the 701 build and then import that data into the 888 build.\nHere is how I went about it:-\nI have RavenDB build 701 running from c:\\ravendb\\RavenDB-Build-701\\ and had 50 documents within it - this runs from http://localhost:8080 as seen below:- I then downloaded RavenDB build 888 and ran that from d:\\RavenDB-Build-888\\ which was empty - this runs from http://localhost:8082 as seen below:- Now we can see the differences in the document database as below, Raven 701 build with documents:- And the Raven 888 build with no documents as yet:- To export and import data within RavenDB you use a tool called smuggler, smuggler can be found within the Smuggler folder and the exe is called Raven.Smuggler.exe To export the data from RavenDB Build 700 I went into a command prompt window moved into the location of the smuggler exe and ran the following command -\u0026gt; Raven.Smuggler out http://localhost:8080 dump.raven Ok great, now we have exported our data, time to import it into the newer 888 build of RavenDB, to do this we need to a couple of things, firstly locate the dump.raven file in the 701 build/smuggler folder as below:- And then copy it to somewhere for importing, to make it easy I just copied it to the smuggler folder within the build 888 as below:-\nThen go to the smuggler folder for this build and then use the following command -\u0026gt; Raven.Smuggler in http://localhost:8082 dump.raven\nWe will see Raven ha imported our documents for us:- Lastly lets check in the new build 888 that our documents are there:- And there we go we have moved out documetns from the 701 build to the 888 build, if yo do this you will notice that the index definitions are copied there but havent been built, i.e. youll need to rubuild them manually.\nPlease feel free to leave a comment if you find this useful or have any questions.\n","date":"26 April 2012","externalUrl":null,"permalink":"/2012/04/26/exporting-and-importing-data-with-ravendb/","section":"Posts","summary":"","title":"Exporting and Importing data with RavenDB","type":"posts"},{"content":"Firstly this is a very handy tool that a lot of people are unaware of I certainly was, wish I had known about this when trying to fix ClickOnce issues a few years back.\nToday I ran into an issue where a small windows forms application was throwing weird exceptions upon start-up, I also had the misfortune of Nuget.exe throwing a tantrum and a colleague asked me had I tried using the Fusion log viewer.\nI had a vague idea what it was and remember seeing that mentioned in the event viewer error logs before, but didn\u0026rsquo;t know much more about it.\nThe following is how to go about enabling logging for when Visual Studio starts throwing weird errors upon loading up an application.\nFirst of all click Start, and then type in Fusion Log Viewer into the run box, and then right-click on it and run it as an Administrator. This will bring up the following:- Click settings and here we enable logging and give it a directory path to save the files to. Note that the folder needs to be created first, before it will let you give a path:- Run the offending app-add in and the log files will be write to the folder you specified. Upon investigation of these files they usually have a file per missing or wrong assembly, they give you some insight into whats missing as well as the correct version number the code requires. For more info check out Scott Hanselman\u0026rsquo;s post on this here\nLet me know if this helps you or any questions then please add a comment.\n","date":"3 April 2012","externalUrl":null,"permalink":"/2012/04/03/fusion-log-files-are-your-friend/","section":"Posts","summary":"","title":"Fusion Log Files are your friend","type":"posts"},{"content":" I have been reading up on code katas and think they are a fantastic idea, for those of you who don\u0026rsquo;t know what a code kata is have then don\u0026rsquo;t worry read on.\nA code kata is, as I see it, how to take a requirement, break it down into a list of simple tasks and then write the code to solve those problems, pretty much what a developer would normally do anyway but you could tackle the problem using different coding languages/styles/patterns.\nThe reason I think code katas are interesting is as follows:-\nIt will help you learn to use TDD - Use Test Driven Development to write a test before you write the code, write the test, run it so it fails, then write the code to make the test pass and that\u0026rsquo;s all, do this for each part of the problem your trying to solve. Estimate how long you think it will take to complete, then time yourself and see how long you take to complete the code kata. Help improve your typing skills and learn shortcut keys as you try to be more productive and learn to do the kata quicker each time. Use them at interviews to test your interviewees, see what they come up with and how they think rather than asking them about something they googled the night before the interview. The best way to learn how to code well is to practice, just like a musician needs to practice, good developers practice too. Good examples\nAs a good starting point take a look at Roy Osherove\u0026rsquo;s string calculator - this can be done using a number of different code languages.\nMore code Kata\u0026rsquo;s can be found below:-\ncodingkata.net tdd-kata-2 Let me know if you find any more and I will add to the list.\n","date":"30 March 2012","externalUrl":null,"permalink":"/2012/03/30/code-katas/","section":"Posts","summary":"","title":"Practice Code Kata's And Learn","type":"posts"},{"content":"I have seen a few people ask how to go about accessing the RavenDB studio when they use RavenDB in embedded mode, normally you would tend to use embedded mode when unit testing.\nIn the following article I show you how to get the RavenDB Management Studio working in an MVC 3 application.\nFile, New, MVC 3 Application as below:- Choose whatever you prefer in the next window, I chose Internet Application:- Now using Nuget add in the RavenDB Embedded package:- Now we need to add in some details for the application to talk to RavenDB, lets do that now, so edit the global.asax.cs file to have the following code:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public static IDocumentStore Store { get; set; }\npublic static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }\npublic static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(\u0026quot;{resource}.axd/{*pathInfo}\u0026quot;);\nroutes.MapRoute( \u0026quot;Default\u0026quot;, // Route name \u0026quot;{controller}/{action}/{id}\u0026quot;, // URL with parameters new { controller = \u0026quot;Home\u0026quot;, action = \u0026quot;Index\u0026quot;, id = UrlParameter.Optional } // Parameter defaults ); }\nprotected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes);\nStore = new EmbeddableDocumentStore { DataDirectory = \u0026quot;Data\u0026quot;, UseEmbeddedHttpServer = true }; Store.Initialize(); } [/sourcecode]\nNow in order to be able to view the RavenDB Management Studio we need to locate the file Raven.Studio.xap from the packages folder which was created when we added in the Nuget package above. The packages folder is located in the directory above the folder in which your solution currently resides, once you locate the packages folder locate the RavenDB-Embedded(version number) folder in my case this is RavenDB-Embedded.1.0.701 - the file we are looking for is in the packages\\RavenDB-Embedded.1.0.701\\lib\\net40\\\nCopy the Raven.Studio.xap to the root of your website and now try running your MVC website.\nOnce that loads up now browse to http://localhost:8080 and the RavenDB Studio should load up - and that\u0026rsquo;s you. I hope this helps someone out.\n","date":"27 March 2012","externalUrl":null,"permalink":"/2012/03/27/acessing-ravenddb-studio-when-using-embedded-mode/","section":"Posts","summary":"","title":"Accessing RavenDB Studio when using Embedded Mode","type":"posts"},{"content":"Your application is starting to take shape and you want to be able to quickly see what\u0026rsquo;s going on when using RavenDB.\nStep forward the in-built profiling dll which is very easy to set up and get going with, lets implement that along with MiniProfiler.\nAdd the Nuget package MiniProfiler.RavenDb to your application Add the Raven.Client.MvcIntegration dll which can be found in the Client folder when you download the source for RavenDB Add the following to your global.asa.cs file:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_BeginRequest() { if (Request.IsLocal) { MiniProfiler.Start(); } } [/sourcecode] and then :-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_EndRequest() { MiniProfiler.Stop(); } [/sourcecode]\nAdd the following to your global.asa.cs file in the Application_Start event:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] Raven.Client.MvcIntegration.RavenProfiler.InitializeFor(Store); MvcMiniProfiler.RavenDb.Profiler.AttachTo((DocumentStore)Store); [/sourcecode]\nLastly add the following lines into your _Layout.cshtml file in the Shared folder, under Views:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @MvcMiniProfiler.MiniProfiler.RenderIncludes() @Raven.Client.MvcIntegration.RavenProfiler.CurrentRequestSessions() [/sourcecode]\nThat\u0026rsquo;s it - you have now adedd the built in profiler and MiniProfiler for RavenDB, run your application and you can see that in the top left hand corner you can view the details of whats going on in both profilers:-\nMiniProfiler for RavenDB looks like this:-\nand this:-\nwhile with the RavenDB profiler we see something like this:-\nThe in-built profiler from RavenDB shows us how long the query took, the status, result, Method, Url, Query and Actions as well as the actual request details.\nAll in all both profilers are very hand and very easy to install - go get them installed.\n","date":"26 March 2012","externalUrl":null,"permalink":"/2012/03/26/profiling-your-ravendb-mvc-application/","section":"Posts","summary":"","title":"Profiling your RavenDB MVC application","type":"posts"},{"content":" Here is a list of hints and tips if you\u0026rsquo;re looking for some help with RavenDB.\nSign up for the mailing list where you can see other people\u0026rsquo;s previous questions and answers to problems on the View the Google Group. To make sure RavenDB doesn\u0026rsquo;t clash with routing used in MVC change the global.asa.cs file from:- {controller}/{action}/{id} to {controller}/{action}/{*****id} - Note the * next to the {id} or you can do this.\nIf I choose the Embedded version of RavenDB how do I start the server - to start the RavenDB server locate the RavenDB folder and then look for the server folder and then run Raven.Server.Exe If I install RavenDB using Nuget then what do I do, locate the packages folder which is in the folder one above the solution you\u0026rsquo;ve added it to on the file system, locate the RavenDB folder and then look for the server folder and then run Raven.Server.Exe How do you view the RavenDB Studio - easiest way is to browse to http://localhost:8080, that\u0026rsquo;s the default location of installation when you first run the Raven.Server.Exe Unit testing - how best to go about it - the recommended way to go about this is by using the EmbeddedDocumentStore which is basically all done in memory, you can set it up like this:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] var documentStore = new EmbeddableDocumentStore { DataDirectory = \u0026ldquo;Data\u0026rdquo;, RunInMemory = true, UseEmbeddedHttpServer = true }; [/sourcecode]\nGood RavenDB Samples RavenOverFlow and Racoon Blog If your stuck with something give me a shout I\u0026rsquo;ll see if I can shed some light, I\u0026rsquo;ll be adding more tips as I learn more RavenDB.\n","date":"14 March 2012","externalUrl":null,"permalink":"/2012/03/14/ravendb-hints-and-tips/","section":"Posts","summary":"","title":"RavenDB Hints and Tips","type":"posts"},{"content":" On Feb 28th and 29th of February I attended the Skillsmatter RavenDB course in London with Itamar Syn-Hershko, course details here.\nItamar is a developer on RavenDB and works with Oren aka Ayende from Hibernating Rhinos in Israel and this was a chance to learn from one of the guys who works on RavenDB.\nThe course was a 2 day course covering a wide range of features of RavenDB including:-\nPrinciples of RavenDB Getting started with RavenDB CRUD operations The basics of querying Advanced querying Document based modeling Using Includes for better performance Caching and cache utilization Creating static indexes Map/Reduce Extending RavenDB Replication, Sharding \u0026amp; Scale Full text search The course covers a lot of content and you\u0026rsquo;re given exercises to do which was very useful in finding out how to properly use parts of RavenDB as well as learn how to go about a certain task the recommended way.\nI have come away from the course with a much better understanding of the how and why and that\u0026rsquo;s the main reason why I wanted to go on the course in the first place and I cant wait to get started using RavenDB on our upcoming project.\nFrom asking a number of questions about RavenDB its clear to me that RavenDB has a lot to it, there is a lot to learn about it but it has a number of great features which are very powerful and yet very simple to use, some of the things that stood out for me where the following:-\nSafe by default - this means that it stops the user from writing code that is requesting too much data, and limits the number of requests that each session is allowed to make. Lucene - searching using Lucene provides a fantastic way to search and in Raven we can utilise the power of Lucene to even have full text search capabilities. The course itself cost £1250 and was well worth it - anyone thinking about going on the upcoming courses I would recommend it to them for definite, details on the next RavenDB course they are hosting can be found here.\n","date":"2 March 2012","externalUrl":null,"permalink":"/2012/03/02/skillsmatter-ravendb-course-review/","section":"Posts","summary":"","title":"Skillsmatter RavenDB Course Review","type":"posts"},{"content":" On the 28th and 29th Feb I attended the RavenDB Course at Skillsmatter in London, details on the next RavenDB course they are hosting can be found here.\nSkillsmatter is located in central London and very easily accessible, being a short taxi ride from Liverpool Street train station - upon arrival we were warmly welcome and asked to register and make our food choices for the first day of the course.\nSkillsmatter is quite a fair size and has several training rooms upstairs and an area downstairs for talks and presentations, many which are given by user groups and can hold id say about 70 people (with room for more).\nOur course took part in one of the smaller rooms which was perfect for our course, plenty of power/access points, projecter and whiteboard(s), all well laid out and just what you\u0026rsquo;d expect really.\nThe food at lunch was great and the staff there were very friendly and very helpful, really nice people.\nOn day 2 of the course we went to the pub for lunch and again everyone was very friendly and keen to ask us about how we were enjoying the course and keen to know if we were enjoying out training course.\nFor anyone looking for a great training venue or a place to hold a user group meeting in London then this would be an ideal place to go - the courses they run are great and the list of courses is very good indeed\n","date":"2 March 2012","externalUrl":null,"permalink":"/2012/03/02/skillsmatter-ravendb-course/","section":"Posts","summary":"","title":"Skillsmatter RavenDB Course","type":"posts"},{"content":" In this blog post I will walk through how to host an MVC application which uses RavenDB as the back-end document database hosted up on Appharbor, Appharbor now allows us to host RavenDB in the cloud.\nIn the blog post I am going to make several assumptions, the post itself is more to do with getting an application deployed and running up on AppHarbor using RavenDB as the document database.\nI am assuming you have you have a github account and know how to get your code up onto github, an Appharbor account and know how to deploy your code to github to Appharbor.\nIf you need some help with doing this then check here.\nOk lets create a brand new MVC Web application project, I used MVC 3 application\nAnd then I chose the internet template.\nYou can either download RavenDB from RavenDB.net or use Nuget to get RavenDB. For the demo I just installed it using Nuget as follows, within Visual Studio goto Tools, Library Package Manager and then select Package Manager Console and then type:-\nRavenDB is now downloaded using NuGet and you will find it within the packages folder in the same location on disk as your project solution files, to start RavenDB locat the packages folder and then go to the RavenDB.1.0.616 folder and then the Server folder and double click on Raven.Server.exe as below:-\nBy default RavenDb runs on http://localhost:8080, once started you can view the Raven Studio from within a browser, and you should see something like this:- (if it says Create Sample Data then click on the button to create sample data)\nMoving back to our MVC Application we now need to wire a couple of things up to use RavenDB as below:-\nIn the global.asax add in the following in the Application_Start event:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_Start() { AreaRegistration.RegisterAllAreas();\nRegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); var parser = ConnectionStringParser.FromConnectionStringName(\u0026quot;RavenDB\u0026quot;); parser.Parse(); Store = new DocumentStore { ApiKey = parser.ConnectionStringOptions.ApiKey, Url = parser.ConnectionStringOptions.Url, }.Initialize(); } [/sourcecode]\nAdd in a connection string in your web.config as follows:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n[/sourcecode]\nAll new Controllers will inherit from RavenController which is below:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public class RavenController : Controller { public IDocumentSession RavenSession { get; private set; }\nprotected override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.IsChildAction) return; RavenSession = MvcApplication.Store.OpenSession(); base.OnActionExecuting(filterContext); } protected override void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.IsChildAction) return; using (RavenSession) { if (filterContext.Exception != null) return; if (RavenSession != null) RavenSession.SaveChanges(); } } } [/sourcecode]\nBelow is some example code for some basic CRUD.\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public class AlbumController : RavenController { public ActionResult Index() { var model = this.RavenSession.Query().ToList(); return View(model); }\npublic ActionResult Create() { var model = new Category(); return View(model); } [HttpPost] public ActionResult Create(Album album) { this.RavenSession.Store(album); return RedirectToAction(\u0026quot;Index\u0026quot;); } public ActionResult Edit(string id) { var model = this.RavenSession.Load(id); return View(model); } [HttpPost] public ActionResult Edit(Album album) { this.RavenSession.Store(album); return RedirectToAction(\u0026quot;Index\u0026quot;); } public ViewResult Details(string id) { var model = this.RavenSession.Load(id); return View(model); } public ActionResult Delete(string id) { var model = this.RavenSession.Load(id); return View(model); } [HttpPost, ActionName(\u0026quot;Delete\u0026quot;)] public ActionResult DeleteConfirmed(string id) { this.RavenSession.Advanced.DatabaseCommands.Delete(id, null); return RedirectToAction(\u0026quot;Index\u0026quot;); } } [/sourcecode]\nWithin Appharbor choose RavenDB as an add-on, appharbor will provision you with a connection string if you choose RavenDB as an add-on, wait a couple of seconds and you will be supplied with a connection string for your RavenDB instance in the cloud.\nStep 1\nStep 2\nStep 3\nStep 4 Step 5 This setting is the one you will change to within your web.config, for testing locally use http://localhost:8080 but for deploying to the cloud use the connection string setting supplied to us by Appharbor.\nGetting RavenDB from NuGet means quite a large download, we dont want to have to upload all of this content to github so we can do a nice little thign within our solution, roght click on the entire solution within Visual Studio and choose:-\nThis means our github repository doesnt have to contain all of the Nuget packages and will pull them down for us when building.\nOnce your code is building and running locally send it up to github and use the service hook to deploy to Appharbor.\nIf you come across any build errors then you may have to turn customerrors=\u0026ldquo;Off\u0026rdquo; in your web.config as well as checking the build log on Appharbor to see what went wrong.\nAt this point we should have a working MVC application which is using RavenDB as the back-end document database - sweet.\nIf I missed anything or anyone has any questions or comments please tweet me @gsuttie or leave a comment.\n","date":"21 February 2012","externalUrl":null,"permalink":"/2012/02/21/host-your-ravenddb-based-mvc-app-on-appharbor/","section":"Posts","summary":"","title":"Host your RavendDB based MVC app on Appharbor","type":"posts"},{"content":" Dependency Injection in .Net written by Mark Seesman @ploeh on twitter\nThis book is one of the best books I have read regarding .Net development due to its style - it covers misconceptions, what not to do, and then shows you step by step what to do and why. If you\u0026rsquo;re looking for the definitive guide to dependency injection as a subject matter within the .net world then buy this book - don\u0026rsquo;t bother with anything else.\nMy main reason for reading this book was to basically make sure my understanding of the subject matter wasnt distorted from what dependency injection and IoC is. It\u0026rsquo;s quite easy to good articles on the subject but I wanted a point of reference I can pick up or go to when I need to refresh my memory on the subject.\nI am willing to bet there are a lot of developers who don\u0026rsquo;t actually understand what dependency injection is used for and what it brings to the table.\nPart 1 Putting Dependency injection on he map\nChapter 1 - Covers misconceptions about dependency injection and what its purpose and the benefits if it are. Chapter 2 - Explores a comprehensive example, starting by showing you not to do and then discussing why not and then shows you how it should be done properly. Chapter 3 - Explores Dependency Injection containers and DI containers. Part 2 DI Catalog\nChapter 4 - DI Patterns, including constructor injection, property injection, method injection and ambient context, of which I really only understood one before reading this part of the book. Each is taken in turn and described, has a code example, and discusses the advantages and disadvantages of each. Chapter 5 - DI AntiPatterns, covers all the different wrong ways to do dependency injection some of them named by Mark who admits to having done all of them, having read through this chapter I recognised a few. Chapter 6 - DI Refactorings, how to spot issues and basically ways to fix the code so that its using proper dependency injection methods. Part 3 DIY DI\nChapter 7 - Object Composition, how to correctly use and setup object composition in different types of .net applications. Chapter 8 - Object Lifetime, managing dependency lifetime disposable dependencies and more. Chapter 9 - Interception, cross cutting concerns, AOP and dynamic interceptions. Part 4 DI Containers\nChapter 10 - Covers Castle Windsor. Chapter 11 - Covers StructureMap. Chapter 12 - Covers Spring.Net. Chapter 13 - Covers Autofac. Chapter 14 - Covers Unity. Chapter 15 - Covers MEF. This book was enjoyable to read and is all you need to know about DI in once place - go get it now.\n","date":"14 February 2012","externalUrl":null,"permalink":"/2012/02/14/book-review-dependency-injection-in-net/","section":"Posts","summary":"","title":"Book Review:- Dependency Injection in .Net ","type":"posts"},{"content":"Here I will list all of the useful tools I come across when using RavenDB.\nSo here is the list:-\nRavenDB add on for Glimpse Glimpse RavenDB.\nRavenDB Mini Profiler - more info can be found here and here.\nLinqPad which can be found here is a great tool which you can use to query RavenDB using Linq statements - if you have the correct third party driver installed.\n[youtube http://www.youtube.com/watch?v=XgsPvyk0bjM\u0026amp;rel=0\u0026amp;hl=en_US\u0026amp;feature=player_embedded\u0026amp;version=3]\nTo learn how to get Linqpad to query RavenDB you will find all you need to do here.\nRest-Client which can be found here is extremely handy for testing Restful webservices which RavenDB is.\nClick the downloads tab and then select the following:-\nOnce selected rest-client will fire up, it\u0026rsquo;s very straight forward to use, put in the url to your database where RavenDB is running and then you can use the POST, GET and so on as below:-\nFiddler 2 which can be found here\n\u0026ldquo;Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect traffic, set breakpoints, and \u0026ldquo;fiddle\u0026rdquo; with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language\u0026rdquo;\nWe can use Fiddler to monitor what is going on when we work with RavenDB as well as use it to inject documents on the fly which is shown in the Tekpub video series.\nIf anyone has any other useful tools for working with RavenDB then please let me know and I will add to this list.\n","date":"12 February 2012","externalUrl":null,"permalink":"/2012/02/12/ravendb-useful-tools/","section":"Posts","summary":"","title":"RavenDB Useful Tools","type":"posts"},{"content":"RavenDB is fast becoming pretty popular and 2 of the best resources I find for learning is TekPub and Pluralsight, these sites are for developer training and require you to pay for them.\nBoth sites offer subscriptions but Tekpub also offers the ability to pay for a single course such as the RavenDB course, which is a nice addition.\nTekpub Course Details:- Tekpub RavenDB course \u0026ldquo;*In this production, Oren Eini walks Rob through the various aspects of RavenDB - from the basics through to advanced Administrative Tasks. Along the way you\u0026rsquo;ll learn how to query with the core Lucene engine, how to index your documents for searches, backups, sharding, replication to SQL Server, and how to plug all of this in to an ASP.NET MVC application.\nThis series is In Production which means we are actively recording and producing content for it. Currently we have 10-12 episodes planned.\u0026rdquo;*\nPluralsight Course Details:- Pluralsight RavenDB course I have watched both courses and they are both superb and I encourage you to check them both out.\n","date":"12 February 2012","externalUrl":null,"permalink":"/2012/02/12/ravendb-video-tutorials/","section":"Posts","summary":"","title":"RavenDB Video Tutorials","type":"posts"},{"content":"","date":"12 February 2012","externalUrl":null,"permalink":"/categories/tekpub/","section":"Categories","summary":"","title":"Tekpub","type":"categories"},{"content":"Adding RavenDB to an MVC 3 application is very straightforward - in this post I will add RavenDB via Nuget and it will run RavenDB in embedded mode.\nStart Visual Studio 2010 and Add a new MVC 3 Application, choose Internet Application from the project template option. This will create our new app ready to add RavenDB to. Ok now to Add RavenDB into your application lets use Nuget to add in the RavenDB Embedded package, go to the Tools Menu and then select Library Package Manager and then Manage Nuget Packages - search for RavenDB Embedded as seen below:- Click install and wait a little, it\u0026rsquo;s a larger package compared to most, also accept the license agreement.\nThat\u0026rsquo;s it RavenDB has been added to our MVC 3 application, in the next blog post we will make use of RavenDB in our application. ","date":"5 February 2012","externalUrl":null,"permalink":"/2012/02/05/using-ravendb-in-a-mvc-application/","section":"Posts","summary":"","title":"Adding RavenDB to an MVC application","type":"posts"},{"content":"I moved jobs a little under 3 months ago and I know work for Maclean Electrical as a developer in a small team.\nAt Maclean\u0026rsquo;s I work in an Agile development team working on a number of projects which we use to drive the business forward and make the company more productive.\nOur code base is a made of a number of different projects including some windows service projects, some MVC web apps, a Windows Forms application and even an ASP.NET 2 web app.\nThe development team strive for a number of goals a couple of which are below as below:-\nTest Driven Development - write a failing test, write the code tp make the test pass, refactor your code. Code Coverage - the code you write should meet a high level of test code coverage, each project had individual levels but should be around 70% as a minimum. Refactor where possible - refactoring the code you come across so that you always leave it better than you found it where possible. If you break the build, its your responsibility to fix it, yeah it\u0026rsquo;s normally me I know. We have a very nice setup at work using TeamCity as our build server and we have ported over a few things as Nuget packages to make life easier going forward - I can push a deployment of the code which runs all the unit tests from the build server to deployment or the test environment in one click.\nAt work we are about to start looking at using RavenDB and the developers are all being sent on a course in London for training on a 2 day course.\nWorking for a company who listens to their developers and has fantastic communication with everyone in the team is always good in my book. The developer\u0026rsquo;s in the team often chat about what technologies are new and who\u0026rsquo;s looking at what and what they have thought about it. We don\u0026rsquo;t stick with what we know and are always looking at new technology as a way of sharpening our skills which I love to do anyway.\nI guess we have a team of passionate developers who communicate well and who really enjoy their jobs - if you enjoy your job it makes a huge difference. If you want a book on a particular subject then it\u0026rsquo;s ordered, if you come across a tool that you find helpful its bought.\nDo you enjoy your job as much as I do? - I do hope so.\n","date":"5 February 2012","externalUrl":null,"permalink":"/2012/02/05/i-feel-fortunate-where-i-work/","section":"Posts","summary":"","title":"I feel fortunate where I work","type":"posts"},{"content":"Deploy your MVC 3 application to the cloud and have it hosted for free, you can even get 20MB SQL Server for free should your app use a SQL database backend.\nIf your unfamiliar with Appharbor let me introduce you.\n\u0026ldquo;AppHarbor is a fully hosted .NET Platform as a Service. Appharbor can deploy and scale any standard .NET application.\u0026rdquo;\nDeploy and host host your application for free using GitHub to publish the content to Appharbor - couldnt be easier and ultra fast, and did I mention its free?\nBasically build your application locally - put it up onto Github, setup the Github service hook ( cut and paste 2 lines) and job done - AppHarbor will build your code and deploy it and host it in the cloud for you!\nThe following are the steps to deploying a blank MVC 3 project to Appharbor using Git and Github, if your unfamiliar with Git and Github then its worth spending some time reading up on both, Git is very straight forward to get going and GitHub is the site to host your git content.\nI will assume you have git installed and setup a local repository on your machine - let\u0026rsquo;s get started.\nOpen Up Visual Studio 2010 and create an empty MVC 3 Application, I chose an Internet Application and didn\u0026rsquo;t select to add a Unit Test Project. I changed the text on the main page that will do for now. Then I copied the contents of the solution and the folder to my Github local repository folder. Go to Github and create yourself an account - this is free and allows you to put up your code - very useful for open source projects or you can use it to publish to Appharbor like we are about to do. Create a new Repository on GitHub as below and GitHub will show you the steps to adding the code to your repository on GitHub, similar to the screen shot below. Go ahead and follow these steps to add your content onto GitHub.\nNow we want to add a .gitignore file into the git repository so that when we deploy to AppHarbor it builds without any issues. Create a .gitignore file and add this into your repository - the contents of my .gitignore file was as follows:- [Bb]in [Oo]bj *.suo *.user\nAt this point our source code is up on GitHub and now we want to deploy it from GitHub to AppHarbor - this step is very easy indeed and makes everything worthwhile and definitely worth any effort in having to learn git and setup accounts on both GitHub and AppHarbor. Log onto your AppHarbor Account and then create a new application as below:- Now click on the Build URL link on the blue part of the screen shot below:- This copies the url you need to paste into GitHub in order for it to deploy your code to AppHarbor, firstly paste this link from your clipboard into notepad.\nHere is the url for a potential app:- Ok now go back to GitHub and go to the admin link once you are on the page displaying your GitHub repository. Click on Service Hooks on the left hand side and then select AppHarbor - this is where you need to be careful to paste in the Slug from the notepad link we have and then paste in the authorization code into the correct part within GitHub as below:- Conclusion AppHarbor is really cool and very handy indeed, after deploying your first app you can deploy straight from GitHub just by pushing up file changes. Its superb, also comes with a host of add-ons, please go check it out now.\n","date":"1 February 2012","externalUrl":null,"permalink":"/2012/02/01/host-your-mvc-app-in-the-cloud-with-appharbor/","section":"Posts","summary":"","title":"Host your MVC app in the Cloud with AppHarbor","type":"posts"},{"content":"Today I went for a run and having never been to Glencoe in Scotland I decided to go for a drive and see the stunning scenery for myself - unfortunately my pics don\u0026rsquo;t do the place justice, but here are a few of the ones that turned out some what ok. If you ever get the chance to visit then you should take a run up there its awesome - Scotland has some stunning scenery.\nIn 2012 I plan to see more of the beautiful country I live in - hope you enjoy.\n","date":"28 January 2012","externalUrl":null,"permalink":"/2012/01/28/glencoe-scotland-road-trip/","section":"Posts","summary":"","title":"Glencoe Scotland - road trip","type":"posts"},{"content":"","date":"28 January 2012","externalUrl":null,"permalink":"/categories/photos/","section":"Categories","summary":"","title":"Photos","type":"categories"},{"content":"During the last couple of months I have been working with MVC 3 daily and I have used Nuget packages and tools which have helped in a number of areas, in this post I will give a shout out to these tools which help make MVC 3 a pleasure to work with. For the most part Nuget packages can be found for these tools so you can add them very easily and get going quickly.\nRouting\nAttribute routing for MVC - Remove any routing concerns/issues and start using this now. T4MVC helps make your MVC code much more maintainable, enough said. Page Performace\nChirpy is an open source Visual Studio Add In For Handling JavaScript, Css, DotLess, and T4 Files, which in essence improves page performance. Cassette - Cassette automatically sorts, concatenates, minifies, caches and versions all your JavaScript, CoffeeScript, CSS, LESS and HTML templates. Profiling\nMvc Mini Profiler - A simple but effective mini-profiler for ASP.NET MVC and ASP.NET. Glimpse - What Firebug is for the client, Glimpse does for the server\u0026hellip; in other words, a client side Glimpse into whats going on in your server. Error Logging\nELMAH - ELMAH (Error Logging Modules and Handlers) is an application wide error logging facility that is completely pluggable. It can be dynamically added to a running ASP.NET web application, or even all ASP.NET web applications on a machine, without any need for re-compilation or re-deployment All MVC posts\nAll of my MVC blog posts can be found here. Conclusion\nMVC is great to work with on its own but these tools can only enhance the development process. Please leave feedback or comments, and also let me know if I have missed out on any tools which I can add to this list.\n","date":"25 January 2012","externalUrl":null,"permalink":"/2012/01/25/real-world-mvc-3-development/","section":"Posts","summary":"","title":"Real World MVC 3 Development","type":"posts"},{"content":"If you\u0026rsquo;re using MVC and you\u0026rsquo;re looking for some in-depth information on basically whats going on when you run the code then you should take a look at Miniprofiler (from the guys at StackOverflow) or Glimpse.\nMiniprofiler can be added in to your solution and can give you all sorts of really useful information such as which view is currently being rendered and from which method in the controller (which is not always obvious). this can be quite a time saver if you\u0026rsquo;re not used to the codebase and just want to quickly find the ActionResult which has been hit.\nTo Add MiniProfiler to an MVC application install it using the Nuget Package Manager console. (you need to use the console sometimes if the package uses a Powershell script)\nOnce added via Nuget browse to your global.asax file and add in the following 2 methods:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_BeginRequest() { if (Request.IsLocal) { MiniProfiler.Start(); } } [/sourcecode]\nand then :-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] protected void Application_EndRequest() { MiniProfiler.Stop(); } [/sourcecode]\nRebuild your code and run your application and you\u0026rsquo;ll see info being displayed by MiniProfiler in the top left hand corner as follows:-\nGlimpse is a JavaScript plug-in which informs you of information such as Route Debugging which is a superb feature. Add Glimpse via Nuget and then browse to your site and add /glimpse.axd to the end of the url from your application:-\nPres enter and you\u0026rsquo;ll be taken to this screen, this nice bit here is you can drag the \u0026lsquo;Turn Glimpse On\u0026rsquo; and \u0026lsquo;Turn Glimpse Off\u0026rsquo; to your fav bar and just click them to do as it says on your site. (This is all done in JavaScript and has very little overhead)\nAfter clicking on \u0026lsquo;Turn Glimpse On\u0026rsquo; we see the little eyeball bottom right of the screen:-\nWhen clicking on that you\u0026rsquo;ll see something like the following:-\nHere we can drill into all sorts of information such as:-\nWhat route has been called Which view has been rendered Time spent to render the page and timings for each part Config on the server Again go get them and you\u0026rsquo;ll have them up and running very quickly and benefit from the features they come with.\n","date":"15 January 2012","externalUrl":null,"permalink":"/2012/01/15/mvc-get-some-help/","section":"Posts","summary":"","title":"MVC - get some help  ","type":"posts"},{"content":"AttributeRouting is a fantastic open source Nuget package which allows you to specify routes using attributes on your MVC controllers and actions. We use it in all of our MVC projects at work and I highly recommended it, saves you having to map all y.\nThe QuickStart Guide can be found here.\nMain reasons to use AttributeRouting\n•Decorate your actions with GET, POST, PUT, DELETE, and verb agnostic attributes. •Map multiple routes to a single action, ordering them with an Order property. •Specify route defaults and constraints inline and also using attributes. •Specify optional params inline with a token before or after the parameter name. •Specify the route name for supporting named routes. •Define MVC areas on a controller or base controller. •Group or nest your routes together using route prefixes applied to a controller or base controller. •Support legacy urls. •Set the precedence of routes among the routes defined for an action, within a controller, and among controllers and base controllers. •Generate lowercase outbound urls automatically. •Define your own custom route conventions and apply them on a controller to generate the routes for actions within the controller without boilerplate attributes (think RESTful style). •Debug your routes using a supplied HttpHandler.\nGo check it out you wont be disappointed.\n","date":"12 January 2012","externalUrl":null,"permalink":"/2012/01/12/attributerouting-for-mvc/","section":"Posts","summary":"","title":"AttributeRouting for MVC","type":"posts"},{"content":"Chirpy is an open source Visual Studio Add In For Handling JavaScript, Css, DotLess, and T4 Files.\nBetter Page Performance When you validate your site against YSlow it gives you reports on why your webpages may take some time to render in the browser - Chirpy can help with this big time by minifying script files like javascript, css and more so that there are less requests made to the server on each page request - better page performance is always good.\nThe full list of what Chirpy can do can be found here.\n","date":"11 January 2012","externalUrl":null,"permalink":"/2012/01/11/chirpy-for-mvc/","section":"Posts","summary":"","title":"Chirpy for MVC","type":"posts"},{"content":"If your using MVC then please at least take a look at T4MVC or better still add it to your project from Nuget here T4MVC from Nuget - It\u0026rsquo;s written by David Ebbo who works for Microsoft and works on Nuget as well as a lot of other cool stuff.\nWhat is T4MVC? - the following is lifted from the documentation:-\n\u0026ldquo;T4MVC is a T4 template for ASP.NET MVC apps that creates strongly typed helpers that eliminate the use of literal strings when referring the controllers, actions and views. It helps make your MVC code much more maintainable, and gives you intellisense where you normally would not have any.\u0026rdquo;\nSome links for more info:-\nDavid\u0026rsquo;s Blog posts on T4MVC can be found here:- Posts T4MVC Introduction Video here. An example again lifted from the site would be:-\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @Html.RenderPartial(\u0026ldquo;DinnerForm\u0026rdquo;); [/sourcecode]\nNow becomes\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @Html.RenderPartial(MVC.Dinners.Views.DinnerForm); [/sourcecode]\nand you get Intellisense for free which is nice.\nAlso this\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @Html.ActionLink(\u0026ldquo;Delete Dinner\u0026rdquo;, \u0026ldquo;Delete\u0026rdquo;, \u0026ldquo;Dinners\u0026rdquo;, new { id = Model.DinnerID }, null) [/sourcecode]\nbecomes this\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @Html.ActionLink(\u0026ldquo;Delete Dinner\u0026rdquo;, MVC.Dinners.Delete(Model.DinnerID)) [/sourcecode]\nThe beauty of this needs to be tried to ge the full extent of whats available but its really easy to add in and change your links in a flash.\nBy the way it even works for images so heres an example using the aspx syntax.\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] [/sourcecode]\nbecomes\n[sourcecode language=\u0026ldquo;csharp\u0026rdquo;] [/sourcecode]\nT4MVC is very handy indeed and you should definitely check this out.\n","date":"10 January 2012","externalUrl":null,"permalink":"/2012/01/10/t4mvc-for-mvc/","section":"Posts","summary":"","title":"T4MVC for MVC","type":"posts"},{"content":"Note:- This will be an on going blog post.\nMy plan is as follows:-\nFirstly I plan to write a lot more code at home, to me that\u0026rsquo;s definitely the best way to learn. My first goal this year is to get better at writing unit tests/tdd and learning how to use mocking properly.\nJanuary: Watch all of John Skeets Tekpub series on C#, go through Roy Osherove\u0026rsquo;s Unit Testing Kata\u0026rsquo;s and watch the @tekpub and @pluralsight videos on Unit Testing.\nHow did I fare in January?:\nhaving set out my goals above for January I would say I have learned a lot when it comes to TDD, still got a lot to learn especially when it comes to mocking. I have watched the first 6 of the 25 video series so still got a lot to watch and learn about. The detail in this particular series is exceptional and if you want to learn c# in detail then this is for you. I bought the following book on Dependency Injection :- February: Get up close and personal with RavenDB.\nMarch: Time to start an app using RavenDB.\nI shall update as we go but this is a good start. Let me know if you come across something you think is worth learning.\n","date":"5 January 2012","externalUrl":null,"permalink":"/2012/01/05/steps-for-improving-my-development-skills-in-2012-jan-feb/","section":"Posts","summary":"","title":"Steps for improving my development skills in 2012","type":"posts"},{"content":"In order to be more productive as a developer I have came across some invaluable tips and tools through the years so here they are:-\nSpeed up your machine how to. Why have coding standards if you dont do anything about enforcing them Using Resharper. Deploy more often to production. ","date":"2 January 2012","externalUrl":null,"permalink":"/2012/01/02/be-more-productive-in-2012/","section":"Posts","summary":"","title":"Be more productive in 2012","type":"posts"},{"content":"As simple as it sounds deploying to production can be a complete nightmare, however I reckon it should be done fairly regularly, if you don\u0026rsquo;t want to deploy to production then there must be valid reason for this - yeah I hear your cry.\nNot wanting to deploy to production really means that either you don\u0026rsquo;t trust your deployment process to production, it takes too long or something else makes you wanna run in the other direction when someone mentions the need to deploy to production.\nDeploying to production on a regular basis might seem like a bad idea but really I don\u0026rsquo;t think it should ever be - you may only deploy to production when a change has been made or a release is ready to go out and that\u0026rsquo;s a fair point, however deploying even without change can and should in my opinion be welcomed.\nA question for me would be can everyone in the team working on the project be able to deploy to production, does your team fully understand whats involved, if not should they?\nThese are just things to consider but in my opinion no matter how hard a release to production is - the more you do it the less of an uphill struggle it will become and perhaps a different solution will appear.\nComments welcome.\n","date":"2 January 2012","externalUrl":null,"permalink":"/2012/01/02/deploy-more-often/","section":"Posts","summary":"","title":"Deploy more often","type":"posts"},{"content":"Simple question but how many companies have a coding standards guideline document and do next to nothing about enforcing it?, simple use Resharper.\nIf you\u0026rsquo;re a .Net Developer and you\u0026rsquo;re not using Resharper then I really believe you\u0026rsquo;re not as productive as you could be - using Resharper with StyleCop you can have share and therefore enforce coding standards which ensures that everyone is writing code to a set of rules which can be defined and then shared across the team.\nOne of my favourite things about Resharper is the huge improvements you can make to an existing code base, open most projects up and a vast array of code improvements are shown up, such as unused code, unused variables and a lot more.\nFinding issues with code, code improvements could not be simpler and once you have defined your coding standards you can click on any file, project or solution and get Resharper to clean your code base against your defined standards.\nStarting from scratch on a project or even a class file is even better, as you type improvements are suggested, adding using statements are a matter of pressing Ctrl and Enter. Adding shortcut combinations, changing existing keyboard shortcuts, removing unused code and many more improvements are just a 2 key combination away.\nI was so impressed by Resharper I bought myself a personal licence and the latest version is superb.\nSelling this to your manager/team leader/boss should be simple, it doesn\u0026rsquo;t cost the earth and I guarantee it will make you write cleaner, easier to follow, more professional code for the entire team against your companies coding standards which will actually be inforced.\nIntegrate StyleCop and even indentations, line spaces between methods and so on can all be validated so that everyone in the team\u0026rsquo;s code is standardised.\nDo yourself a favour and go get Resharper\n","date":"2 January 2012","externalUrl":null,"permalink":"/2012/01/02/why-having-coding-standards-if-you-dont-do-anything-about-enforcing-them/","section":"Posts","summary":"","title":"Why having coding standards if you dont do anything about enforcing them?","type":"posts"},{"content":"Recently a friend was complaining that her laptop was running really slowly and I asked her to check the memory within task manager - like in the screen shot of my pc below:-\nThe problem in her case was that her laptop was using 66% of the total memory available even when it was idle, I mentioned that she sound check how much memory her laptop had and to perhaps get more memory if required - she wasnt sure how to do this so here is a step by step guide to checking what memory your pc had and what it can take:-\nGo to the Crucial website and look for the System Scanner, download this and then run it, it will scan your pc and give you a whole heap of great info on your pc/laptop memory including how many slots and what chips you currently have. The following video explains how to use the system scanner [youtube http://www.youtube.com/watch?v=jG96c5xRdfc\u0026amp;rel=0\u0026amp;hl=en_US\u0026amp;feature=player_embedded\u0026amp;version=3] Note:- The tool even shows you compatible Solid State Drives (SSD) for your pc.\nI highly recommend even trying the scanner to see just how much memory your pc has and what it can go up to, more memory can make a huge difference.\n","date":"2 January 2012","externalUrl":null,"permalink":"/2012/01/02/tip-for-speeding-up-your-pc-or-laptop/","section":"Posts","summary":"","title":"Tip for speeding up your pc or laptop","type":"posts"},{"content":"In 2011 I started blogging and this post will be a review of the year which is about to come to an end.\nAt the start of 2011 I was working on a windows mobile 6.5 project up until around April, which was the first time I have even looked at any windows mobile development - the project itself was a good one and I enjoyed working on it - my overall feeling from it though was that windows mobile 6.5 was old and clunky and things seem to have gotten a lot better with the latest version including the mango release.\nFrom April to August I was working for Barclay\u0026rsquo;s Stockbrokers in Glasgow working on moving their entire code base from windows server 2003 to server 2008 and re-writing the way al off this software was built and packaged using MSBuild and WIX.\nFrom August to the start of November I was back at base which was Pulsion Technology working on various projects.\nIn mid November I resigned from Pulsion and took a job at my new employers Maclean Electrical in Cumbernauld, where I am now working. Moving jobs after 11 years was a little daunting at first but I am so so glad I made the move.\nDuring the year I have purchased Tekpub and I also have a subscription to Pluralsight training which are both fantastic - I am also a Friend of Redgate and have been looking at their most recent releases which look very interesting indeed.\nIn 2012 I hope to travel to one of the big conferences at some point as I didn\u0026rsquo;t travel abroad this year - I also hope to get stuck into RavenDB soon and learn more about Agile and see what else 2012 brings with it.\nThats it folks enjoy 2012!\n","date":"26 December 2011","externalUrl":null,"permalink":"/2011/12/26/my-review-of-2011/","section":"Posts","summary":"","title":"My Review of 2011","type":"posts"},{"content":"Over the last 2-3 weeks I was looking at implementing breadcrumbs on an MVC 3 website for navigation purposes and I highly recommend using the mvcsitemap provider written by Maarten Balliauw which can be found here and you can read more about his Nuget Package for it Nuget Package.\nTo try out the MvcSiteMap follow these steps:-\nStart Visual Studio and choose a new MVC 3 application. Once that\u0026rsquo;s done open up the Nuget Package Manager Console and add the Nuget package called mvcsitemapprovider. Now we have added the Nuget package you will see that a file called Mvc.sitemap has been added to the root of the solution. Now we want to add some content to the MVC.sitemap file, lets add some content now :- Ok so now we need to add in a ContactUsController and add the extra 2 ActionResults Last but not least in order to show the breadcrumbs on a webpage just add the following code to your view Now we have the most basic of breadcrumbs working off of our Mvc.sitemap xml file, The next blog entry will cover more complex sitemap which uses a dynamic node provider to generate the nodes dynamically when first called - enjoy.\n","date":"14 December 2011","externalUrl":null,"permalink":"/2011/12/14/using-mvcsitemap-for-generating-website-breadcrumbs-part-1/","section":"Posts","summary":"","title":"Using MvcSitemap -  for generating website breadcrumbs - Part 1","type":"posts"},{"content":"Good processes are something that I take a lot of interest in and something that I always like to read about to see how other people implement thei.\nThe following is a list of practices we currently follow:-\nVisual Studio 2010 runs with ReSharper 6 which also uses StyleCop with certain rules by which the code written must adhere to before Subversion will allow us to commit the code - now this is really nice indeed, it means that everyone who checks code in must use an issue number for the issue tracker we use.\nUnit Tests are ran when a build is triggered within TeamCity and the code coverage must reach a certain level on a project or the build fails - this also highlights areas that the code hasn\u0026rsquo;t got unit tests for and helps to promote the idea of writing unit tests, also for any new code as well as when you write code to fix a bug.\nHaving around 2000 unit tests run quickly and the code built in around 5 minutes is just sweet.\nWho knows what will change in the future but for now I like the way things are done.\n","date":"3 December 2011","externalUrl":null,"permalink":"/2011/12/03/dev-and-build-process/","section":"Posts","summary":"","title":"Dev and Build process","type":"posts"},{"content":"This is the first post in a series I will be doing on learning RavenDB, RavenDB is a NoSQL document database written by Ayende Rahien (@ayende on twitter) The concept is quite new to me and so I have spent a few hours looking at RavenDB.\nFor those of you who are new to RavenDB and the whole NoSql thing take a look here:-\nGetting Started in RavenDB:- Getting Started in RavenDB Pluralsight webcast on RavenDB:- Free Pluralsight webcast on RavenDB When should you use RavenDB?:- Why use RavenDB When you should not use RavenDB?:- When you should not More on RavenDB here:- More posts on RavenDB Updated: This link is to a blog by one of the devs who works on RavenDB.\n","date":"27 November 2011","externalUrl":null,"permalink":"/2011/11/27/learning-ravendb/","section":"Posts","summary":"","title":"Learning RavenDB","type":"posts"},{"content":"Calling a udf from SQL Query Analyser SELECT dbo.udf_calculate_working_days(\u0026lsquo;01/01/2000\u0026rsquo;, \u0026lsquo;01/01/2001\u0026rsquo;)\nCalling a Table valued function from SQL Query Analyser SELECT * from dbo.udf_calculate_working_days(\u0026lsquo;01/01/2000\u0026rsquo;, \u0026lsquo;01/01/2001\u0026rsquo;)\nGet the number of days between 2 dates SELECT DATEDIFF(dd, \u0026lsquo;01/01/2009\u0026rsquo; , \u0026lsquo;01/01/2010\u0026rsquo;) as \u0026rsquo;total_days\u0026rsquo;\nSQL for when checking against todays date SELECT DATEADD(dd, DATEDIFF(dd,0,@order_date), 0\n","date":"12 November 2011","externalUrl":null,"permalink":"/2011/11/12/pro-tip-sql-tips/","section":"Posts","summary":"","title":"Pro Tip : SQL Tips","type":"posts"},{"content":"Whilst watching a @tekpub video about Roy Osherove\u0026rsquo;s TDD Masterclass I saw a tip he gave where he showed how to create a ReSharper Live Template to save time and be more productive, although this was related to TDD you can create your own user template for anything you like, this tip is for creating NUnit test methods but the main thing is the idea, here is what he showed:-\n1 - Install ReSharper. 2 - Then from within Visual Studio, select ReSharper\u0026ndash;\u0026gt; Live Templates. 3 - Check the box next to User Templates and then, click the Add icon or select New Template. 4 - Give the Template a name and then enter content as the below screenshot:-\nOnce this is saved if you back to your class and type test and then hit the tab key you\u0026rsquo;ll see the empty [Test] method generated and it asks you to supply the name.\nTry this out and you will soon see the potential time savers you can come up with.\n","date":"12 November 2011","externalUrl":null,"permalink":"/2011/11/12/pro-tip-being-more-productive-with-resharper-live-templates/","section":"Posts","summary":"","title":"Pro Tip: Being more productive with ReSharper Live Templates","type":"posts"},{"content":"Aspect Oriented Programming (AOP) was something that I had heard of but never really looked into beyond a quick dip into it and then moved on - I admit I didn\u0026rsquo;t think it was something I would use as it looked quite complex when I skimmed over it.\nKendall Miller @kendallmiller showed me a demo of Gibraltar which makes use of AOP and PostSharp and I was hooked when I saw what those guys were up to. To Learn more about Gibraltar Software click on the image below:-\nTo get started with PostSharp download the demo from their site by clicking on the image below:-\nyou can download the demo from their site and it has a really nice integration with Visual Studio 2010 which takes you through creating aspects and then how to apply them to your code.\nAspects can be created for a number of things such as debugging, tracing, logging and much more, the tutorials within the Visual Studio integration show you how to check whats being applied where with a very cool Aspect browser.\nThat\u0026rsquo;s it for now - more to follow when I get deeper into using AOP.\n","date":"4 November 2011","externalUrl":null,"permalink":"/2011/11/04/aop-intro-using-postsharp/","section":"Posts","summary":"","title":"AOP intro using PostSharp","type":"posts"},{"content":"Having be doing some MVC 3 work recently I have used the following tools and I highly recommend every one of them if you are doing this type of work.\nMvc Mini Profiler - A simple but effective mini-profiler for ASP.NET MVC and ASP.NET. Glimpse - What Firebug is for the client, Glimpse does for the server\u0026hellip; in other words, a client side Glimpse into whats going on in your server. Cassette - Cassette automatically sorts, concatenates, minifies, caches and versions all your JavaScript, CoffeeScript, CSS, LESS and HTML templates. ELMAH - ELMAH (Error Logging Modules and Handlers) is an application-wide error logging facility that is completely pluggable. It can be dynamically added to a running ASP.NET web application, or even all ASP.NET web applications on a machine, without any need for re-compilation or re-deployment Please take a little bit of time to look at each of these tools - they are all free and are fantastic.\n","date":"30 October 2011","externalUrl":null,"permalink":"/2011/10/30/mvc-3-useful-tools/","section":"Posts","summary":"","title":"MVC 3 useful Tools","type":"posts"},{"content":"I have been upgrading an MVC 2 web application (which used the web form view) to an MVC 3 (razor syntax) application and have noted a few things I came across and if this can help anyone then thats always nice. I havent went into the dll changes and any web.config changes required to update the app from MVC 2 to MVC 3 - this is more a post about syntax changes I ran into.\nThe old code looked like this:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\n[/sourcecode]\nwith razor you may see the html being displayed rather than the correct code, to fix this we need to use the Html.Raw() helper which takes a string as follows:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] @Html.Raw(Html.Pager((IPagination)Model).ToString()) [/sourcecode]\nAnother issue I ran into was that Razor automatically encodes all HTMl and this means that to get my HtmlHelpers working I had t make a very minor change. Thw webform syntax would have been as follows:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public static string DatePicker(this HtmlHelper helper, string name) { return helper.DatePicker(name, null); }\npublic static string DatePicker(this HtmlHelper helper, string name, string imageUrl) { return helper.DatePicker(name, imageUrl, null); }\npublic static string DatePicker(this HtmlHelper helper, string name, object date) { return helper.DatePicker(name, \u0026ldquo;/Content/Images/calendar.gif\u0026rdquo;, date); }\npublic static string DatePicker(this HtmlHelper helper, string name, string imageUrl, object date) { var html = new StringBuilder(); \u0026hellip;. \u0026hellip;. \u0026hellip;. return html.ToString(); } [/sourcecode]\nWith Razor syntax this changes to return MvcHtmlString as below:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;] public static MvcHtmlString DatePicker(this HtmlHelper helper, string name) { return helper.DatePicker(name, null); }\npublic static MvcHtmlString DatePicker(this HtmlHelper helper, string name, string imageUrl) { return helper.DatePicker(name, imageUrl, null); }\npublic static MvcHtmlString DatePicker(this HtmlHelper helper, string name, object date) { return helper.DatePicker(name, \u0026ldquo;/Content/Images/calendar.gif\u0026rdquo;, date); }\npublic static MvcHtmlString DatePicker(this HtmlHelper helper, string name, string imageUrl, object date) { var html = new StringBuilder(); \u0026hellip;. \u0026hellip;. \u0026hellip;. return MvcHtmlString.Create(html.ToString()); } [/sourcecode]\nHopefully this may come in handy for someone who comes across these items that require changing - I\u0026rsquo;ll post more if I come across them.\n","date":"24 October 2011","externalUrl":null,"permalink":"/2011/10/24/converting-mvc2-app-to-mvc3-webform-to-razor-syntax/","section":"Posts","summary":"","title":"Converting MVC2 app to MVC3 (webform to Razor syntax)","type":"posts"},{"content":"Through the years I have bought numerous books, I just love to read and here are just some of my favourite books, in no particular order.\nTest-Driven Development in Microsoft .NET Azure In Action Asp.Net 4 and VS 2010 Web Development OverView Programming Entity Framework Improving .Net Application Performance and Security Performance Tuning and Optimizing Asp.Net Applications Professional Asp.Net Design Patterns Pro C# 2010 and the .Net 4 Platform Code Complete Clean Code The Clean Coder ","date":"18 October 2011","externalUrl":null,"permalink":"/2011/10/18/book-shelve-list-of-my-more-recent-books/","section":"Posts","summary":"","title":"Book Shelve - list of my more recent books ","type":"posts"},{"content":"This past week I have been looking at the exchange web service API and how we can inspect Emails within Exchange. If you need to read emails from an inbox then you can very easily and quickly by using the exchange web service API which you can download from here.\nI was looking for a way to check a folder for emails and then look at the xml file attachments and then do some work on the contents of the attached files - once done with the contents then mark the email as read and then move the email to an archived folder.\nIn the following example lets assume we will have emails which will be directed into a folder we specify using a rule, the name of the folder will be stored in the web.config file so we can make this configurable at any point, for arguments sake lets call this folder ExchangeAPIDropFolder.\nThe following code demonstrates how to go about this:- [sourcecode language=\u0026ldquo;csharp\u0026rdquo;]\nprivate static void CheckEmailFolderForContents() { string exchangeUsername = ConfigurationManager.AppSettings[\u0026ldquo;ExchangeUsername\u0026rdquo;]; string exchangePassword = ConfigurationManager.AppSettings[\u0026ldquo;ExchangePassword\u0026rdquo;]; string exchangeAutodiscoverUrl = ConfigurationManager.AppSettings[\u0026ldquo;ExchangeAutodiscoverUrl\u0026rdquo;]; string exchangeAPIDropFolderFolderName = ConfigurationManager.AppSettings[\u0026ldquo;ExchangeAPIDropFolderFolderName\u0026rdquo;]; string exchangeAPIDropFolderArchivedFolderName = ConfigurationManager.AppSettings[\u0026ldquo;ExchangeAPIDropFolderArchivedFolderName\u0026rdquo;];\nExchangeService ews = new ExchangeService(ExchangeVersion.Exchange2010_SP1) { Credentials = new WebCredentials(exchangeUsername, exchangePassword) }; ews.AutodiscoverUrl(exchangeAutodiscoverUrl); FindFoldersResults folderSearchResults = ews.FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue)); Folder exchangeExchangeAPIArchivedFolder = folderSearchResults.Folders.ToList().Find( f =\u0026gt; f.DisplayName.Equals(exchangeAPIDropFolderFolderName, StringComparison.CurrentCultureIgnoreCase)); //Set the number of items we can deal with at anyone time. ItemView itemView = new ItemView(int.MaxValue); foreach (Folder folder in folderSearchResults.Folders) { if (folder.DisplayName.Equals(exchangeAPIDropFolderFolderName, StringComparison.OrdinalIgnoreCase)) { Folder boundFolder = Folder.Bind(ews, folder.Id); SearchFilter unreadSearchFilter = new SearchFilter.SearchFilterCollection( LogicalOperator.And, new SearchFilter. IsEqualTo( EmailMessageSchema.IsRead, false)); //Find the unread messages in the email folder. FindItemsResults unreadMessages = boundFolder.FindItems(unreadSearchFilter, itemView); foreach (EmailMessage message in unreadMessages) { message.Load(); foreach (Attachment attachment in message.Attachments) { if (attachment is FileAttachment) { FileAttachment fileAttachment = attachment as FileAttachment; fileAttachment.Load(); MemoryStream ms = new MemoryStream(fileAttachment.Content); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(ms); //TODO - Process File Contents } } //Mark the message as read and then move it to the Archived Folder message.IsRead = true; message.Update(ConflictResolutionMode.AlwaysOverwrite); message.Move(exchangeExchangeAPIArchivedFolder.Id); } } } } [/sourcecode]\nThats it - enjoy and feel free to add comments or ask me about this code.\n","date":"7 October 2011","externalUrl":null,"permalink":"/2011/10/07/using-the-exchange-web-service-api-from-c/","section":"Posts","summary":"","title":"using the exchange web service API from c#","type":"posts"},{"content":"I have always wanted to know if there was a tool for looking at a project and removing any unused project references within a .net application. On twitter I came across a tweet from @dotnetjunky where he mentioned this project. Ref Assistant\nIt\u0026rsquo;s also available within the Visual Studio Gallery incase you want to add it from there. Once installed you can right-click on References and then select \u0026lsquo;Remove Unused References\u0026rsquo; as below:-\nOnce installed this will be available within any Visual Studio project you open as long as it is used within Visual Studio 2010.\n","date":"7 October 2011","externalUrl":null,"permalink":"/2011/10/07/removing-unused-project-references-from-within-visual-studio-2010/","section":"Posts","summary":"","title":"Removing Unused Project References from within Visual Studio 2010","type":"posts"},{"content":"In this blog post I am going to show you how to add a SQL Server database to Subversion using Redgate SQL Source Control, the tool claims you can add your database to a source control provider such as Subversion in about 5 minutes - lets see whats involved.\nI have Subversion running on my own windows 7 pc at home, I use it for testing out tools and integration with CI and so on, in future blog posts I will cover more on Continuous Integration.\nI\u0026rsquo;m going to start by adding an existing database into Subversion using the SQL Source Control tool with screenshots so you can follow. I currently have Subversion installed and running on c:\\svn\\trunk\\\nBelow is a screenshot of my local SQL Server\nSportsStore is a local database used within one of the MVC books I have, lets add this database to Subversion using the tool now.\nCreate a New Folder which needs to be empty within your local repository folder, in my case my subversion folder is c:\\svn\\trunk\\ - this is where your database scripts and data will be where your scripts in source control will be locally.\nHighlight the database on the left and then select the blue text on the right which says \u0026ldquo;Link database to source control\u0026hellip;\u0026rdquo;\nThe following window will pop-up, here enter the url to your repository, since mine is local I just need to add c:\\svn\\trunk\\SportStoreDB (this is the folder your db scripts will go into), click go.\nYou should see the following :-\nAt this point the tool has added all the scripts including the data for all your tables to Subversion - now we just need to get this from Subversion into our local folder - to do this right-click on the folder and choose SVN Checkout and then click ok as below\nThis now leaves us with the entire SportStore database having been scripted and placed within your subversion repository and you now have a local copy - perfect and easily accomplished.\nBelow are the screenshots of the output from the tool within your Subversion folder.\nAnd a view of the stored procedures folder with created scripts for you.\nFor more on this great tool check out Redgate SQL Source Control.\n","date":"13 September 2011","externalUrl":null,"permalink":"/2011/09/13/source-control-your-sql-database-right-now/","section":"Posts","summary":"","title":"How to Source Control your SQL Database","type":"posts"},{"content":"Over the years I have come across a number of tools I have used and wanted to make a note of them so that others can find them useful and so that I have a list for future reference.\nThe following is the list of tools I use and why I find them of use:-\nRed Gate Ants Profiler If your application is performing poorly or you want to try to work out what might not be the most efficient part of a system you can run Ants performance profiler against your code whilst it runs and this will give you some superb feedback on the slowest lines of code, and can even monitor the SQL which is being ran.\nFiddler Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler has helped me with a number of issues regarding proxy authentication issues going through company firewalls as well as checking for server errors and so on, its worth spending a short time learning it as it will pay you back in the long run.\nGlimpse At its core Glimpse allows you to debug your web site or web service right in the browser. Glimpse allows you to \u0026ldquo;Glimpse\u0026rdquo; into what\u0026rsquo;s going on in your web server. In other words what FireBug is to debugging your client side code, Glimpse is to debugging your server within the client\nRed-Gate Products If you\u0026rsquo;re using SQL Server a lot and you\u0026rsquo;re not using some of these products there in my opinion your missing out big time. SQL Compare, SQL Data Compare, and SQL Source Control are invaluable products. The products only cost a few hundred pounds and save a huge amount of time, making your developers or SQL dba\u0026rsquo;s far more productive.\nAnkhSVN If you use Subversion and want to keep track of changes to your code then this add-in is very helpful and integrates with Visual Studio.\n","date":"29 August 2011","externalUrl":null,"permalink":"/2011/08/29/tools-of-the-trade/","section":"Posts","summary":"","title":"Tools of the trade","type":"posts"},{"content":"In a profession such as software development, testing the code that your developers write is of the most important things you can do.\nWorking with complex requirements which can change at any time can be a challenge to say the least. Writing maintainable, bug free code is also a challenge and with the best will in the world the code your developers write is unlike to ever be completely bug free.\nIf you have a product for example, the code needs to have proper unit tests which are ran daily (even hourly) and when code gets checked in order to make sure nothing gets broken when you make a change. This is fairly standard but the number of places I have seen which don\u0026rsquo;t have this basic scenario is quite alarming.\nWhen a customer asks for a new feature to the product and you don\u0026rsquo;t have proper unit tests with code coverage then how on earth will you know if you havent broken anything. To go back and test the entire application is unrealistic but if you don\u0026rsquo;t unit test the application then you cannot say for sure that you havent broken something no matter how trivial the change may be.\nIn my next blog post I will talk about CI (continuous integration) and how it should be setup and why it works so well.\nIn my opinion, software companies need testers - to have the developers test their own software is wrong, even to have other developers test other developers work is wrong, testers are professionals and they test out with the boundaries that a developer would test. Testers save time and money in the long run as the product becomes more stable, less bugs appear and your customers are happier as the code is more reliable.\nReleasing code also becomes less fraught as you can have confidence in the fact that the code has been tested and has passed the unit tests.\nWhen the tekpub videos talk about coding, Rob Conery always says if you\u0026rsquo;re not doing Test Driven Development or Unit Testing then you\u0026rsquo;re doing it wrong - I have to agree with that comment. We are software professionals and cutting corners is not what we do.\n","date":"24 August 2011","externalUrl":null,"permalink":"/2011/08/24/testing-and-why-you-should-employ-testers/","section":"Posts","summary":"","title":"Testing, testers and the need for them","type":"posts"},{"content":"The Clean Coder - A Code of Conduct for Professional Programmers is the latest book I have just finished and is the follow-up to Uncle Bob\u0026rsquo;s Clean Code.\nFirst of all Clean Code is one of my favourite books and when I saw the follow-up I ordered it straight away - for those of you who havent read it, Clean Code covers how professionals program and discusses the do\u0026rsquo;s and dont\u0026rsquo;s when writing code.\nThe Clean Coder discusses how to be a professional programmer, how to deal with conflict, unreasonable managers and how a professional deals with work pressures and so on. The thing to remember for me is that we are professionals and should always try to act as one and do a professional job.\nI am currently working as a consultant and have found myself reading the book and finding it very helpful in a number of ways. The chapters on dealing with pressure and working with unreasonable managers did stick out somewhat and also the chapters on estimation and estimating how long something will take has some very interesting ideas.\nLike Clean Code this book shares some ideas which not everyone will agree with but the author acknowledges this and never tries to enforce any particular ideas upon the reader.\nI like the idea of team building where you have programmers who thrive and bounce ideas of each other, I also think the idea of learing when to say No to management is particularly relevant in our line of work.\nThe book covers attitude, self-respect and pride in your work and again that sometimes is thrown aside in order to get the job done and that\u0026rsquo;s fine too as long as you handle it professionally.\nAgain I recommend this book but I would suggest you read Clean Code first if you havent.\nThis book can be found here on amazon.com:- The Clean Coder\n","date":"6 August 2011","externalUrl":null,"permalink":"/2011/08/06/book-review-the-clean-coder/","section":"Posts","summary":"","title":"Book Review: The Clean Coder ","type":"posts"},{"content":"","date":"11 May 2011","externalUrl":null,"permalink":"/categories/.net-exams/","section":"Categories","summary":"","title":".Net Exams","type":"categories"},{"content":"This is an introductory post to a series of post on the following exam :- PRO: Designing and Developing Windows Azure Applications\nI aim to blog about the material I read and the demo code I work with whilst studying for the exam. At the moment I have no real ideas what The Cloud really is and what Azure and Sql Azure is - this is a good way for me to learn about something which may or may not be used in the coming years where I work, if not then at least it will be something I have knowledge of.\nI am currently reading Azure in Action by Chris Hay and will work through the examples and blog as I go.\nThe next post will cover the creation and testing of a Hello World Azure Web Application - more to follow soon.\n","date":"11 May 2011","externalUrl":null,"permalink":"/2011/05/11/next-exam-70-583-pro-designing-and-developing-windows-azure-applications/","section":"Posts","summary":"","title":"Next Exam 70-583 PRO: Designing and Developing Windows Azure Applications","type":"posts"},{"content":"Today I was at my first #dddscot event and it was really good fun, the content covered at the event was quite varied and it was actually quite hard for me to decide what to go and learn and listen about.\nI chose to go and listen and learn about the following:-\nFrom .Net to Rails, A Developer\u0026rsquo;s Story, this was Colin Gemmel (@colin_gemmell) talking about how he moved from being a .Net developer over to the Ruby world and he gave his thoughts on the changes he faced, the good and the bad and also covered a code demo which illustrated just how easy it can be to write Ruby using Gems, have code generated via scaffolding which would scafolld out your code, unit tests and so on.\nNext up I went to Chirs Hay\u0026rsquo;s (@chrishayuk) talk on Building Seriously Scalable Websites with Asp.Net and without Windows - this was very interesting content to me and he covered how the tools and techniques on how some of the top website players go about scaling their sites using servers, load balancing and tools to aid them with doing this. Hadn\u0026rsquo;t really thought about having the static content on a separate server before and this talk covered some relevant content for where I work at the moment.\nThe third talk I went to was Don\u0026rsquo;t Make Me Wait - Faster Websites 101 by Duncan McDougall (@duncanmcdougall)- I thought this talk would have nicely followed on from the previous talk and was the main reason I went to this talk had a load of really good content although I knew a lot of this and soon realised I wish I had chosen something else, something I knew nothing about. The talk was very good just nothing new to me which was just a bad choice on my part to be honest.\nThe fourth talk I attended was SpecFlow - functional testing made easy by Paul Stack (@stack72) this talk covered ho TDD and BDD and how to creat automated functional tests - Specflow with WaTin was a particularly nice feature and something I will look into more in-depth.\nAlthough there were 5 tracks during the day I left after the fourth track.\nGreat day learning some very cool stuff, the event is run by the community for the community and was really well done - I would highly recommend to anyone to go to these as they are a great way to meet folk and to learn new stuff and to ask questions.\nWell done to everyone involved and hope to be their next year.\n","date":"7 May 2011","externalUrl":null,"permalink":"/2011/05/07/ddd-scotland-developer-developer-developer-dddscot/","section":"Posts","summary":"","title":"DDD Scotland (Developer developer developer #dddscot)","type":"posts"},{"content":"Glimpse is basically FireBug for MVC applications and it is written entirely using JavaScript - if you havent checked it out and you\u0026rsquo;re using MVC at all then please check this out asap.\nIt takes 30 seconds to install and have running on your application, it shows you details about everything that\u0026rsquo;s happening on the server, less talking go get it now!\nClick \u0026mdash;-\u0026gt; to Download Glimpse now.\nEnjoy!\n","date":"25 April 2011","externalUrl":null,"permalink":"/2011/04/25/mvc-glimpse-via-nuget/","section":"Posts","summary":"","title":"MVC Glimpse via NuGet","type":"posts"},{"content":"If you\u0026rsquo;re using Visual Studio 2010 and your web application is using jQuery and or jQueryUI, you want to keep up to date and make sure everyone has the most up to date versions.\nUse NuGet to add the latest and greatest versions of these libraries into your application and no longer will you have to go find the latest version, download, unzip and then add to your web app.\nNuGet has a very similar way of adding and removing libraries such as you would use add/remove programs within Windows.\nScott Hanselman has an upcoming talk at TechEd on NuGet for the Enterprise which will cover how to use NuGet and setup a NuGet Server within your work - looking forward to that.\nThat\u0026rsquo;s it enjoy.\n","date":"21 April 2011","externalUrl":null,"permalink":"/2011/04/21/use-nuget-for-jquery-and-jqueryui-updates-and-more/","section":"Posts","summary":"","title":"Use Nuget for Jquery and jQueryUI Updates and more","type":"posts"},{"content":"If your using MVC 3 and you have updated to the latest update just after MIX 11 then you may notice a very nice addition to the Scripts folder, something called Modernizr, at the moment my brand new MVC 3 web app has modernizr-1.7.js included.\nIf you wanna know what Modernizr is \u0026ndash;\u0026gt; modernizr ?\nFollow @Modernizer on twitter and even watch Scott Hanselman talk about it at Mix 11 Modernizer at Mix (Scroll to about 11 minutes in)\n","date":"21 April 2011","externalUrl":null,"permalink":"/2011/04/21/modernizr-mvc-3-update-and-what-is-modernizr/","section":"Posts","summary":"","title":"Modernizr MVC 3 update and what is modernizr?","type":"posts"},{"content":"You\u0026rsquo;ve been asked to look at something new, or your just interested in learning something different, perhaps you always thought it would be cool to know something about a technology you know nothing about.\nIf you find yourself looking for a new job, perhaps the employers are looking for a skill you either don\u0026rsquo;t have or feel a little weaker in, brushing up or learning this new skill would be of an obvious benefit to you as individual. Maybe your just looking at a technology and want to know more about it and see what the fuss is about.\nKeeping up to speed with new technologies is very important and I find the best way to do this is to use a resource such as the link below.\nCheck out Pluralsight for training from guys like Fritz Onion and Scott Allen or Tekpub from guys like James Avery and Rob Connery.\nFor a years subscription to Both it will cost you £350 all in, that\u0026rsquo;s it no - all the training you could want including updates and new content to learn. Its easy, fast, full of great content and developers can watch anytime they like.\nI have subscribed to both and I recommend you or your team do too.\n","date":"11 April 2011","externalUrl":null,"permalink":"/2011/04/11/need-some-software-developer-training-look-no-further/","section":"Posts","summary":"","title":"Need some software developer training - look no further","type":"posts"},{"content":"The re-write started with my intention to learn the new MVC 3 razor syntax - I had previously written a small MVC 2 web application after having worked on web forms for several years.\nWhen MVC 3 came out I didn\u0026rsquo;t have much of a chance to look at it until the last 2-3 months all be it on and off. The new razor engine is really cool and makes your view pages cleaner than before and the syntax is really easy to pick up. one thing I will say though is that at first it looks like spaghetti code but if you spend a little time learning the syntax and looking at well written pages you will soon see the beauty that is in MVC 3.\nLack of controls - at first I admit when working on an MVC 2 project I was fairly frustrated at the lack of controls available when trying to create web pages, this was holding me back and simple pages were taking more time than they should have, again if your willing to put in some time you will come across projects like MVCContrib and others which have a library of controls and HTML helper to aid you with your projects.\nDon\u0026rsquo;t be put off by anything mentioned above, MVC 3 has a lot of very nice features which once you get the hang of you will see the benefits of using this type of project. I am now such a fan that I would always prefer to use MVC over WebForms, the code is so much cleaner where you can use the idea of separation of concerns to make your code far more maintainable, as well as more importantly testable.\nFor the WebForm background crowd MVC isn\u0026rsquo;t just a fad and it really is nice to work with, if you think its more like the bad old days of asp then you havent grasped the concept and the idea behind it at all.\n","date":"11 April 2011","externalUrl":null,"permalink":"/2011/04/11/mvc-3-app-using-jquery-ui-and-entity-framework-4/","section":"Posts","summary":"","title":"MVC 3 app using jQuery UI and Entity Framework 4 (Part 2)","type":"posts"},{"content":"Recently I was looking to try and work out why a project I was working with was taking a very long time to build - I was pleased to find that Visual Studio can out put individual project build times for a solution, this allowed me to see which projects within the solution were taking longer that I would have anticipated.\nTo View the build time of projects within a solution go to Tools, Options and look for Projects and Solutions, then look for Build And Run (or similar depending on the version of Visual Studio) and then change the drop down for MSBuild project output - change the loggig from Normal to Diagnostic.\nNow as the solution is building go to the View mwnu and select OutPut (to view the ouput window) and you can see a whole raft of build details including build times for each project.\nHopes that useful to someone.\n","date":"24 March 2011","externalUrl":null,"permalink":"/2011/03/24/visual-studio-project-build-times/","section":"Posts","summary":"","title":"Find Out Your Project Build Times in Visual Studio","type":"posts"},{"content":"When I start to create the insert stored procedure for an existing database table I used to always start by copying an existing stored procedure (for the template only purpose) and then empty the contents of the stored procedure, then I would right-click on the table and then select, script table as \u0026lsquo;Insert\u0026rsquo; from the menu options as shown below:-\nThis template always kind of annoyed me as I felt it never laid it out very well, only last week did someone point out that the best thing to do is to actually just type inside your stored procedure:-\nINSERT INTO and then press Enter\nThis will generate the insert and also tell you the column types and sizes for variables such as varchar(s) as shown below, including putting in default dates.\nThat\u0026rsquo;s it for now.\n","date":"13 March 2011","externalUrl":null,"permalink":"/2011/03/13/quick-sql-server-tip-creating-your-insert-stored-procedure/","section":"Posts","summary":"","title":"Quick SQL Server Tip - Creating your Insert Stored Procedure","type":"posts"},{"content":"I decided to re-write an existing small application at work using MVC and Entity framework and blog about the things I learn along the way.\nThe current application is a vb.net 2.0 web application which we currently use to book our time on projects for our customers, it\u0026rsquo;s also probably the only vb.net application we have at work so another excuse for me to re-write.\nThe reason I decided to re-write this was because I wanted to first of all try to learn MVC 3 and look and the new razor engine, I also took this opportunity to use the Entity Framework for the data access which I will cover in the next part of this post.\nMVC hasn\u0026rsquo;t had any real air time at my place of work even though I try to inform developers just how much I like it, it\u0026rsquo;s so hard to convince people to move from what they know and use daily, to something new and completely different and that is easy to understand, but I love to learn new technologies and look at other ways to tackle something - I guess I do suffer from always wanting to use a new technology.\nThe next post will cover my thoughts on what I have come across so far and how MVC and Entity Framework fit some projects but not all.\n","date":"6 March 2011","externalUrl":null,"permalink":"/2011/03/06/mvc-3-app-using-jquery-ui-and-entity-framework-4-intro-post/","section":"Posts","summary":"","title":"MVC 3 app using jQuery UI and Entity Framework 4 (intro post)","type":"posts"},{"content":"The nice folks at Telerik have released:- \u0026ldquo;Telerik Extensions for ASP.NET MVC is a lightweight framework which helps you build rich user interfaces for ASP.NET MVC while enjoying great developer productivity\u0026rdquo;\nI am currently using them and I highly recommend them, they even give you visual studio templates so when you start a new application you can choose from a template which reference all the necessary files and javascript required.\nThe textensions are available on codeplex here:- Telerik Extensions for ASP.NET MVC\n","date":"27 February 2011","externalUrl":null,"permalink":"/2011/02/27/free-telerik-controls-for-mvc-apps-including-razor-view-engine/","section":"Posts","summary":"","title":"Free Telerik controls for MVC apps (including razor view engine)","type":"posts"},{"content":"ELMAH stands for Error Logging Modules and Handlers and if you have an ASP.NET web application or web site and you want a very easy way to use it then this article is for you.\nNote I am going to use NuGet to add ELMAH to an existing application using Visual Studio 2010.\nFor this tutorial I am going to sue the NuGet Package Console instead of using the other option which is \u0026lsquo;Add Library Package Reference\u0026rsquo;, let\u0026rsquo;s get started:-\n1 - Open an existing VS2010 web application and then select \u0026lsquo;Tools\u0026rsquo;, \u0026lsquo;Library Package Manager\u0026rsquo; and then select \u0026lsquo;Package Manage Console\u0026rsquo;. 2 - One you have the console window check to make sure your Package Source is pointing to the NuGet Official package source and the type:-\nList-Package -remote\nand then press enter\n3 - This will list all available packages which you can add to your application - Note if you have several projects within your solution make sure you have the project you want to add ELMAH to selected in the console right hand drop down, below I am looking at the official packages and adding to my MVC site as you can see:-\n4 - Ok now type:-\nInstall-package ELMAH\nand then press enter\ncheck now and you will see that ELMAH has indeed been added and your web.config has changed with all the settings for ELMAH having been added to your file - Uninstall-package ELMAH would undo this work.\n5 - Thats it, ELMAH has been added to your project. To test it working and as an example add a testpage and just throw an exception on it, or browse to a page that doesnt exist within your app and then in your web browser url browse to /elmah.axd - Note this is logging into the app code folder and writing to .xml files - part 2 of this blog post will discuss logging using SQL instead of using this method.\n6 - Voila ELMAH is logging all your app errors.\n","date":"2 February 2011","externalUrl":null,"permalink":"/2011/02/02/elmah-using-nuget-what-they-are-and-why-you-should-use-them-part-1/","section":"Posts","summary":"","title":"ELMAH, using Nuget what they are and why you should use them ","type":"posts"},{"content":"Professional Asp.Net Design Patterns by Scott Millett\nIf your looking to learn how to learn and then use design patterns in your Asp.Net code then this books for you. The book is full of coding samples and covers all the Gang Of Four design patterns with various very good examples.\nWhat the Book Covers\nThe book covers what design patterns are, who came up with the ideas in the first place and why they can help solve industry problems, it then covers the 3 main areas for using deisgn patterns which cover the presentation/ui layer, the data access layer and the business logic layer.\nThe book takes each area above and discusses which patterns apply to each of the 3 areas, it then shows sample code before a pattern has been applied then talks about the pattern before giving you a walkthrough of how to apply the design pattern itself.\nI was a little bit sceptical of how the presentation layer would benefit from having a design pattern applied but the code just becomes really clean and easy to follow and was quite an eye opener.\nThe book introduces you to NHibernate, Dependency Injection, Structure Map and a lot of other techniques all of which were new to me before reading this book.\nIt\u0026rsquo;s the kind of book that I will reference again and again and will stand the test of time even over different versions of .Net as the principles are sound and can be applied to most languages let alone .Net\nI read a lot of technical books and this has been my favourite book over the last 2-3 years.\n","date":"30 January 2011","externalUrl":null,"permalink":"/2011/01/30/book-review-professional-asp-net-design-patterns/","section":"Posts","summary":"","title":"Book Review - Professional Asp.Net Design Patterns","type":"posts"},{"content":"Tip: When your debugging some code and you want to trace the SQL that\u0026rsquo;s hitting your SQL Server Database then this is how I would normally cut through all the traffic hitting the SQL database your using.\nTip:- Add an application_name part to your connection string in the app.config or web.config, here is an example.\nBefore:- add name=\u0026ldquo;TestConn\u0026rdquo; connectionString=\u0026ldquo;data source=ServerName;Integrated Security=SSPI;initial Catalog=TESTDB;providerName=\u0026ldquo;System.Data.SqlClient\u0026rdquo;\nAfter:- add name=\u0026ldquo;TestConn\u0026rdquo; connectionString=\u0026ldquo;data source=ServerName;Integrated Security=SSPI;initial Catalog=TESTDB;application name=;\u0026rdquo; providerName=TESTAPP_GREG\u0026quot;System.Data.SqlClient\u0026rdquo;\nCouple of things to notice in the lines above - the second connection string I added an application name, but I also added my name so that when I run the application I can use the application name setting with my name so I only trace my code when I hit the database and no other code being ran will be shown within my trace window.\nTo do this I usually fire up SQL Server Management studio and then from within their fire up SQL Server Profiler and do the following (make sure to click Show All Columns):-\nThen add the name of the application name into the box as below:-\nClick ok and the only trace information recorded now will be the SQL that you are actually hitting the database with and no one else - enjoy.\n","date":"27 January 2011","externalUrl":null,"permalink":"/2011/01/27/quick-tip-tracing-your-sql-from-net/","section":"Posts","summary":"","title":"Quick Tip: Tracing SQL from your application","type":"posts"},{"content":"Clean Code by Robert C Martin\nLet me start by saying that I highly recommend this book to anyone writing code who wants to learn to write better, cleaner code.\nWhat the Book Covers\nChapter 1 Clean Code - Different authors of programming books give their take on what their idea of clean code is as they try to help you become a good programmer.\nChapter 2 Meaningful Names - Gives you a break down of what to try to avoid calling method names, variables, and such like and helps you to try to use meaningful names as is the chapter name.\nChapter 3 Functions - Hints that functions should be small and that they should only do one thing and do that one thing well and gives examples of poor functions and how to refactor them in to new functions which have one function. Again I think this is a particularly good idea even though sometimes not always practical.\nChapter 4 Comments - Before I read this book I would normally add a comment the code I was working on but after reading this chapter I realised that comments in your code can be bad. It\u0026rsquo;s better to try to write self documenting code and try not to litter your code with comments, how many times have you changed code and then changed the comment of the author who wrote the code in the first place (hats off if you always do that everytime, including stored procs?), so code with the wrong comments can lead to issues themselves.\nChapter 5 Formatting - Covers different types of formatting your code as well as indentation and is pretty irrelevant with Visual Studio and such editors.\nChapter 7 Error Handling - Returning Null is bad but passing Null into a method is worse - code with endless checks for Null should be refactored - yep have to agree.\nChapter 9 Unit Tests - Covers the concepts of how to write good unit tests.\nThese are just a few hand-picked chapters which I thought were very good indeed.\nSummary This book is my favourite book, even ahead of Code Complete which I thought was an excellent book in its own right. Keep your code simple, use meaningful names and don\u0026rsquo;t use comments when there is no need to.\nIt\u0026rsquo;s the kind of book you will go back to again and again and there aren\u0026rsquo;t that many books which you don\u0026rsquo;t mind reading cover to cover again.\nI\u0026rsquo;m sure you will enjoy this book and definitely learn something.\n","date":"6 January 2011","externalUrl":null,"permalink":"/2011/01/06/book-review-clean-code-by-robert-c-martin/","section":"Posts","summary":"","title":"Book Review - Clean Code by Robert C. Martin ","type":"posts"},{"content":"In this blog post I am going to cover the creation and usage of a local NuGet repository. In this example I am going to add the Microsoft Bits (Background Intelligence Transfer Service) dll to a web application.\n1 - First of all I created a folder on my hard drive simply called NuGetPackages. (c:\\NuGetPackages)\n2 - Fire up VS 2010 and then create a new web application or open an existing one so that we can use this to test the new package were creating.\n3 - Once you have the web application open, you\u0026rsquo;ll want to change where Visual Studio 2010 looks for the packages locally, to do this go to the Tools menu, and select Library Package Manager, from there then select Package Manager Settings (as seen below)\nOnce selected we need to change where Visual Studio and more specifically where NuGet is looking to try to find our local packages. Type a name and then paste in the location in the source textbox and press Add. You should see something like this:-\n4 - Ok at this point we have only created a location to put the packages, and told NuGet where to locate them. Now we need to create a package.\n5 - Time to create a package, first of all you need to create a file with the extension .nuspec and this file will be an xml file which will have the following structure:-\nElement\nDescription\nid The identifier for the package. It used as a partial name of the package.\nversion The package version. Also used as a partial name of the package.\nauthors Author(s) name. Use a comma to separate multiple authors.\ndescription Describe your package for others to understand what the package is used for.\nI created a file called Bits.nuspec and put this into the folder created in step 1) (c:\\NuGetPackages) you can see my file below:-\n6 - Now we need to build the package and to do this we need to have downloaded the Nuget command line tool which you can get from here:- Nuget command line tool\n7 - To make life easier I copied this file (Nuget.exe) to the folder in step 1 (c:\\NuGetPackages), now open a command prompt and then change to this directory c:\\NuGetPackages, now to create the package just type:-\nNuget.exe pack Bits.nuspec\nThis should create a file with the extension .nupkg for me this was Bits.2.0.0.0.nupkg as it uses the version information as part of the name. (The version info comes from the .nuspec file)\n8 - So far we have created a package and if you look at the last part of the code in Step 5, you\u0026rsquo;ll see a reference to files, this has *.dll and in this instance will add any dll\u0026rsquo;s found in this folder to the package. This would not be what you want if your going to be adding lots of different dll\u0026rsquo;s for other packages, you can change this line to read:-\nWhere would be changed to relate to the package you want to add - the line above is just used as an example.\n9 - To Install the package we will use the Package Manager Console from within VS 2010 which is installed when you install NuGet firstly you can type List-Package to see all the packages you have and then type Install-Package Bits to install the package called Bits.\n10 - Now we should be ready to try it out - go back to VS 2010 and then this time select Tools, Library Package manager and then Add Library Package Reference as below:-\nSelect the package we installed, in this case Bits and click Install as below:-\nThat\u0026rsquo;s all there is to it, hope someone out there found this of use.\n","date":"3 January 2011","externalUrl":null,"permalink":"/2011/01/03/using-a-nuget-local-repository/","section":"Posts","summary":"","title":"Creating and then using a NuGet local repository","type":"posts"},{"content":"Having been lucky enough to have a years subscription to the training content at Pluralsight Training I have to say that the content is superb, if you\u0026rsquo;re looking for training videos for yourself or for members of staff, the content is first class and covers beginner, intermediate and advanced levels on a variety of topics.\nI have used the content to help study WCF, ASP.Net 4, MVC 2 \u0026amp; 3 and Entity Framework so far.\nThe price for the content has been reduced and I cannot tell you how good this stuff is - go check it out now, there are some free courses from time to time which will show you just how good the content is.\nThe website has just been updated and I would recommend this form of training to every developer - plus the mobile versions such as the Androind and Ipad versions both rock.\n","date":"1 January 2011","externalUrl":null,"permalink":"/2011/01/01/pluralsight-training-videos/","section":"Posts","summary":"","title":"Pluralsight Training Videos - go check them out now!","type":"posts"},{"content":"Having successfully passed this exam second time around and having had some time to reflect on it I thought I would post some useful links and resources for fellow devs who may be sitting this exam.\nI cannot go into the content of the exam and tell you about it but I will post the links I used to study for the exam below.\nOk onto the content and links I used to help me pass the exam, dont worry if the content looks for an older exam as this is all relevant:- (The hardest part iof the exam for me was the WCF part of the exam.)\nhttp://www.microsoft.com/learning/en/us/exam.aspx?ID=70-523 - keep your eyes on the skills measured.\nhttp://www.jamesjfoster.com/blog/2010/resource-links-for-70-513-wcf-certification-exam/#comments\nhttp://konczuras.wordpress.com/2010/11/06/70-523-passed/\nhttp://www.ucertify.com/blog/mcts-70-503-csharp-short-notes-exam-passing-tips.html\nPassing this exam earns you the following creditations:-\nMicrosoft Certified Professional Developer .Net 4 Microsoft Certified Technology Specialist .Net 4 in Data Access Microsoft Certified Technology Specialist .Net 4 in Service Communication Applications Microsoft Certified Technology Specialist .Net 4 in Web Applications\n","date":"1 January 2011","externalUrl":null,"permalink":"/2011/01/01/net-upgrade-exam-70-523/","section":"Posts","summary":"","title":".Net upgrade Exam 70-523 - Exam Study Notes","type":"posts"},{"content":"Redgate SQL Prompt which is one of their tools I use on a daily basis - it provides intellisense for writing SQL queries as well as a lot more - it has some very nifty options for splitting tables, smart rename which you can use to rename a table column for example and it will do this for all objects which reference the column changed.\nFormat SQL does just what it says on the tin - it formats your SQL based on formatting options that you as the user define.\nFind Invalid objects looks through your database and will show you any objects which have became invalid - say a column is renamed by a user but they forget to changed the stored procedures that reference the old column name - this tool is your new best friend.\nThese are just some of the options available in SQL Prompt - the number one thing going for this tool is productivity - you can write SQL queries much faster.\nFor a 14 day free trial:- http://www.red-gate.com/products/sql-development/sql-prompt/\n","date":"17 December 2010","externalUrl":null,"permalink":"/2010/12/17/redgate-sql-prompt-5/","section":"Posts","summary":"","title":"Redgate SQL Prompt","type":"posts"},{"content":" Hi, my name is Gregor Suttie and I live near Glasgow, Scotland. I am an Azure MVP and and Microsoft Certified Trainer.\nI help people learn Azure.\nI also a passionate developer with 30 years experience, mainly with Microsoft Technologies and background is a .NET developer since the start of .NET. - I was one of the first 50 people in the world to become an MCSD developer back in the day. Recently awarded the Outstanding contribution to the Microsoft Community UK Winner and then the Outstanding contribution to the Microsoft Community Global Winner both for 2023.\nCommunity\nAzure MVP awarded in August 2019.\nHelp run the Glasgow Azure User Group which runs every second month.\nRun the Azure Global Bootcamp (Glasgow edition) and do talks at both.\nHelp with organizing DDD Scotland.\nRun my YouTube Channel at https://www.youtube.com/gregorsuttie\nHelp organized and spoke at https://www.scottishsummit.com\nInvited to speak at Microsoft Ignite the Tour Zurich on “Deployment Practices for Greater Reliability”.\nSat and passed 9 Azure exams in the last 16 months and a constant learner.\nProminent in the Azure community, podcast appearances, articles for companies, and technical author for the book called Agile Project Management with Azure DevOps by Apress.\nMy main passions are around Azure and DevOps\nI went from no knowledge of Azure to an Azure MVP in under 2 years and along the journey passed 9 exams, I learn new skills quickly and I keep on top of a number of technologies and a life learner.\nMy twitter handle is @gregor_suttie and that\u0026rsquo;s the best place to contact me.\nView my list of Microsoft:- Certifications\nView the list of talks I have given - https://gregorsuttie.com/speaking/\n","externalUrl":null,"permalink":"/about/","section":"Azure Greg","summary":"","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]