<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Thorsten Hans</title>
    <link>https://thorsten-hans.com/</link>
    <description>Recent content on Thorsten Hans</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 16 Sep 2026 05:32:25 +0200</lastBuildDate>
    <atom:link href="https://thorsten-hans.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Book Progress &amp; Illustrations</title>
      <link>https://thorsten-hans.com/book-progress-and-illustrations/</link>
      <pubDate>Wed, 16 Sep 2026 05:32:25 +0200</pubDate>
      <guid>https://thorsten-hans.com/book-progress-and-illustrations/</guid>
      <description>&lt;p&gt;Here we are, another week later. Again, a few days have passed since I&amp;rsquo;ve published my &lt;a href=&#34;../book-progress-and-thoughts-on-inclusive-pricing&#34;&gt;last update on the book and shared some thoughts on inclusive pricing&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Since I&amp;rsquo;ve published that update, I&amp;rsquo;ve made some substantial progress. Overall, I consider the first six chapters of the book to be pretty close to &amp;ldquo;done&amp;rdquo; now.&lt;/p&gt;&#xA;&lt;p&gt;A pretty big refactoring of the sample application made me rewrite a massive chunk of the chapters that guide the reader through implementing the sample application and writing tests against it. IIRC, I closed the lid of my laptop Sunday evening around 11:30pm with a slight sense of satisfaction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Book Progress &amp; Thoughts on Inclusive Pricing</title>
      <link>https://thorsten-hans.com/book-progress-and-thoughts-on-inclusive-pricing/</link>
      <pubDate>Tue, 08 Sep 2026 09:26:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/book-progress-and-thoughts-on-inclusive-pricing/</guid>
      <description>&lt;p&gt;Hey everyone,&lt;/p&gt;&#xA;&lt;p&gt;I wanted to drop a quick update on &lt;a href=&#34;https://leanpub.com/building-serverless-apps-with-wasm-and-spin&#34;&gt;&lt;em&gt;Building Serverless Applications with WebAssembly &amp;amp; Spin&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Honestly, I’m really happy with how the book is shaping up right now. I’ve been sinking a lot of late-evening and early-morning hours into refining chapters, restructuring sections, and proofreading the code examples to ensure it’s as hands-on and practical as possible. It’s a labor of love, but seeing it come together makes every late night worth it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Now</title>
      <link>https://thorsten-hans.com/now/</link>
      <pubDate>Mon, 07 Sep 2026 02:13:50 +0000</pubDate>
      <guid>https://thorsten-hans.com/now/</guid>
      <description>&lt;p&gt;Updated on &lt;code&gt;2026-09-08&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I’ve got the basics covered on my &lt;a href=&#34;https://thorsten-hans.com/about&#34;&gt;/about&lt;/a&gt; page, so head there if you&amp;rsquo;re searching for more. This page is about what’s currently on my mind and my immediate plans.&lt;/p&gt;&#xA;&lt;h2 id=&#34;location&#34;&gt;Location&lt;/h2&gt;&#xA;&lt;p&gt;Saarland, Germany&lt;/p&gt;&#xA;&lt;h2 id=&#34;work&#34;&gt;Work&lt;/h2&gt;&#xA;&lt;p&gt;I work at &lt;a href=&#34;https://akamai.com&#34;&gt;Akamai&lt;/a&gt; as a Sr. Developer Advocate.&lt;/p&gt;&#xA;&lt;h2 id=&#34;projects&#34;&gt;Projects&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://spinframework.dev&#34;&gt;Spin&lt;/a&gt; and &lt;a href=&#34;https://spinkube.dev&#34;&gt;SpinKube&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;life&#34;&gt;Life&lt;/h2&gt;&#xA;&lt;p&gt;Currently in a body recomposition phase, which means I try to hit the gym at least three times a week while keeping calorie intake pretty strict.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I’m Writing a Book on WebAssembly and Spin</title>
      <link>https://thorsten-hans.com/i-am-writing-a-book-on-wasm-and-spin/</link>
      <pubDate>Sat, 15 Aug 2026 14:05:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/i-am-writing-a-book-on-wasm-and-spin/</guid>
      <description>&lt;p&gt;Hey friends 👋🏼,&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve been following my activities over the recent years, you know I can&amp;rsquo;t stop talking about the &lt;strong&gt;third wave of cloud computing&lt;/strong&gt;. Server-side WebAssembly is completely changing the game for cold-start latency and container bloat.&lt;/p&gt;&#xA;&lt;p&gt;Today, I’m thrilled to announce I&amp;rsquo;m turning those talks and architectural patterns into a practical, hands-on guide:&lt;/p&gt;&#xA;&lt;h2 id=&#34;building-serverless-applications-with-webassembly--spin&#34;&gt;Building Serverless Applications With WebAssembly &amp;amp; Spin&lt;/h2&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/i-am-writing-a-book-on-wasm-and-spin/images/spin-book-promo.png&#34; width=&#34;600&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;Sign up and Stay in the Loop&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Instead of theoretical fluff, I structure the book in a way that readers will build a complete, multi-component serverless application from the ground up using Rust and Spin.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Component Composition with Spin 4.0</title>
      <link>https://thorsten-hans.com/component-composition-with-spin-4/</link>
      <pubDate>Fri, 14 Aug 2026 19:15:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/component-composition-with-spin-4/</guid>
      <description>&lt;p&gt;Thanks to the WebAssembly Component Model we can stitch together multiple WebAssembly Components. Reusing Wasm Components boost developer velocity dramatically while language barriers vanish. In this hands-on article, I&amp;rsquo;ll explain how you can compose Wasm Components using Spin 4.0.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-need-to-follow-along&#34;&gt;What You Need To Follow Along&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll try to keep things as simple as possible. That&amp;rsquo;s why we&amp;rsquo;ll implement both components using Rust, resulting in the following - short - list of requirements:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure DevOps Extensions for Spin, Fermyon Wasm Functions and Fermyon Cloud</title>
      <link>https://thorsten-hans.com/azure-devops-extensions-for-spin-fc-and-fwf/</link>
      <pubDate>Thu, 16 Oct 2025 10:15:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/azure-devops-extensions-for-spin-fc-and-fwf/</guid>
      <description>&lt;p&gt;Do you want to build and deploy your &lt;a href=&#34;https://spinframework.dev/&#34;&gt;Spin&lt;/a&gt; applications from within &lt;a href=&#34;https://azure.microsoft.com/de-de/products/devops&#34;&gt;Azure DevOps&lt;/a&gt; pipelines? No matter if you want to target &lt;a href=&#34;https://www.fermyon.com/wasm-functions&#34;&gt;Fermyon Wasm Functions&lt;/a&gt; or &lt;a href=&#34;https://www.fermyon.com/cloud&#34;&gt;Fermyon Cloud&lt;/a&gt;, the extensions I published to the &lt;a href=&#34;https://marketplace.visualstudio.com/search?term=spin&amp;amp;target=AzureDevOps&amp;amp;category=All%20categories&amp;amp;sortBy=Relevance&#34;&gt;Visual Studio Marketplace&lt;/a&gt; are here to help.&lt;/p&gt;&#xA;&lt;p&gt;Earlier today I published three distinct extensions for Azure DevOps allowing you to do all-the-things Spin, Fermyon Cloud and Fermyon Wasm Functions straight from within your Azure DevOps pipelines.&lt;/p&gt;&#xA;&lt;p&gt;Although everything could be accomplished using good old bash scripts as part of your pipeline, dedicated &amp;ldquo;steps&amp;rdquo; are way more convenient and integrate seamlessly with core concepts of Azure DevOps pipelines like referencing variables, secrets, or leveraging variables produced by those steps to lay out control flow (&lt;code&gt;conditions&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>What I’ve Been Up To</title>
      <link>https://thorsten-hans.com/whats-ive-been-up-to/</link>
      <pubDate>Wed, 15 Oct 2025 10:15:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/whats-ive-been-up-to/</guid>
      <description>&lt;p&gt;Although this blog became a bit quite recently, I wrote a bunch of articles over on our &lt;a href=&#34;https://www.fermyon.com/blog&#34;&gt;corporate blog&lt;/a&gt;. I thought it&amp;rsquo;s worth sharing a comprehensive list of the posts I wrote:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.fermyon.com/blog/openapi-docs-for-spin-with-rust&#34;&gt;OpenAPI Documentation for Spin Apps with Rust&lt;/a&gt;&#xA;In this guide, I’ll show you how to generate OpenAPI Specification (OAS) documentation directly from Spin apps written in Rust. You’ll learn how this improves API discoverability, speeds up onboarding, and unlocks tooling like SDK generation and testing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uses</title>
      <link>https://thorsten-hans.com/uses/</link>
      <pubDate>Sun, 24 Aug 2025 02:13:50 +0000</pubDate>
      <guid>https://thorsten-hans.com/uses/</guid>
      <description>&lt;p&gt;I tinker and update my setup very often. However, I try to keep this list as updated as possible. If you&amp;rsquo;ve further questions, send me a tweet &lt;a href=&#34;https://x.com/ThorstenHans&#34;&gt;@ThorstenHans&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hardware&#34;&gt;Hardware&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026 MacBook Pro 14&amp;quot; (M5 Max | 64 GB | 2 TB) as daily driver&lt;/li&gt;&#xA;&lt;li&gt;2024 iPad Air 11&amp;quot; in Light Purple&lt;/li&gt;&#xA;&lt;li&gt;iPhone 15 Pro Max in graphite (256 GB)&lt;/li&gt;&#xA;&lt;li&gt;Garmin Fenix 8&lt;/li&gt;&#xA;&lt;li&gt;AirPods Pro 3 + AirPods Max&lt;/li&gt;&#xA;&lt;li&gt;ZSA Voyager in black&lt;/li&gt;&#xA;&lt;li&gt;Logitech MX Master 3&lt;/li&gt;&#xA;&lt;li&gt;2x LG 4k 27&amp;quot; Screens&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;software&#34;&gt;Software&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This blog is built with &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I use &lt;a href=&#34;https://zed.dev/&#34;&gt;Zed&lt;/a&gt; and &lt;a href=&#34;https://neovim.io/&#34;&gt;neovim&lt;/a&gt; as my main editors&lt;/li&gt;&#xA;&lt;li&gt;Preferred themes:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Osaka Jade&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://catppuccin.com/&#34;&gt;catppuccin mocha&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=RobbOwen.synthwave-vscode&#34;&gt;SynthWave 84&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=mvllow.rose-pine&#34;&gt;Rose Pine&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;When it comes to fonts, I either use &lt;a href=&#34;https://monaspace.githubnext.com/&#34;&gt;Monaspace Krypton&lt;/a&gt; or &lt;a href=&#34;https://dank.sh/&#34;&gt;Dank Mono&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;m a terminal guy using &lt;a href=&#34;https://ghostty.org/&#34;&gt;Ghostty&lt;/a&gt; with tmux and &lt;a href=&#34;https://ohmyz.sh/&#34;&gt;oh-my-zsh&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;My prompt is build with &lt;a href=&#34;https://starship.rs/&#34;&gt;Starship&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;I take notes in &lt;a href=&#34;https://notion.so&#34;&gt;Notion&lt;/a&gt; and manage my tasks using Apple Reminders&lt;/li&gt;&#xA;&lt;li&gt;Team &lt;strong&gt;Apple Music&lt;/strong&gt; 🎶&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;accessories&#34;&gt;Accessories&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apple HomePod Mini&lt;/li&gt;&#xA;&lt;li&gt;2x Sonos One SL&lt;/li&gt;&#xA;&lt;li&gt;Shure MV6&lt;/li&gt;&#xA;&lt;li&gt;Evergoods CTB 26&lt;/li&gt;&#xA;&lt;li&gt;DJI Osmo Pocket III&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Archive</title>
      <link>https://thorsten-hans.com/archive/</link>
      <pubDate>Wed, 01 Jan 2025 00:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/archive/</guid>
      <description>&lt;p&gt;All posts from my blog, organized chronologically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebAssembly and Containers with Docker Desktop - Hello World &amp; Beyond</title>
      <link>https://thorsten-hans.com/webassembly-and-containers-with-docker-desktop-hello-world-and-beyond/</link>
      <pubDate>Wed, 28 Feb 2024 15:27:55 +0100</pubDate>
      <guid>https://thorsten-hans.com/webassembly-and-containers-with-docker-desktop-hello-world-and-beyond/</guid>
      <description>&lt;p&gt;On top of being the runtime for containers, Docker Desktop is also able to run WebAssembly (Wasm) workloads. In this article, we’ll explore how one can run both containers and Wasm workloads together to build distributed architectures using the best of both worlds.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Beta Feature:&lt;/strong&gt; Wasm workloads in Docker Desktop is currently marked as a beta feature.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-we-are-going-to-build&#34;&gt;What we are going to build&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#prerequisites&#34;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#activate-wasm-workloads-in-docker-desktop&#34;&gt;Activate Wasm Workloads in Docker Desktop&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#which-wasm-runtimes-will-be-installed&#34;&gt;Which Wasm Runtimes will be Installed&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#hello-world---the-wasm-in-docker-desktop-edition&#34;&gt;Hello World - The Wasm in Docker Desktop edition&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#containerizing-a-spin-app&#34;&gt;Containerizing a Spin App&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#running-hello-world---the-wasm-in-docker-desktop-edition&#34;&gt;Running Hello World - The Wasm in Docker Desktop edition&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#testing-the-hello-world---the-wasm-in-docker-desktop-edition&#34;&gt;Testing the Hello World - The Wasm in Docker Desktop edition&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#cleaning-up&#34;&gt;Cleaning Up&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#orchestrating-the-sample-application&#34;&gt;Orchestrating the Sample Application&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#cloning-the-sample-application&#34;&gt;Cloning the Sample Application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#orchestration-with-docker-compose&#34;&gt;Orchestration with Docker Compose&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#creating-a-dedicated-docker-network&#34;&gt;Creating a dedicated Docker Network&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#orchestrating-services-with-compose&#34;&gt;Orchestrating Services with Compose&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#building-and-running-with-docker-compose&#34;&gt;Building and Running with Docker Compose&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#destroying-and-cleaning-up&#34;&gt;Destroying and Cleaning Up&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-we-are-going-to-build&#34;&gt;What we are going to build&lt;/h2&gt;&#xA;&lt;p&gt;Discovering new topics, or learning emerging technologies often goes best when looking at a practical example. For the sake of this article, we’ll start with a simple &lt;em&gt;Hello, World&lt;/em&gt;. From there, we’ll move on and orchestrate a simple three-tier application consisting of two containers (&lt;code&gt;frontend&lt;/code&gt; and &lt;code&gt;postgres&lt;/code&gt;) and a Wasm module (&lt;code&gt;api&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wasm ahead - Joining Fermyon</title>
      <link>https://thorsten-hans.com/wasm-ahead-joining-fermyon/</link>
      <pubDate>Mon, 08 Jan 2024 12:05:52 +0100</pubDate>
      <guid>https://thorsten-hans.com/wasm-ahead-joining-fermyon/</guid>
      <description>&lt;p&gt;Hey everyone 👋🏼&lt;/p&gt;&#xA;&lt;p&gt;A couple of weeks ago, I wrote about &lt;a href=&#34;https://thorsten-hans.com/farewell-to-thinktecture&#34;&gt;my farewell to Thinktecture&lt;/a&gt;. After sharing that news back in December, many readers, followers, and friends reached out to ask what my next chapter would be. It was really hard not to share the news right away, but I had to wait for the right time.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/wasm-ahead-joining-fermyon/images/fermyon.png&#34; height=&#34;180px&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I am &lt;strong&gt;more than excited&lt;/strong&gt; to finally unveil that I will join &lt;a href=&#34;http://fermyon.com/&#34;&gt;Fermyon&lt;/a&gt; as a Cloud Advocate starting February 1st, 2024. 🎉&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Farewell to Thinktecture</title>
      <link>https://thorsten-hans.com/farewell-to-thinktecture/</link>
      <pubDate>Wed, 20 Dec 2023 12:23:44 +0100</pubDate>
      <guid>https://thorsten-hans.com/farewell-to-thinktecture/</guid>
      <description>&lt;p&gt;Hello everyone 👋🏼,&lt;/p&gt;&#xA;&lt;p&gt;I wanna share some personal news with you today. After an incredible journey spanning almost nine years, I&amp;rsquo;ve decided to bid farewell to Thinktecture AG. My last day with the company will be at the end of January 2024.&lt;/p&gt;&#xA;&lt;p&gt;Reflecting on my time here, I am grateful for the experiences, challenges, and growth opportunities that have shaped me personally and professionally. Since joining in June 2015 as a Developer/Consultant, I&amp;rsquo;ve had the privilege of working alongside great people, helping developers navigate the complexities of emerging technologies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A comprehensive guide on authoring plugins for Fermyon Spin</title>
      <link>https://thorsten-hans.com/comprehensive-guide-on-authoring-plugins-for-fermyon-spin/</link>
      <pubDate>Fri, 25 Aug 2023 10:05:15 +0200</pubDate>
      <guid>https://thorsten-hans.com/comprehensive-guide-on-authoring-plugins-for-fermyon-spin/</guid>
      <description>&lt;p&gt;Did you know that you can extend the &lt;code&gt;spin&lt;/code&gt; CLI with custom plugins that integrate seamlessly and feel like functionality provided by Fermyon itself?&lt;/p&gt;&#xA;&lt;p&gt;No? &lt;strong&gt;No problem!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this article, we will explore how I build the &lt;code&gt;check-for-update&lt;/code&gt; plugin - a simple Spin plugin that allows you to check if your local installation of the &lt;code&gt;spin&lt;/code&gt; CLI is outdated. On top of building the actual Spin Plugin, we&amp;rsquo;ll also go through the process of testing and distributing the &lt;code&gt;check-for-update&lt;/code&gt; plugin. Finally we&amp;rsquo;ll wrap up this article by adding the custom Spin Plugin to the &lt;strong&gt;Spin Up Hub&lt;/strong&gt;, to ensure users can discover it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to use pattern matching</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-pattern-matching/</link>
      <pubDate>Thu, 03 Aug 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-pattern-matching/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to use pattern matching in Rust?&lt;/p&gt;&#xA;&lt;p&gt;In Rust, &lt;em&gt;pattern matching&lt;/em&gt; is a powerful language feature that allows you to destructure data and match it against specific patterns. It helps you handle different cases and extract values from complex data structures with concise and readable code. The &lt;code&gt;match&lt;/code&gt; keyword is used to perform pattern matching. Inside a &lt;code&gt;match&lt;/code&gt; block, you define patterns and corresponding code blocks for each pattern. When the input data matches a specific pattern, the corresponding code block will be executed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to share state between threads</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-share-state-between-threads/</link>
      <pubDate>Thu, 27 Jul 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-share-state-between-threads/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to share state between threads in Rust?&lt;/p&gt;&#xA;&lt;p&gt;In Rust, we have the ability to share data between threads by using concurrent data structures and synchronization tools provided by the Rust standard library. The most popular concurrent data structures in Rust include &lt;code&gt;Arc&lt;/code&gt; (atomic reference counting) and &lt;code&gt;Mutex&lt;/code&gt; (mutual exclusion). These allow multiple threads to access shared data in a safe and synchronized manner.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to write a function-like macro</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-function-like-macros/</link>
      <pubDate>Thu, 20 Jul 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-function-like-macros/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to implement a function-like macro in Rust?&lt;/p&gt;&#xA;&lt;p&gt;Function-like macros in Rust are powerful tools that allow you to define macros that resemble function calls. They can take in arguments and generate code based on those arguments. Function-like macros are defined using the &lt;code&gt;macro_rules!&lt;/code&gt; keyword and a set of rules that define patterns and transformations. For demonstration purposes, we&amp;rsquo;ll define the &lt;code&gt;factorial&lt;/code&gt; macro, which will generate code to calculate the factorial of a given number:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to write an HTTP API with Actix</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-http-api-with-actix/</link>
      <pubDate>Thu, 13 Jul 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-http-api-with-actix/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to implement the builder pattern in Rust?&lt;/p&gt;&#xA;&lt;p&gt;To create an HTTP API with &lt;em&gt;Actix&lt;/em&gt;, we must add the &lt;code&gt;actix-web&lt;/code&gt; crate to our project. We can add it using &lt;code&gt;cargo add&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add actix-web as dependency&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo add actix-web&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Having the crate added to our project, we can move on and use &lt;em&gt;Actix&lt;/em&gt; to implement our HTTP API. First, we will implement two handlers, responsible for constructing HTTP responses. &lt;code&gt;actix-web&lt;/code&gt; provides macros like &lt;code&gt;post&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &amp;hellip; with which we can decrate our handler functions to describe how &lt;em&gt;Actix&lt;/em&gt; should expose them via HTTP:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Implement the Builder Pattern</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-implement-the-builder-pattern/</link>
      <pubDate>Thu, 06 Jul 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-implement-the-builder-pattern/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to implement the builder pattern in Rust?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;derive_builder&lt;/code&gt; crate provides a macro which allows us to satisfy the builder pattern for your individual structs without writing custom code.&lt;/p&gt;&#xA;&lt;p&gt;First let&amp;rsquo;s add the dependency using &lt;code&gt;cargo add&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Implement a Generic Stack</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-implement-a-generic-stack/</link>
      <pubDate>Thu, 29 Jun 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-implement-a-generic-stack/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to implement a generic stack in Rust?&lt;/p&gt;&#xA;&lt;p&gt;To implement a generic stack, we can simply create a custom struct wrapping a vector (&lt;code&gt;Vec&amp;lt;T&amp;gt;&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Stack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;: &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;impl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Stack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nc&#34;&gt;Stack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Stack&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;: &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nb&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;is_empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;kt&#34;&gt;usize&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The implementation (&lt;code&gt;impl&amp;lt;T&amp;gt; Stack&amp;lt;T&amp;gt;&lt;/code&gt;) uses a generic type &lt;code&gt;T&lt;/code&gt; to allow it to store any type of data. The &lt;code&gt;Stack&lt;/code&gt; struct has four methods: &lt;code&gt;new&lt;/code&gt;, &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;pop&lt;/code&gt;, &lt;code&gt;is_empty&lt;/code&gt;, and &lt;code&gt;size&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Retrieve Image Dimensions</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-retrieve-image-dimensions/</link>
      <pubDate>Thu, 22 Jun 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-retrieve-image-dimensions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to retrieve the dimensions of an image in Rust?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;image&lt;/code&gt; crate provides necessary functionality to work with images in Rust. We can combine functionality provided by the crate with the &lt;code&gt;path&lt;/code&gt; module from Rusts standard library to solve this trivia. We also use the &lt;code&gt;anyhow&lt;/code&gt; crate, to streamline error handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to create a TCP Server</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-create-a-tcp-server/</link>
      <pubDate>Thu, 15 Jun 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-create-a-tcp-server/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to create a TCP server in Rust?&lt;/p&gt;&#xA;&lt;p&gt;We can use the &lt;code&gt;io&lt;/code&gt; and &lt;code&gt;net&lt;/code&gt; and &lt;code&gt;thread&lt;/code&gt; modules from Rust standard library this trivia.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;::&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;net&lt;/span&gt;::&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TcpListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TcpStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stream&lt;/span&gt;: &lt;span class=&#34;nc&#34;&gt;TcpStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 64 KB buffer for demonstration purposes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;65536&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;loop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bytes_read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;match&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;mut&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// End of stream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Error reading from stream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Echo the data back to the client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bytes_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Error writing to stream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;handle&lt;/code&gt; function takes in a &lt;code&gt;TcpStream&lt;/code&gt; object representing a client connection.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Implement Binary Search</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-implement-binary-search/</link>
      <pubDate>Thu, 08 Jun 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-implement-binary-search/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to implement binary search in Rust?&lt;/p&gt;&#xA;&lt;p&gt;All we need to implement binary search in Rust is bringing the &lt;code&gt;cmp&lt;/code&gt; module into scope. The &lt;code&gt;cmp::Ordering&lt;/code&gt; enum and the &lt;code&gt;cmd::Ord&lt;/code&gt; trait provide everything required to implement a generic binary search supporting all types implementing the &lt;code&gt;Ord&lt;/code&gt; trait.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Read a CSV File</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-read-a-csv-file/</link>
      <pubDate>Thu, 01 Jun 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-read-a-csv-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to read a &lt;code&gt;.csv&lt;/code&gt; file in Rust?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;csv&lt;/code&gt; crate provides necessary functionality to work with &lt;code&gt;.csv&lt;/code&gt; files in Rust. We can combine functionality provided by the crate with the &lt;code&gt;fs&lt;/code&gt; module from Rusts standard library to solve this trivia. We also use the &lt;code&gt;anyhow&lt;/code&gt; crate, to streamline error handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use Azure Cosmos DB as a key-value store for Fermyon Spin</title>
      <link>https://thorsten-hans.com/azure-cosmos-db-as-key-value-store-for-fermyon-spin/</link>
      <pubDate>Fri, 26 May 2023 10:04:05 +0200</pubDate>
      <guid>https://thorsten-hans.com/azure-cosmos-db-as-key-value-store-for-fermyon-spin/</guid>
      <description>&lt;p&gt;With the 1.2.1 release of Fermyon Spin, we can now use Azure Cosmos DB as a key-value store for persisting data when building serverless applications. In this article, I guide you through setting up the necessary infrastructure and creating a fairly simple app to store and retrieve arbitrary values using Azure Cosmos DB as the key-value store.&lt;/p&gt;&#xA;&lt;p&gt;All code shown in this article is also available on GitHub at &lt;a href=&#34;https://github.com/ThorstenHans/spin-kv-azure-cosmosdb&#34;&gt;https://github.com/ThorstenHans/spin-kv-azure-cosmosdb&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;provision-necessary-azure-infrastructure&#34;&gt;Provision necessary Azure Infrastructure&lt;/h2&gt;&#xA;&lt;p&gt;To use Azure Cosmos DB as a key-value store for a Spin application, we have to provision the following infrastructure components:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Compute a SHA256 Hash of a File</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-compute-a-sha256-hash-of-a-file/</link>
      <pubDate>Thu, 25 May 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-compute-a-sha256-hash-of-a-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to compute a &lt;code&gt;SHA256&lt;/code&gt; hash of a file in Rust?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;sha2&lt;/code&gt; crate is an implementation of cryptographic hash algorithms that we can use to compute hashes. We can combine functionality provided by the crate with the &lt;code&gt;fs&lt;/code&gt; and &lt;code&gt;io&lt;/code&gt; modules from Rusts standard library to solve this trivia. We also use the &lt;code&gt;anyhow&lt;/code&gt; crate, to streamline error handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Download an Image to a File</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-download-an-image-to-a-file/</link>
      <pubDate>Thu, 18 May 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-download-an-image-to-a-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to download an image from the web and store it in a file using Rust?&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;reqwest&lt;/code&gt; crate allows us to create HTTP requests with ease, we can combine functionality provided by the crate with the &lt;code&gt;fs&lt;/code&gt; and &lt;code&gt;io&lt;/code&gt; modules from Rusts standard library to solve this trivia. We also use the &lt;code&gt;anyhow&lt;/code&gt; crate, to streamline error handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Weekly Rust Trivia: How to Get all Files in a Directory</title>
      <link>https://thorsten-hans.com/weekly-rust-trivia-get-all-files-in-a-directory/</link>
      <pubDate>Thu, 11 May 2023 13:00:00 +0200</pubDate>
      <guid>https://thorsten-hans.com/weekly-rust-trivia-get-all-files-in-a-directory/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thorsten-hans.com/tags/weekly-rust-trivia&#34;&gt;&lt;em&gt;Weekly Rust Trivia&lt;/em&gt;&lt;/a&gt; is a problem-oriented series of articles that assist developers while learning Rust. Every article solves simple, everyday development tasks using the Rust standard library or leveraging popular and proven crates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to get a vector (&lt;code&gt;Vec&amp;lt;String&amp;gt;&lt;/code&gt;) containing all filenames of a particular directory in Rust?&lt;/p&gt;&#xA;&lt;p&gt;We can use the &lt;code&gt;fs&lt;/code&gt; and &lt;code&gt;io&lt;/code&gt; modules from Rust standard library this trivia.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;::&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_files_in_directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;: &lt;span class=&#34;kp&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&#34;nc&#34;&gt;io&lt;/span&gt;::&lt;span class=&#34;nb&#34;&gt;Result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Get a list of all entries in the folder&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entries&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fs&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;read_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Extract the filenames from the directory entries and store them in a vector&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_names&lt;/span&gt;: &lt;span class=&#34;nb&#34;&gt;Vec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entries&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter_map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_owned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;collect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In this example, we pass the path of the desired directory as argument to the &lt;code&gt;get_files_in_directory&lt;/code&gt; function. We then use the &lt;code&gt;fs::read_dir()&lt;/code&gt; method to get a list of all entries in the directory, which returns a &lt;code&gt;std::fs::ReadDir&lt;/code&gt; iterator. We use the &lt;code&gt;filter_map()&lt;/code&gt; method to filter out any &lt;code&gt;None&lt;/code&gt; values from the iterator, then check whether each entry is a file or a directory using the &lt;code&gt;is_file()&lt;/code&gt; method of the &lt;code&gt;std::path::Path&lt;/code&gt; struct.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I replaced the backend of my blog with Spin &amp; Fermyon Cloud</title>
      <link>https://thorsten-hans.com/how-to-blog-backends-with-spin-and-fermyon-cloud/</link>
      <pubDate>Thu, 04 May 2023 15:53:49 +0200</pubDate>
      <guid>https://thorsten-hans.com/how-to-blog-backends-with-spin-and-fermyon-cloud/</guid>
      <description>&lt;p&gt;Although my blog is built using &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt; - a famous Static Site Generator - I&amp;rsquo;ve some functionality baked into the page that requires having a backend (basically an HTTP API). Historically, the backend was hosted in Azure leveraging Azure Container Apps. Recently, I replaced the entire backend for my blog using a &lt;a href=&#34;https://www.fermyon.com/spin&#34;&gt;Fermyon Spin application&lt;/a&gt; hosted in the fully managed &lt;a href=&#34;https://www.fermyon.com/cloud&#34;&gt;Fermyon Cloud&lt;/a&gt;. In this article, I explain how I migrated away from containers towards server-side WebAssembly with Fermyon Spin 💫.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A First Glance at the Spin Router for Rust</title>
      <link>https://thorsten-hans.com/first-glance-at-spin-router-for-rust/</link>
      <pubDate>Tue, 18 Apr 2023 13:02:41 +0200</pubDate>
      <guid>https://thorsten-hans.com/first-glance-at-spin-router-for-rust/</guid>
      <description>&lt;p&gt;With the release of Fermyon Spin 1.1 (April 15th, 2023), the Spin SDKs for Rust and Go now provide a built-in router for HTTP applications. In this post, we will take a quick look at the built-in router supplied by the Spin SDK for Rust and build a small sample application to illustrate how one could solve day-to-day requirements when building serverless applications with WebAssembly (Wasm).&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#whats-the-purpose-of-a-router-in-http-apps&#34;&gt;What&amp;rsquo;s the purpose of a router in HTTP apps?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#our-demo-application&#34;&gt;Our demo application&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-requests-flow-through-a-spin-app&#34;&gt;How requests flow through a Spin app&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lets-implement-the-book-api-sample&#34;&gt;Let&amp;rsquo;s implement the book API sample&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#prerequirements&#34;&gt;Prerequirements&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#find-the-sample-repository-on-github&#34;&gt;Find the sample repository on GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-the-spin-application&#34;&gt;Create the Spin application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#key-value-store-configuration&#34;&gt;key-value store configuration&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#api-models-book-entity-persistence--handlers&#34;&gt;API models, book entity, persistence &amp;amp; handlers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-the-built-in-router-of-spin&#34;&gt;Configure the built-in Router of Spin&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;whats-the-purpose-of-a-router-in-http-apps&#34;&gt;What&amp;rsquo;s the purpose of a router in HTTP apps?&lt;/h2&gt;&#xA;&lt;p&gt;In HTTP applications, a router serves as a central component to direct incoming HTTP requests to the appropriate handler functions that can process and respond to those requests. The router does so by looking at different parts of an incoming HTTP request, such as:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s build a HTTP router for Spin with Rust</title>
      <link>https://thorsten-hans.com/http-router-for-spin-with-rust/</link>
      <pubDate>Fri, 14 Apr 2023 11:13:43 +0200</pubDate>
      <guid>https://thorsten-hans.com/http-router-for-spin-with-rust/</guid>
      <description>&lt;p&gt;Although we can build more complex HTTP applications in Fermyon Spin by composing multiple components, having a single component is easier, reduces development time, and is more flexible in the first place. In this article, I will explain how to implement simple routing capabilities using enumerations in Rust.&lt;/p&gt;&#xA;&lt;aside class=&#34;note&#34;&gt;&#xA;    &lt;h3&gt;Note: 💡 Spin 1.1 brings Built-in Router for Rust &amp;amp; Go&lt;/h3&gt;&#xA;    &lt;div class=&#34;content&#34;&gt;&lt;p&gt;Shortly after publishing this article, Fermyon released version 1.1 of Spin 🎉. With that release, the Spin SDK for Rust comes with a built-in router for HTTP applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let Spin lift your key-value store</title>
      <link>https://thorsten-hans.com/let-spin-lift-your-key-value-store/</link>
      <pubDate>Sat, 08 Apr 2023 15:41:09 +0200</pubDate>
      <guid>https://thorsten-hans.com/let-spin-lift-your-key-value-store/</guid>
      <description>&lt;p&gt;For quite sometime now (since version 0.9.0), Spin has had built-in key-value support. In this article, we will quickly investigate how we can use that built-in key-value support when building serverless applications with Fermyon Spin.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-are-key-value-stores&#34;&gt;What are key-value stores&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#why-should-you-use-key-value-stores-in-serverless-apps&#34;&gt;Why should you use key-value stores in serverless apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#key-value-stores-in-spin&#34;&gt;Key-value stores in Spin&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lets-build-a-simple-url-shortener-using-the-spin-key-value-store&#34;&gt;Let&amp;rsquo;s build a simple URL shortener using the Spin key-value store&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#add-necessary-dependencies-to-cargotoml&#34;&gt;Add necessary dependencies to &lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-spin-the-key-value-store-in-spintoml&#34;&gt;Configure Spin the key-value store in &lt;code&gt;Spin.toml&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#implement-the-handler-for-creating-new-short-links&#34;&gt;Implement the handler for creating new short-links&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#implement-the-handler-for-openening-a-short-link&#34;&gt;Implement the handler for openening a short-link&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#implement-the-handler-for-receiving-all-short-links&#34;&gt;Implement the handler for receiving all short-links&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#wiring-up-the-handlers&#34;&gt;Wiring up the handlers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#testing-the-url-shortener&#34;&gt;Testing the URL shortener&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-are-key-value-stores&#34;&gt;What are key-value stores&lt;/h2&gt;&#xA;&lt;p&gt;A key-value store is a type of database that stores data as a collection of key-value pairs. Each key in the database maps to a corresponding value, which can be retrieved by querying the key. Key-value stores are often used for storing and retrieving data quickly, as they can perform reads and writes with very low latency. They are commonly used in web applications, caching layers, and distributed systems and can be implemented using various technologies, such as Redis, Cassandra, etcd, SQLite, and others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CRUD in WebAssembly with Fermyon Spin and MySQL</title>
      <link>https://thorsten-hans.com/crud-in-webassembly-with-fermyon-spin-and-mysql/</link>
      <pubDate>Tue, 20 Dec 2022 16:32:11 +0100</pubDate>
      <guid>https://thorsten-hans.com/crud-in-webassembly-with-fermyon-spin-and-mysql/</guid>
      <description>&lt;p&gt;With the latest release of Fermyon Spin (v 0.7.0), we can persist data in MySQL (persistence in PostgreSQL has been available for quite some time now). Being able to persist and retrieve some sort of data is a must-have for any kind of application.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we’ll take a look at a full-fledged CRUD implementation. We’ll build an HTTP-API that allows its users to &lt;strong&gt;C&lt;/strong&gt;reate, &lt;strong&gt;R&lt;/strong&gt;ead, &lt;strong&gt;U&lt;/strong&gt;pdate, and &lt;strong&gt;D&lt;/strong&gt;elete products using corresponding HTTP methods (&lt;code&gt;POST&lt;/code&gt;, &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt;). All code shown in this article is available &lt;a href=&#34;https://github.com/ThorstenHans/spin-crud-mysql&#34;&gt;on GitHub at ThorstenHans/spin-crud-mysql&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Master configuration data in Fermyon Spin</title>
      <link>https://thorsten-hans.com/master-configuration-data-in-fermyon-spin/</link>
      <pubDate>Thu, 15 Dec 2022 14:01:01 +0100</pubDate>
      <guid>https://thorsten-hans.com/master-configuration-data-in-fermyon-spin/</guid>
      <description>&lt;p&gt;Every application has to deal with configuration data, and applications built using Fermyon Spin are no exception here. Instead of baking configuration data into your source code, you should attach it from the outside to alter behavior of your applications without having to re-compile your source code.&lt;/p&gt;&#xA;&lt;p&gt;This short article demonstrates how to deal with configuration data when building applications using WebAssembly and Fermyon Spin. You can find the source code of the sample application (spin-to-slack) &lt;a href=&#34;https://github.com/ThorstenHans/spin-to-slack&#34;&gt;on GitHub at ThorstenHans/spin-to-slack&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure Blob Storage using the Azure SDK for Go</title>
      <link>https://thorsten-hans.com/azure-blob-storage-using-azure-sdk-for-golang/</link>
      <pubDate>Wed, 14 Dec 2022 08:18:27 +0100</pubDate>
      <guid>https://thorsten-hans.com/azure-blob-storage-using-azure-sdk-for-golang/</guid>
      <description>&lt;p&gt;The Azure SDK team reworked the SDK for Go and released a bunch of Go modules to interact with popular cloud services - not just from a management perspective. In this post, we will take a closer look at the Go-modules for interacting with blob storage capabilities offered by Azure Storage Account.&lt;/p&gt;&#xA;&lt;p&gt;When interacting with Azure services, we must authenticate. The Azure SDK for Go supports different authentication patterns and flows. For demonstration purposes and to keep things simple, we’ll address two different authentication approaches as part of this article:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Microservices With WebAssembly and Fermyon Spin</title>
      <link>https://thorsten-hans.com/building-microservices-with-webassembly-and-fermyon-spin/</link>
      <pubDate>Sun, 11 Dec 2022 15:18:16 +0100</pubDate>
      <guid>https://thorsten-hans.com/building-microservices-with-webassembly-and-fermyon-spin/</guid>
      <description>&lt;p&gt;Although WebAssembly is an excellent fit for bringing complex solutions that need near-native runtime performance to the client (Browser), I see WebAssembly as a technology with way more potential and a way bigger impact on the server (read: cloud) in contrast. That said, WebAssembly will not replace containers on the server side. It’s an addition or alternative approach to packaging and distributing specific software components typically part of a bigger system. It’s on us - the developers and software architects - to decide if a container or WebAssembly is the better foundation for meeting a particular requirement.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hot-Reload .NET Configuration in Kubernetes with ConfigMaps</title>
      <link>https://thorsten-hans.com/hot-reload-net-configuration-in-kubernetes-with-configmaps/</link>
      <pubDate>Tue, 06 Dec 2022 20:39:10 +0100</pubDate>
      <guid>https://thorsten-hans.com/hot-reload-net-configuration-in-kubernetes-with-configmaps/</guid>
      <description>&lt;p&gt;Leveraging ConfigMaps, we can inject configuration data into applications running in Kubernetes. In this article, we’ll look at how to use a Kubernetes ConfigMap to configure a .NET application from the outside and automatically reload changes applied to the ConfigMap.&lt;/p&gt;&#xA;&lt;p&gt;Automatically reloading configuration data without redeploying the application and without doing a code change is super handy - not just for cloud-native applications. Being able to modify certain aspects of the application to hunt and pinpoint bugs is valuable and something you should consider adding to your applications too. For demonstration purposes, we will create a ConfigMap that allows us to modify the logging behavior of a simple HTTP API acting as the sample application.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Instrumenting .NET Apps with OpenTelemetry</title>
      <link>https://thorsten-hans.com/instrumenting-dotnet-apps-with-opentelemetry/</link>
      <pubDate>Thu, 24 Nov 2022 12:13:00 +0100</pubDate>
      <guid>https://thorsten-hans.com/instrumenting-dotnet-apps-with-opentelemetry/</guid>
      <description>&lt;p&gt;Instrumenting applications is critical to address observability in cloud-native. Receiving detailed traces, metrics, and logs in distributed application architectures is mission-critical regarding monitoring and troubleshooting.&lt;/p&gt;&#xA;&lt;p&gt;This article will look at &lt;a href=&#34;https://opentelemetry.io&#34;&gt;OpenTelemetry&lt;/a&gt; and instrument a .NET application to ensure our overall application becomes observable at runtime.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-opentelemetry&#34;&gt;What is OpenTelemetry&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-sample-application&#34;&gt;The sample application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#instrumenting-a-net-application-with-opentelemetry&#34;&gt;Instrumenting a .NET Application with OpenTelemetry&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#provide-a-signal-resource&#34;&gt;Provide a signal resource&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-tracing&#34;&gt;Configure Tracing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-logging&#34;&gt;Configure Logging&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-metrics&#34;&gt;Configure Metrics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#filtering-traces-with-custom-samplers&#34;&gt;Filtering Traces with custom Samplers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#custom-signals-with-opentelemetry&#34;&gt;Custom signals with OpenTelemetry&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#custom-traces&#34;&gt;Custom Traces&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#custom-baggage&#34;&gt;Custom Baggage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#custom-metrics&#34;&gt;Custom Metrics&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#kubernetes-deployment&#34;&gt;Kubernetes Deployment&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#query-traces-using-jaegerui&#34;&gt;Query traces using JaegerUI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#query-metrics-using-prometheus-queryui&#34;&gt;Query metrics using Prometheus QueryUI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-weve-covered-in-this-article&#34;&gt;What we&amp;rsquo;ve covered in this article&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-is-opentelemetry&#34;&gt;What is OpenTelemetry&lt;/h2&gt;&#xA;&lt;p&gt;Before we dive into the actual example, let&amp;rsquo;s do a quick refresher on OpenTelemetry, to ensure everybody is on track. OpenTelemetry (often referred to as OTel) is an open-source observability framework. It is a CNCF (Cloud Native Computing Foundation) project and has been on the &lt;strong&gt;incubating&lt;/strong&gt; maturity level since May the 7th of 2019. Historically, OpenTelemetry was started by combining two existing projects in the observability space &lt;a href=&#34;https://opentracing.io/&#34;&gt;OpenTracing&lt;/a&gt; and &lt;a href=&#34;https://opencensus.io&#34;&gt;OpenCensus&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Background Workers in Azure Container Apps with KEDA</title>
      <link>https://thorsten-hans.com/background-workers-in-azure-container-apps-with-keda/</link>
      <pubDate>Mon, 17 Oct 2022 13:23:33 +0000</pubDate>
      <guid>https://thorsten-hans.com/background-workers-in-azure-container-apps-with-keda/</guid>
      <description>&lt;p&gt;Azure Container Apps has quickly evolved and become one of the most popular platforms to run containerized workloads in Azure. This article will look at how to run Background Workers in Azure Container Apps leveraging built-in KEDA.&lt;/p&gt;&#xA;&lt;p&gt;Developers can use Azure Container Apps to run simple cloud-native applications leveraging popular underlying technologies like Kubernetes, Dapr, and KEDA. Before we dive into building and running a background worker in Azure Container Apps, let&amp;rsquo;s do a quick refresher on what KEDA is and what it can do for us.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to build multi-arch Docker Images with ease</title>
      <link>https://thorsten-hans.com/how-to-build-multi-arch-docker-images-with-ease/</link>
      <pubDate>Mon, 03 Oct 2022 13:25:44 +0200</pubDate>
      <guid>https://thorsten-hans.com/how-to-build-multi-arch-docker-images-with-ease/</guid>
      <description>&lt;p&gt;With the rise of ARM-based cloud computing resources and Apple&amp;rsquo;s switch from Intel-based CPUs to Apple Silicon, building Docker Images for multiple architectures has become increasingly important. We, as developers, must ensure that our applications can be executed on every potential architecture. We can easily achieve that by using Docker CLI and the &lt;code&gt;buildx&lt;/code&gt; plugin. This article will look at building Docker Images for multiple architectures by containerizing a simple Go application. Before we dive into building the multi-arch Docker Images, let&amp;rsquo;s quickly revisit what &lt;code&gt;buildx&lt;/code&gt; is.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Provision AKS and NAT Gateway with Terraform</title>
      <link>https://thorsten-hans.com/provision-aks-and-nat-gateway-with-terraform/</link>
      <pubDate>Fri, 09 Sep 2022 05:20:58 +0000</pubDate>
      <guid>https://thorsten-hans.com/provision-aks-and-nat-gateway-with-terraform/</guid>
      <description>&lt;p&gt;A Virtual Network NAT (NAT Gateway) is the recommended method for outbound connectivity when using Azure Virtual Networks (vNets). We can also use a NAT Gateway to route egress traffic from Azure Kubernetes Service (AKS), if the AKS cluster is deployed to a subnet associated with a NAT Gateway.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we&amp;rsquo;ll look at what NAT Gateway is, which benefits you get from using a NAT Gateway for outbound connectivity, and how we can provision both AKS and NAT Gateway using Terraform.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Patch Kubernetes objects with .NET: The Simple Way</title>
      <link>https://thorsten-hans.com/patch-kubernetes-object-with-dotnet-the-simple-way/</link>
      <pubDate>Thu, 01 Sep 2022 15:54:07 +0000</pubDate>
      <guid>https://thorsten-hans.com/patch-kubernetes-object-with-dotnet-the-simple-way/</guid>
      <description>&lt;p&gt;By leveraging the official Kubernetes client libraries for C#, we can easily interact with any Kubernetes cluster. We can also update (or patch) existing objects by invoking the corresponding &lt;code&gt;Patch*&lt;/code&gt; methods (like &lt;code&gt;PatchNamespacedPod&lt;/code&gt;, &lt;code&gt;PatchNamespacedConfigMap&lt;/code&gt;, and many more) provided by the client library.&lt;/p&gt;&#xA;&lt;p&gt;Although we can construct patches from different formats (&lt;code&gt;JsonPatch&lt;/code&gt;, &lt;code&gt;ApplyPatch&lt;/code&gt;, &lt;code&gt;MergePatch&lt;/code&gt;, or &lt;code&gt;StrategicMergePatch&lt;/code&gt;), we&amp;rsquo;ll focus on &lt;code&gt;JsonPatch&lt;/code&gt; for the sake of this article, and we will update the following &lt;em&gt;ConfigMap&lt;/em&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Deploy Azure Container Apps with Terraform</title>
      <link>https://thorsten-hans.com/deploy-azure-container-apps-with-terraform/</link>
      <pubDate>Fri, 12 Aug 2022 18:56:47 +0000</pubDate>
      <guid>https://thorsten-hans.com/deploy-azure-container-apps-with-terraform/</guid>
      <description>&lt;p&gt;Although we can provision and manage Azure Container Apps with Project Bicep (&lt;a href=&#34;https://www.thorsten-hans.com/how-to-deploy-azure-container-apps-with-bicep/&#34;&gt;as explained in this article&lt;/a&gt;), people keep on asking how to manage their Azure Container Apps using HashiCorp Terraform. This article demonstrates how to provision Azure Container Apps with Terraform utilizing a combination of the well-known AzureRM provider (&lt;code&gt;azurerm&lt;/code&gt;) and the recently released AzAPI provider (&lt;code&gt;azapi&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-the-azapi-provider&#34;&gt;What is the AzAPI provider&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-azure-container-apps-with-terraform&#34;&gt;Deploy Azure Container Apps with Terraform&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#bootstrap-the-project-with-azurerm-and-azapi-providers&#34;&gt;Bootstrap the project with &lt;code&gt;AzureRM&lt;/code&gt; and &lt;code&gt;AzAPI&lt;/code&gt; providers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#authenticate-using-an-service-principal&#34;&gt;Authenticate using an Service Principal&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-locals-and-variables&#34;&gt;Create Locals and Variables&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#specify-resource-group-and-log-analytics-workspace-with-azurerm&#34;&gt;Specify Resource Group and Log Analytics Workspace with AzureRM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#hands-on-use-the-azapi-provider&#34;&gt;Hands-on: Use the AzAPI provider&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#hint-vscode-extension-for-the-azapi-provider&#34;&gt;Hint: VSCode extension for the AzAPI provider&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#describe-the-azure-container-app-environment-with-azapi&#34;&gt;Describe the Azure Container App Environment with AzAPI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#describe-the-azure-container-apps-with-azapi&#34;&gt;Describe the Azure Container Apps with AzAPI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#provision-azure-container-apps-with-terraform&#34;&gt;Provision Azure Container Apps with Terraform&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-weve-covered-in-this-article&#34;&gt;What we&amp;rsquo;ve covered in this article&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Before we dive into provisioning a sample workload, let&amp;rsquo;s look at what the AzAPI provider is and how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s build a gRPC server and client in Rust with tonic</title>
      <link>https://thorsten-hans.com/grpc-services-in-rust-with-tonic/</link>
      <pubDate>Thu, 07 Jul 2022 17:13:13 +0200</pubDate>
      <guid>https://thorsten-hans.com/grpc-services-in-rust-with-tonic/</guid>
      <description>&lt;p&gt;Last week I was showcasing WebAssembly in the cloud using &lt;a href=&#34;https://krustlet.dev/&#34;&gt;krustlet&lt;/a&gt; and &lt;a href=&#34;https://spin.fermyon.dev/&#34;&gt;Fermyon Spin&lt;/a&gt; at Cloudland 2022 in Brühl (Germany). While preparing for the talk, I recognized how much I&amp;rsquo;d missed Rust 🦀 over the past months.&lt;/p&gt;&#xA;&lt;p&gt;Although I&amp;rsquo;ve been reading articles and watching some videos on Rust in general from time to time, I missed doing some hands-on. So I dedicated some time to do a quick refresher for Rust, updated my local installation &lt;code&gt;rustup update&lt;/code&gt;, and wrote a small gRPC server in Rust using &lt;a href=&#34;https://github.com/hyperium/tonic&#34;&gt;tonic&lt;/a&gt;. However, before we dive into the tutorial, let&amp;rsquo;s quickly look at what tonic is and what we can do with it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Awarded as a Docker Captain and as a Microsoft MVP</title>
      <link>https://thorsten-hans.com/awarded-as-docker-captain-and-microsoft-mvp/</link>
      <pubDate>Tue, 05 Jul 2022 19:02:29 +0200</pubDate>
      <guid>https://thorsten-hans.com/awarded-as-docker-captain-and-microsoft-mvp/</guid>
      <description>&lt;p&gt;Although we took ten days off and went to Egypt for vacation, the weeks were quite packed. Besides the entire family enjoying the stunning weather in Egypt, two things happened that I wanted to share with you.&lt;/p&gt;&#xA;&lt;p&gt;First, I am humbled and honored to share that I got awarded as a &lt;strong&gt;Docker Captain in June 2022&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/awarded-as-docker-captain-and-microsoft-mvp/images/docker-captain.webp&#34; height=&#34;400px&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;Docker Captain 2022&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Joining an exclusive community of well-known, individual Docker experts means a lot to me. It&amp;rsquo;s a community where everyone is driven by passion for Docker and Docker-related technologies. Being surrounded by professionals that also share similar interests is priceless and made the program always appealing to me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker SBOM - or how to dive into shift-left security</title>
      <link>https://thorsten-hans.com/docker-sbom-dive-into-shift-left-security/</link>
      <pubDate>Tue, 03 May 2022 08:02:03 +0200</pubDate>
      <guid>https://thorsten-hans.com/docker-sbom-dive-into-shift-left-security/</guid>
      <description>&lt;p&gt;Recently, Docker added a new command to Docker CLI. &lt;code&gt;docker sbom&lt;/code&gt;. We can use this command to create a Software Bill of Materials (SBOM) for any container image. Another great capability when it comes to shift-left security.&#xA;This post explains why you should want to have SBOMs for all the container images of your application. How to get them and which actions you can take based on SBOMs to improve the overall security of your containerized workloads.&lt;/p&gt;</description>
    </item>
    <item>
      <title>az containerapp up - AKA amazing inner-loop performance</title>
      <link>https://thorsten-hans.com/az-containerapp-aka-amazing-loop-performance/</link>
      <pubDate>Fri, 29 Apr 2022 16:32:22 +0200</pubDate>
      <guid>https://thorsten-hans.com/az-containerapp-aka-amazing-loop-performance/</guid>
      <description>&lt;p&gt;The Azure Container App team released a new command to simplify the deployment process. With &lt;code&gt;az containerapp up&lt;/code&gt;, you can deploy your workload to Azure Container Apps (ACA) with &lt;strong&gt;one&lt;/strong&gt; command. This article demonstrates how to use &lt;code&gt;az containerapp up&lt;/code&gt; and how you can tailor its behavior to meet your requirements.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-does-az-containerapp-up-actually-do&#34;&gt;What does &lt;code&gt;az containerapp up&lt;/code&gt; actually do?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#install-the-containerapp-extension-for-azure-cli&#34;&gt;Install the containerapp extension for Azure CLI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#all-in-one-deployment-to-azure-container-apps&#34;&gt;All-in-one deployment to Azure Container Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#tailored-deployments-aka-reusing-existing-dependencies&#34;&gt;Tailored Deployments (aka reusing existing dependencies)&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-to-use-existing-azure-container-registry-with-az-containerapp-up&#34;&gt;How to use existing Azure Container Registry with &lt;code&gt;az containerapp up&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-to-use-existing-azure-log-analytics-workspace-with-az-containerapp-up&#34;&gt;How to use existing Azure Log Analytics Workspace with &lt;code&gt;az containerapp up&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#how-to-deploy-to-an-existing-container-app-environment-with-az-containerapp-up&#34;&gt;How to deploy to an existing Container App Environment with &lt;code&gt;az containerapp up&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#further-customizations&#34;&gt;Further customizations&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#my-take-on-using-az-containerapp-up-for-continuous-deployment&#34;&gt;My take on using &lt;code&gt;az containerapp up&lt;/code&gt; for continuous deployment&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-we-have-covered-today&#34;&gt;What we have covered today&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#recap&#34;&gt;Recap&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-does-az-containerapp-up-actually-do&#34;&gt;What does &lt;code&gt;az containerapp up&lt;/code&gt; actually do?&lt;/h2&gt;&#xA;&lt;p&gt;You can think of &lt;code&gt;az containerapp up&lt;/code&gt; as a meta-command that will spin up all necessary resources to take your application source and run it in ACA. Under the covers, it does the following&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to lint Docker images with Dockle</title>
      <link>https://thorsten-hans.com/lint-docker-images-with-dockle/</link>
      <pubDate>Thu, 28 Apr 2022 19:26:56 +0200</pubDate>
      <guid>https://thorsten-hans.com/lint-docker-images-with-dockle/</guid>
      <description>&lt;p&gt;We&amp;rsquo;ve been building container images for quite some time (read almost decades) now. Although tooling, editor, and IDE support have matured, we should not forget about hardening container images in the inner loop. This post demonstrates how to use &lt;a href=&#34;https://github.com/goodwithtech/dockle/&#34;&gt;&lt;code&gt;Dockle&lt;/code&gt;&lt;/a&gt; to lint your container images according to security best practices.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-should-we-lint-container-images&#34;&gt;Why should we lint container images&lt;/h2&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve to talk about the „&lt;strong&gt;why&lt;/strong&gt;&amp;quot;. Why should we lint container images? We should lint container images to&lt;/p&gt;</description>
    </item>
    <item>
      <title>Check if your application is running in a Docker container</title>
      <link>https://thorsten-hans.com/check-if-application-is-running-in-docker-container/</link>
      <pubDate>Thu, 21 Apr 2022 17:22:42 +0000</pubDate>
      <guid>https://thorsten-hans.com/check-if-application-is-running-in-docker-container/</guid>
      <description>&lt;p&gt;Especially when building cloud-native applications, we tend to develop applications that run in any environment. We design components, so we can run them with or without container technologies to ensure we can host the application on different application platforms. However, sometimes we may have to determine if our applications are running inside a Docker container or not. This allows us to take particular actions at runtime without adding additional environment variables or configuration values (state). Every container has a &lt;code&gt;.dockerenv&lt;/code&gt; file in the file system&amp;rsquo;s root. That said, we can quickly check for the existence of that file to determine reliably if our application runs inside a container or not. For demonstration purposes, this post shows how to determine if the application is executed in a container using Go and Rust.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managed Identities With Azure Container Apps</title>
      <link>https://thorsten-hans.com/managed-identities-with-azure-container-apps/</link>
      <pubDate>Thu, 14 Apr 2022 13:21:20 +0000</pubDate>
      <guid>https://thorsten-hans.com/managed-identities-with-azure-container-apps/</guid>
      <description>&lt;p&gt;Yesterday (13th of April 2022), we saw a couple of new features appearing in Azure Container Apps (ACA). This article will use managed identities with Azure Container Apps, which allows us to authenticate and rely on Role-Based Access Control (RBAC) when interacting with other Azure services. Before we dive into using managed identities in Azure Container Apps, let&amp;rsquo;s do a quick refresher about managed identities to bring everyone on track.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speaker Bio</title>
      <link>https://thorsten-hans.com/speaker-bio/</link>
      <pubDate>Tue, 12 Apr 2022 12:17:33 +0000</pubDate>
      <guid>https://thorsten-hans.com/speaker-bio/</guid>
      <description>&lt;h2 id=&#34;english-speaker-bio&#34;&gt;English Speaker Bio&lt;/h2&gt;&#xA;&lt;p&gt;Thorsten Hans is a Senior Developer Advocate at Akamai, Docker Captain, and Wasm enthusiast. He thrives on pushing the limits of WebAssembly and Edge Computing to help developers build high-performance distributed systems. Thorsten shares his technical deep-dives via his blog and on global stages to shape the cloud’s future.&lt;/p&gt;&#xA;&lt;h2 id=&#34;german-speaker-bio&#34;&gt;German Speaker Bio&lt;/h2&gt;&#xA;&lt;p&gt;Thorsten Hans ist Senior Dev Developer bei Akamai, Docker Captain und Wasm-Enthusiast. Er liebt es, die Grenzen von WebAssembly und Edge Computing auszuloten, um Entwicklern beim Bau hocheffizienter, verteilter Systeme zu helfen. Seine Deep-Dives teilt er regelmäßig auf seinem Blog und auf den Tech-Bühnen dieser Welt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Logging in Kubernetes with Loki and the PLG stack</title>
      <link>https://thorsten-hans.com/logging-in-kubernetes-with-loki-and-plg-stack/</link>
      <pubDate>Tue, 05 Apr 2022 13:30:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/logging-in-kubernetes-with-loki-and-plg-stack/</guid>
      <description>&lt;p&gt;Observability is a huge topic in cloud-native environments. One must collect, understand, and investigate millions of logs from different sources to understand what&amp;rsquo;s happening at an application&amp;rsquo;s runtime. Log stacks - like PLG - address all those concerns and are typically composed of multiple applications with dedicated responsibilities. At the core of every log stack, a log aggregation system is responsible for indexing, storing, and exposing a query interface for log messages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s build a CLI in Go with Cobra</title>
      <link>https://thorsten-hans.com/lets-build-a-cli-in-go-with-cobra/</link>
      <pubDate>Tue, 29 Mar 2022 16:13:54 +0200</pubDate>
      <guid>https://thorsten-hans.com/lets-build-a-cli-in-go-with-cobra/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cobra.dev/&#34;&gt;Cobra&lt;/a&gt; is perhaps the most popular Go-module to build powerful command-line applications (CLIs) in almost no time. This article will look at what Cobra is, its core concepts, and which features it brings to the table for building CLI applications.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/lets-build-a-cli-in-go-with-cobra/images/cobra-logo.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;https://github.com/spf13/cobra&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Through this article, we will build &lt;code&gt;stringer&lt;/code&gt;, a fairly simple CLI application. &lt;code&gt;stringer&lt;/code&gt;allows its users to reverse and inspect strings. Although the feature set is not that big, it is just enough to use and understand the core concepts of Cobra.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom health probes with Azure Container Apps</title>
      <link>https://thorsten-hans.com/custom-health-probes-with-azure-container-apps/</link>
      <pubDate>Fri, 25 Mar 2022 11:41:56 +0000</pubDate>
      <guid>https://thorsten-hans.com/custom-health-probes-with-azure-container-apps/</guid>
      <description>&lt;p&gt;In Kubernetes, individual probes like &lt;code&gt;liveness&lt;/code&gt;, &lt;code&gt;readiness&lt;/code&gt;, and &lt;code&gt;startup&lt;/code&gt; are mission-critical when deploying applications. Kubernetes uses probes to determine the health of containers in a &lt;em&gt;Pod&lt;/em&gt;. Kubernetes may restart &lt;em&gt;Pods&lt;/em&gt; because of failing probes. On top of that, Kubernetes uses probes to determine if a particular container can deal with incoming requests. Kubernetes &lt;em&gt;Services&lt;/em&gt; will route incoming requests to containers that made it to the &lt;code&gt;Ready&lt;/code&gt; state. If a readiness probe is defined on a container, that container must successfully respond to the probe invocation to become &lt;code&gt;Ready&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to run your own Helm Repository on Azure Container Apps</title>
      <link>https://thorsten-hans.com/how-to-run-your-own-helm-repository-on-azure-container-apps/</link>
      <pubDate>Tue, 15 Mar 2022 15:29:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-run-your-own-helm-repository-on-azure-container-apps/</guid>
      <description>&lt;p&gt;Do you use Helm charts for packaging and deploying your stuff to Kubernetes? Have you ever thought about creating your own Helm repository to store and distribute your charts? This article explains how to take &lt;a href=&#34;https://chartmuseum.com/&#34;&gt;ChartMuseum&lt;/a&gt; and run it on Azure Container Apps backed by an Azure Storage Account. You can find all source code shown in this example in the &lt;code&gt;005-chartmuseum&lt;/code&gt; folder of &lt;a href=&#34;https://github.com/ThorstenHans/azure-container-apps-samples&#34;&gt;my Azure Container Apps samples repository on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Master Azure CLI queries - The missing manual</title>
      <link>https://thorsten-hans.com/master-azure-cli-queries-the-missing-manual/</link>
      <pubDate>Wed, 09 Mar 2022 20:28:35 +0100</pubDate>
      <guid>https://thorsten-hans.com/master-azure-cli-queries-the-missing-manual/</guid>
      <description>&lt;p&gt;Have you ever used Azure CLI? Azure CLI is probably the best way to interact with Microsoft Azure and to automate recurring tasks in the context of Microsoft&amp;rsquo;s public cloud.&#xA;However, I often see people writing fundamental shell scripts to execute more advanced queries or filter simple lists of elements returned from Azure CLI.&lt;/p&gt;&#xA;&lt;p&gt;Although using shell scripts is an excellent way to get things done, it&amp;rsquo;s more time-consuming compared to learning all the capabilities that Azure CLI brings to the table.&#xA;Microsoft provides some good documentation on how to write fundamental queries with Azure CLI. However, more advanced, real-world queries are not documented. This is why people start tinkering with shell scripts instead of using built-in capabilities.&#xA;So let&amp;rsquo;s quickly catch up with fundamental &lt;a href=&#34;https://jmespath.org/&#34;&gt;JMESPath&lt;/a&gt; queries that every Azure CLI user should know.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom health probes with Application Gateway Ingress Controller</title>
      <link>https://thorsten-hans.com/custom-health-probes-with-application-gateway-ingress-controller/</link>
      <pubDate>Wed, 16 Feb 2022 19:58:50 +0100</pubDate>
      <guid>https://thorsten-hans.com/custom-health-probes-with-application-gateway-ingress-controller/</guid>
      <description>&lt;p&gt;With &lt;a href=&#34;https://github.com/Azure/application-gateway-kubernetes-ingress/&#34;&gt;Azure Application Gateway Ingress Controller (AGIC)&lt;/a&gt;, we can integrate an existing Azure Application Gateway instance with Kubernetes. In Kubernetes, an ingress controller is responsible for routing inbound requests to applications running inside the cluster. AGIC automatically watches &lt;code&gt;Ingress&lt;/code&gt; resources inside your cluster and automatically updates the linked instance of Azure Application Gateway upon reconciliation.&lt;/p&gt;&#xA;&lt;p&gt;Azure Application Gateway uses &lt;em&gt;health probes&lt;/em&gt; to determine if the desired backend target can serve requests. Azure Application Gateway won&amp;rsquo;t send incoming requests to the backend target if a configured health probe fails. Instead, it will respond to the request with an &lt;code&gt;HTTP 502&lt;/code&gt;. If the health probe is successful, incoming requests will be forwarded to the desired backend target, responsible for handling the requests and generating proper responses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exposing gRPC services in Azure Container Apps</title>
      <link>https://thorsten-hans.com/exposing-grpc-services-in-azure-container-apps/</link>
      <pubDate>Mon, 07 Feb 2022 11:06:35 +0000</pubDate>
      <guid>https://thorsten-hans.com/exposing-grpc-services-in-azure-container-apps/</guid>
      <description>&lt;p&gt;In my recent webinar on Azure Container Apps, an attendee asked if gRPC services could be exposed. Although I was pretty sure this was possible, I asked the attendee for some patience because I wanted to try this independently. Long story short, it&amp;rsquo;s possible. This post demonstrates how to expose gRPC services with a simple .NET 6 gRPC API and a corresponding client. We&amp;rsquo;ll also talk about a small glitch that may prevent your gRPC services hosted in Azure Container Apps from being accessible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate Azure with Azure Functions and Go</title>
      <link>https://thorsten-hans.com/automate-azure-with-azure-functions-and-go/</link>
      <pubDate>Sat, 18 Dec 2021 10:52:45 +0000</pubDate>
      <guid>https://thorsten-hans.com/automate-azure-with-azure-functions-and-go/</guid>
      <description>&lt;p&gt;Automation is key to success in the cloud. In this article, we will look at how to automate recurring tasks using &lt;a href=&#34;https://pkg.go.dev/github.com/Azure/azure-sdk-for-go&#34;&gt;Azure SDK for Go&lt;/a&gt; with Azure Functions. This article contributes to the &lt;a href=&#34;https://golang.christmas/&#34;&gt;Go Advent Calendar&lt;/a&gt;🎄. If you haven&amp;rsquo;t heard about it, you should check out all the awesome content contributed to the Go Advent Calendar and level up your Go programming skill during the holiday season.&lt;/p&gt;&#xA;&lt;p&gt;The sample code shown in this article can be found &lt;a href=&#34;https://github.com/ThorstenHans/go-advent&#34;&gt;in this repository on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Manage ACR geo-replications with Azure CLI</title>
      <link>https://thorsten-hans.com/manage-acr-geo-replications-with-azurecli/</link>
      <pubDate>Wed, 01 Dec 2021 17:02:05 +0000</pubDate>
      <guid>https://thorsten-hans.com/manage-acr-geo-replications-with-azurecli/</guid>
      <description>&lt;p&gt;With Azure Container Registry (ACR), we can use geo replications to deploy the service as close as possible to team members and regional application deployments. Azure Traffic Manager will route requests to the closes replication behind the scenes. Artifacts stored in the ACR instance will be synched between all geo replications automatically. I advise customers to use geo replications to&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;increase resilience (region outage will have no effect, services and users can consume container images from another geo-replication)&lt;/li&gt;&#xA;&lt;li&gt;optimize container boot time in cross-region deployments (pull operations will be faster)&lt;/li&gt;&#xA;&lt;li&gt;reduce costs for traffic (egress traffic to other regions)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;To use geo replication in ACR, the &lt;strong&gt;Premium SKU&lt;/strong&gt; is required. You&amp;rsquo;ll be charged with the ACR service fee per geo replication.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s build a serverless Christmas image tagging solution with Azure Computer Vision</title>
      <link>https://thorsten-hans.com/serverless-image-tagging-with-azure-computer-vision/</link>
      <pubDate>Thu, 25 Nov 2021 15:06:37 +0000</pubDate>
      <guid>https://thorsten-hans.com/serverless-image-tagging-with-azure-computer-vision/</guid>
      <description>&lt;p&gt;By leveraging serverless capabilities provided by Azure, we can focus on actually building something instead of managing or taming the necessary infrastructure. &lt;a href=&#34;https://azure.microsoft.com/en-us/services/cognitive-services/custom-vision-service/&#34;&gt;Azure Computer Vision&lt;/a&gt; is one of those serverless capabilities you can use to build cool things rapidly.&lt;/p&gt;&#xA;&lt;p&gt;Christmas 🎅🏼 is around the corner! That said, it&amp;rsquo;s time to gear up and flood social media with properly tagged images. To do so, we will build a simple &lt;strong&gt;serverless solution that tags all your Christmas images automatically&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Traffic split in Azure Container Apps</title>
      <link>https://thorsten-hans.com/traffic-split-in-azure-container-apps/</link>
      <pubDate>Thu, 04 Nov 2021 18:45:15 +0000</pubDate>
      <guid>https://thorsten-hans.com/traffic-split-in-azure-container-apps/</guid>
      <description>&lt;p&gt;With Azure Container Apps (ACA), Microsofts latest serverless runtime for containerized workloads in Azure, we can customize certain aspects of traffic routing on the ingress level. This article will look at traffic split and configure a relatively simple API to leverage a tailored traffic split configuration in Azure Container Apps. If you are new to Azure Container Apps, consider reading my article &lt;a href=&#34;https://www.thorsten-hans.com/introduction-to-azure-container-apps/&#34;&gt;&amp;ldquo;Introduction to Azure Container Apps&amp;rdquo;&lt;/a&gt; first.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-traffic-split&#34;&gt;What is traffic split&lt;/h2&gt;&#xA;&lt;p&gt;First, let&amp;rsquo;s quickly revisit what traffic split is. Traffic split is a mechanism that routes configurable percentages of incoming requests (traffic) to various downstream services. See the following picture, which shows the relation between ACA ingress controller, traffic split configuration, and downstream services (or revisions in the case of ACA):&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to deploy Azure Container Apps with Bicep</title>
      <link>https://thorsten-hans.com/how-to-deploy-azure-container-apps-with-bicep/</link>
      <pubDate>Wed, 03 Nov 2021 19:21:33 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-deploy-azure-container-apps-with-bicep/</guid>
      <description>&lt;p&gt;Although Azure Portal and Azure CLI provide a decent experience to deploy Azure Container Apps, I prefer using Infrastructure as Code (IaC) to deploy and manage my cloud infrastructure. That said, this post guides you through the process of deploying Azure Container Apps using Bicep.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;!Note that container apps are moving namespace. In March 2022, ACA will shift from the &lt;code&gt;Microsoft.Web&lt;/code&gt; namespace to &lt;code&gt;Microsoft.Apps&lt;/code&gt;. Everything described here should still work, but you have to change the namespace!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introduction to Azure Container Apps</title>
      <link>https://thorsten-hans.com/introduction-to-azure-container-apps/</link>
      <pubDate>Tue, 02 Nov 2021 23:36:24 +0000</pubDate>
      <guid>https://thorsten-hans.com/introduction-to-azure-container-apps/</guid>
      <description>&lt;p&gt;During Ignite 2021, Microsoft announced the public preview of &lt;strong&gt;Azure Container Apps&lt;/strong&gt;, a fully managed serverless container runtime for building and running modern applications at scale.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;The announcement of &lt;a href=&#34;https://x.com/hashtag/AzureContainerApps?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#AzureContainerApps&lt;/a&gt; was definitely my personal highlight at &lt;a href=&#34;https://x.com/hashtag/MSIgnite?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;#MSIgnite&lt;/a&gt; so far 🚀 &lt;a href=&#34;https://t.co/zbHaYotIWi&#34;&gt;pic.twitter.com/zbHaYotIWi&lt;/a&gt;&lt;/p&gt;&amp;mdash; Thorsten Hans 🦀 (@ThorstenHans) &lt;a href=&#34;https://x.com/ThorstenHans/status/1455676602948505609?ref_src=twsrc%5Etfw&#34;&gt;November 2, 2021&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.x.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;p&gt;This article gives you a brief introduction to what Azure Container Apps is, which technologies are used to provide this fantastic serverless container runtime and how you can build and run containerized workloads on Azure Container Apps&lt;/p&gt;</description>
    </item>
    <item>
      <title>Distribute WebAssembly modules as OCI artifacts</title>
      <link>https://thorsten-hans.com/distribute-webassembly-modules-as-oci-artifacts/</link>
      <pubDate>Tue, 02 Nov 2021 14:19:39 +0000</pubDate>
      <guid>https://thorsten-hans.com/distribute-webassembly-modules-as-oci-artifacts/</guid>
      <description>&lt;p&gt;When using WebAssembly (Wasm) on platforms different than the browser, we have to care about distribution. How can we securely transfer our Wasm modules to desired environments? How can we verify integrity to ensure Wasm modules were not compromised during distribution?&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s take a look at the container world. Container registries (those that implement the Docker Registry 2.0 standard (or to be more precise, the &lt;a href=&#34;https://github.com/opencontainers/distribution-spec&#34;&gt;OCI distribution spec&lt;/a&gt;)) are a trusted distribution channel that addresses all the questions raised before. This does not mean that we have to package our Wasm modules as containers! Container registries can store and distribute more than just containers. Container registries can store any OCI compliant artifact. And that&amp;rsquo;s exactly what we will create from our Wasm modules to leverage container registries as a trusted distribution channel.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Add krustlet node pools to Azure Kubernetes Service</title>
      <link>https://thorsten-hans.com/add-krustlet-node-pools-to-azure-kubernetes-service/</link>
      <pubDate>Tue, 26 Oct 2021 14:23:42 +0000</pubDate>
      <guid>https://thorsten-hans.com/add-krustlet-node-pools-to-azure-kubernetes-service/</guid>
      <description>&lt;p&gt;If we had traveled three years back in time, running WebAssembly (Wasm) workloads in Kubernetes would have sounded like fiction. Today, it&amp;rsquo;s real! With &lt;a href=&#34;https://krustlet.dev&#34;&gt;krustlet&lt;/a&gt;, developers can run Wasm workloads directly in Kubernetes. This article will look at what krustlet is and how we can bring it to our Azure Kubernetes Service (AKS) clusters.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-krustlet&#34;&gt;What is Krustlet&lt;/h2&gt;&#xA;&lt;p&gt;Krustlet is a &lt;a href=&#34;https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/&#34;&gt;Kubernetes kubelet&lt;/a&gt; written in Rust to run Wasm workloads in Kubernetes. Nodes running &lt;em&gt;krustlet&lt;/em&gt; have special tolerations assigned, which we can use within Kubernetes manifests, to ensure Wasm workloads will be scheduled to &lt;em&gt;krustlet&lt;/em&gt; nodes. Under the covers, &lt;em&gt;krustlet&lt;/em&gt; uses &lt;a href=&#34;https://wasmtime.dev/&#34;&gt;wasmtime&lt;/a&gt; as the runtime for our Wasm workloads using the &lt;code&gt;wasm32-wasi&lt;/code&gt; architecture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Read-only filesystems in Docker and Kubernetes</title>
      <link>https://thorsten-hans.com/read-only-filesystems-in-docker-and-kubernetes/</link>
      <pubDate>Tue, 19 Oct 2021 13:31:43 +0000</pubDate>
      <guid>https://thorsten-hans.com/read-only-filesystems-in-docker-and-kubernetes/</guid>
      <description>&lt;p&gt;You should harden your containerized workloads to minimize the attack surface of your overall application. Paying close attention while building your container images and applying proven patterns will reduce the risk of an attack while running your application in production.&#xA;One of the simple practices to apply is setting the filesystem of your containers to read-only, and that&amp;rsquo;s exactly what we will cover in this article.&lt;/p&gt;&#xA;&lt;h2 id=&#34;read-only-filesystems-in-docker&#34;&gt;Read-only filesystems in Docker&lt;/h2&gt;&#xA;&lt;p&gt;Docker and compliant CLIs offer the &lt;code&gt;read-only&lt;/code&gt; flag, which we can use when mounting the container&amp;rsquo;s filesystem as read-only. Let&amp;rsquo;s try it! Let&amp;rsquo;s start a new container from the official &lt;code&gt;ubuntu&lt;/code&gt; image with an interactive TTY, to verify that the filesystem is read-only.&#xA;The following &lt;code&gt;docker run&lt;/code&gt; command uses &lt;code&gt;-it&lt;/code&gt; (creates an interactive pseudo TTY and ensures STDIN is kept open) and &lt;code&gt;--rm&lt;/code&gt; (removes the container automatically once exited):&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Build CLIs in Rust with StructOpt</title>
      <link>https://thorsten-hans.com/how-to-build-clis-in-rust-with-structopt/</link>
      <pubDate>Mon, 11 Oct 2021 10:03:31 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-build-clis-in-rust-with-structopt/</guid>
      <description>&lt;p&gt;As my journey on learning Rust continues, I looked at several options for building Command-Line Interfaces (CLIs) in Rust. There are several crates available you can use to craft tailored CLIs in Rust. At some point, &lt;a href=&#34;https://github.com/TeXitoi/structopt&#34;&gt;StructOpt&lt;/a&gt; got my attention, and I saw a couple of people tweeting and writing about it. That said, this article helps you understanding &lt;em&gt;StructOpt&lt;/em&gt; and gives you a head-start when it comes to building custom CLIs in Rust.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Calling HTTP APIs in Rust with reqwest</title>
      <link>https://thorsten-hans.com/calling-http-apis-in-rust-with-reqwest/</link>
      <pubDate>Wed, 15 Sep 2021 11:31:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/calling-http-apis-in-rust-with-reqwest/</guid>
      <description>&lt;p&gt;As part of my Rust journey, I&amp;rsquo;m building a simple CLI to get rid of manual tasks I&amp;rsquo;ve to complete on regular basis. Some of those tasks can be automated by leveraging a HTTP client in Rust. A quick research led me to &lt;a href=&#34;https://github.com/seanmonstar/reqwest&#34;&gt;reqwest (https://github.com/seanmonstar/reqwest)&lt;/a&gt;, a simple HTTP client for Rust that fits my needs and let me get the job done quickly.&lt;/p&gt;&#xA;&lt;p&gt;You may ask yourself if &lt;code&gt;reqwest&lt;/code&gt; is the &lt;strong&gt;best HTTP client for Rust?&lt;/strong&gt; To be honest, I don&amp;rsquo;t know (yet). But I got my job done quickly, and I really enjoyed the API surface offered by &lt;code&gt;reqwest&lt;/code&gt;. That said let&amp;rsquo;s dive into &lt;code&gt;reqwest&lt;/code&gt; and see how it actually looks like.&lt;/p&gt;</description>
    </item>
    <item>
      <title>External-DNS with Azure Kubernetes Service and Azure DNS</title>
      <link>https://thorsten-hans.com/external-dns-azure-kubernetes-service-azure-dns/</link>
      <pubDate>Thu, 09 Sep 2021 10:52:53 +0000</pubDate>
      <guid>https://thorsten-hans.com/external-dns-azure-kubernetes-service-azure-dns/</guid>
      <description>&lt;p&gt;This article guides you through the process of configuring &lt;a href=&#34;https://github.com/kubernetes-sigs/external-dns&#34;&gt;External-DNS&lt;/a&gt; with Azure Kubernetes Service (AKS) and Azure DNS. By deploying and configuring External-DNS and necessary Azure services correctly, you can ensure proper routing from your custom domain into Kubernetes. Before we dive into actually configuring External-DNS and wiring everything up, let&amp;rsquo;s briefly revisit some core concepts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cloud-platform-automation-with-managed-kubernetes-clusters&#34;&gt;Cloud platform automation with managed Kubernetes clusters&lt;/h2&gt;&#xA;&lt;p&gt;Managed Kubernetes clusters like Azure Kubernetes Service (AKS) automate the surrounding cloud platform using their custom cloud controller manager implementation as part of their Kubernetes distribution. For example, this makes exposing a service of type &lt;code&gt;LoadBalancer&lt;/code&gt; frictionless. AKS will automatically acquire a public IP address and provision an instance of Azure Load Balancer (LNB) to route ingress traffic into the Kubernetes cluster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadowing and Temporary Mutability in Rust</title>
      <link>https://thorsten-hans.com/shadowing-temporary-mutability-rust/</link>
      <pubDate>Tue, 07 Sep 2021 18:37:36 +0000</pubDate>
      <guid>https://thorsten-hans.com/shadowing-temporary-mutability-rust/</guid>
      <description>&lt;p&gt;Rust already amazes a lot when it comes to the basic language features. Let&amp;rsquo;s, for example, take a look at shadowing and temporary mutability. Both, fairly basic and simple language features, yet powerful and a real booster for robustness and correctness.&lt;/p&gt;&#xA;&lt;h2 id=&#34;shadowing-in-rust&#34;&gt;Shadowing in Rust&lt;/h2&gt;&#xA;&lt;p&gt;Shadowing is such a simple language feature. However, it has a significant effect on the code you write daily. Shadowing allows you to re-declare a variable in the same scope, using the same name. The re-declared variable differs from the original by having a different type. This is especially useful upon casting data from one type into another. In Rust, you can achieve this without adding unnecessary application-state.Take the following code as an example:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working with Environment Variables in Rust</title>
      <link>https://thorsten-hans.com/working-with-environment-variables-in-rust/</link>
      <pubDate>Mon, 06 Sep 2021 15:51:19 +0000</pubDate>
      <guid>https://thorsten-hans.com/working-with-environment-variables-in-rust/</guid>
      <description>&lt;p&gt;Rust makes working with environment variables fairly easy. The standard library provides fundamental APIs as part of &lt;code&gt;std::env&lt;/code&gt; which we use to access environment variables inside of our application. If you&amp;rsquo;re expecting valid unicode values, you can use &lt;code&gt;env::var&lt;/code&gt; - which returns an &lt;code&gt;Result&amp;lt;String, VarError&amp;gt;&lt;/code&gt; - as shown here:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;USER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;match&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;println!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;panic!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;$&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; is not set (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fn&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;short&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;::&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;USER&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;$USER is not set&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In contrast, &lt;code&gt;env::var_os&lt;/code&gt; does not check if the value of the desired environment variable is valid unicode. &lt;code&gt;var_os&lt;/code&gt; has also a slightly different function signature, it returns an &lt;code&gt;Option&amp;lt;OsString&amp;gt;&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrate Virtual Machine Scale Sets with Azure Monitor and VMInsights using Terraform</title>
      <link>https://thorsten-hans.com/integrate-virtual-machine-scale-sets-azure-monitor-vminsights-terraform/</link>
      <pubDate>Fri, 03 Sep 2021 18:03:18 +0000</pubDate>
      <guid>https://thorsten-hans.com/integrate-virtual-machine-scale-sets-azure-monitor-vminsights-terraform/</guid>
      <description>&lt;p&gt;Cloud-Native does not mean &amp;ldquo;containers only&amp;rdquo;. Many organizations are still adopting cloud computing and trying to move their workloads into the cloud.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I helped a customer to bring long-running, compute-intensive workloads to Azure. The particular workload must run on Windows. Although most parts of the overall application are stateless, containerized, or even serverless, this component was special. We decided to leverage Azure Virtual Machine Scale Set (VMSS) to host that component.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Send a Microsoft Teams message when new OCI artifacts appear in Azure Container Registry</title>
      <link>https://thorsten-hans.com/send-microsoft-teams-message-oci-artifacts-azure-container-registry/</link>
      <pubDate>Fri, 27 Aug 2021 10:16:31 +0000</pubDate>
      <guid>https://thorsten-hans.com/send-microsoft-teams-message-oci-artifacts-azure-container-registry/</guid>
      <description>&lt;p&gt;Getting instant feedback when a new artifact is published in a container registry such as Azure Container Registry (ACR) is important. Everyone has to stay in the loop, especially when working in a large team and managing many containerized applications. By leveraging ACR webhooks and the Microsoft Teams &lt;em&gt;Inbound Webhook&lt;/em&gt; connector, you can easily send custom messages to a team for different activities happening in your container registry.&lt;/p&gt;&#xA;&lt;p&gt;This article guides you through connecting ACR with Microsoft Teams to send messages automatically to a specific team when a new version of an image or an OCI compliant artifact is pushed to ACR.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure Functions with Go</title>
      <link>https://thorsten-hans.com/azure-functions-with-go/</link>
      <pubDate>Tue, 17 Aug 2021 13:15:14 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-functions-with-go/</guid>
      <description>&lt;p&gt;By leveraging custom handlers in Azure Functions, we can use any programming language to build serverless applications and host them in Azure.Having the freedom to use your preferred programming language to craft Azure Functions is awesome. Developers can use their existing knowledge, tools, and frameworks. The integration with the surrounding runtime is done via a thin configuration layer.&lt;/p&gt;&#xA;&lt;p&gt;For example, this post demonstrates how to build an Azure Functions project with a simple HTTP API written in Go. To keep things simple, we will use &lt;a href=&#34;https://github.com/gin-gonic/gin&#34;&gt;Gin, a minimalistic web framework for Go&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encrypted Secrets in Helm Charts</title>
      <link>https://thorsten-hans.com/encrypted-secrets-in-helm-charts/</link>
      <pubDate>Wed, 11 Aug 2021 08:00:44 +0000</pubDate>
      <guid>https://thorsten-hans.com/encrypted-secrets-in-helm-charts/</guid>
      <description>&lt;p&gt;In my recent article &amp;ldquo;&lt;a href=&#34;https://thorsten-hans.com/encrypt-your-kubernetes-secrets-with-mozilla-sops/&#34;&gt;How to encrypt Kubernetes secrets with Mozilla SOPS&lt;/a&gt;&amp;rdquo;, I demonstrated how to encrypt regular Kubernetes secret manifests (&lt;code&gt;yaml&lt;/code&gt;) using SOPS CLI in conjunction with Azure Key Vault as the backend for the encryption-key.&lt;/p&gt;&#xA;&lt;p&gt;This post will take it one step further; it guides you through the process of creating a custom &lt;a href=&#34;https://helm.sh&#34;&gt;Helm&lt;/a&gt; chart that will reference encrypted secrets. In the end, you will be able to add your encrypted secrets to source control without leaking sensitive information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Encrypt your Kubernetes Secrets with Mozilla SOPS</title>
      <link>https://thorsten-hans.com/encrypt-your-kubernetes-secrets-with-mozilla-sops/</link>
      <pubDate>Tue, 03 Aug 2021 12:59:24 +0200</pubDate>
      <guid>https://thorsten-hans.com/encrypt-your-kubernetes-secrets-with-mozilla-sops/</guid>
      <description>&lt;p&gt;By default, &lt;em&gt;Kubernetes Secrets (secrets)&lt;/em&gt; are stored with base64 encoding in &lt;code&gt;YAML&lt;/code&gt;files. The lack of encryption for secrets often leads to the question of how to store secrets securely. Obviously, you don&amp;rsquo;t want to put your sensitive configuration data into a git repository, because it is just encoded. &lt;code&gt;echo &amp;lt;base64_representation&amp;gt; | base64 -d&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A typical solution is using services like &lt;a href=&#34;https://azure.microsoft.com/en-us/services/key-vault/&#34;&gt;Azure Key Vault&lt;/a&gt;, or &lt;a href=&#34;https://www.hashicorp.com/products/vault&#34;&gt;HashiCorp Vault&lt;/a&gt; to persist sensitive data. Those services can be integrated with Kubernetes by using the &lt;em&gt;&lt;a href=&#34;https://github.com/kubernetes-sigs/secrets-store-csi-driver&#34;&gt;Secrets Store CIS driver&lt;/a&gt;&lt;/em&gt;. However, relying on an additional service means that you have to manage and maintain that service in addition to Kubernetes. Additionally, depending on the service you use to store your sensitive data, some sensitive configuration must be stored somewhere to configure the CIS driver.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging apps in Kubernetes with Bridge</title>
      <link>https://thorsten-hans.com/debugging-apps-in-kubernetes-with-bridge/</link>
      <pubDate>Wed, 28 Jul 2021 12:40:38 +0200</pubDate>
      <guid>https://thorsten-hans.com/debugging-apps-in-kubernetes-with-bridge/</guid>
      <description>&lt;p&gt;One of the most common questions I get when teaching developers in Kubernetes is&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;How can I debug my application once it is deployed to Kubernetes?&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Although there are several ways how to achieve that, this post will explain and demonstrate how to debug applications running in Kubernetes using &lt;em&gt;Bridge to Kubernetes (Bridge)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-bridge-to-kubernetes&#34;&gt;What is Bridge to Kubernetes&lt;/h2&gt;&#xA;&lt;p&gt;Bridge to Kubernetes (Bridge), the successor of &amp;ldquo;local process&amp;rdquo; is an IDE / editor extension. It allows developers to debug and test application counterparts (or microservices) on their local machine. While debugging locally, downstream and related components are consumed directly from within the Kubernetes cluster. Existing configuration objects - such as Kubernetes &lt;code&gt;ConfigMaps&lt;/code&gt;, or &lt;code&gt;Secrets&lt;/code&gt; -, and volumes mounted to the &lt;em&gt;Pod&lt;/em&gt;  are also applied to the local debugging instance seamlessly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bicep and Terraform compared</title>
      <link>https://thorsten-hans.com/bicep-and-terraform-compared/</link>
      <pubDate>Mon, 26 Apr 2021 00:42:48 +0200</pubDate>
      <guid>https://thorsten-hans.com/bicep-and-terraform-compared/</guid>
      <description>&lt;p&gt;Infrastructure as Code (IaC) is an important technique when it comes to automation. Teams are starting their journey towards cloud-native often by automating everything. Infrastructure is no exception here. The continuously growing adoption of cloud services and digitalization are just some reasons why IaC tools like Terraform are so popular.&lt;/p&gt;&#xA;&lt;p&gt;Project Bicep is the new kid on the block. Bicep is a new language that is created to express Azure infrastructures as code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Closing down 2020 and approaching 2021</title>
      <link>https://thorsten-hans.com/closing-down-2020-and-approaching-2021/</link>
      <pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/closing-down-2020-and-approaching-2021/</guid>
      <description>&lt;p&gt;2020 was quite challenging for everyone. We made our way through the pandemic so far, and I hope this post finds all of you healthy. That said, I want to look back at 2020 share some numbers and do a quick a forecast for 2021.&lt;/p&gt;&#xA;&lt;h2 id=&#34;blog-statistics&#34;&gt;Blog statistics&lt;/h2&gt;&#xA;&lt;p&gt;I am pretty satisfied with my blogging habits in 2020. But I did not publish consistently. I maintained a backlog of topics that I wanted to cover over the year. However, sometimes I struggled finishing articles. English is not my primary language, and creating posts takes more time than it actually would in German. Anyways, let&amp;rsquo;s have a look at the numbers:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install Ubuntu Server 20.10 on a Raspberry Pi</title>
      <link>https://thorsten-hans.com/install-ubuntu-server-20-10-on-a-raspberry-pi/</link>
      <pubDate>Wed, 23 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/install-ubuntu-server-20-10-on-a-raspberry-pi/</guid>
      <description>&lt;p&gt;Holiday time is tinker time. That said, I sat down to get some workloads up and running on my Raspberry Pi. I took some notes, that I want to share with you. This tutorial will guide you through the process of installing and configuring Ubuntu Server 20.10 on a Raspberry Pi.&lt;/p&gt;&#xA;&lt;h2 id=&#34;requirements&#34;&gt;Requirements&lt;/h2&gt;&#xA;&lt;p&gt;Only a few things are required to setup a fully functional Raspberry Pi with the latest Ubuntu Server release (Ubuntu Server 20.10):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure Cognitive Search integration for Static Site Generators</title>
      <link>https://thorsten-hans.com/azure-search-integration-for-static-site-generators/</link>
      <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-search-integration-for-static-site-generators/</guid>
      <description>&lt;p&gt;Finding appropriate content on websites and blogs boosts the user experience. With Azure Cognitive Search, you can quickly add professional search capabilities to your website. I use Jekyll to run my blog. However, the process described and explained in this post works for every &lt;strong&gt;Static Site Generator (SSG)&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-azure-cognitive-search&#34;&gt;What is Azure Cognitive Search&lt;/h2&gt;&#xA;&lt;p&gt;Azure Cognitive Search (formerly known as Azure Search) is a fully managed service offering by Microsoft.  Apache Lucene is the foundation of Azure Cognitive Search. Over the past year, Microsoft added a whole bunch of AI and Machine Learning (ML) capabilities. Microsoft renamed Azure Search to Azure Cognitive Search to align with other AI &amp;amp; ML service offerings. Although those features are pretty useful, searching website data is relatively simple and does not require any AI or ML features. Azure Cognitive Search can crawl data from different sources such as an Azure Storage Account, Azure SQL Databases, etc. Alternatively, you can actively push data into the search index using the Azure Cognitive Search Management SDK. There are SDKs for different programming languages available - in this article, you will see how to use the JavaScript SDK to push your data into the search index using Node.js.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Determine the size of Docker image layers</title>
      <link>https://thorsten-hans.com/determine-the-size-of-docker-image-layers/</link>
      <pubDate>Tue, 15 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/determine-the-size-of-docker-image-layers/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s quickly recap what Docker layers are before we look at how to query their size. No worries, we look at the tip of the iceberg.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-docker-layers&#34;&gt;What are Docker layers&lt;/h2&gt;&#xA;&lt;p&gt;Every Docker image consists of layers. A single layer is the result of a particular instruction someone wrote down in a &lt;code&gt;Dockerfile&lt;/code&gt;. Docker ads a new layer to the stack for each instruction of the &lt;code&gt;Dockerfile&lt;/code&gt;. All layers together build the final Docker image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mastering Terraform Workspaces</title>
      <link>https://thorsten-hans.com/mastering-terraform-workspaces/</link>
      <pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/mastering-terraform-workspaces/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Terraform workspaces (workspaces)&lt;/strong&gt; are an easy yet powerful building block to create Terraform projects of any scale. In this article, I will guide you through all the details in the context of workflows. At the end of this guide, you take your Terraform projects to the next level.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-terraform-workspaces&#34;&gt;What are Terraform workspaces&lt;/h2&gt;&#xA;&lt;p&gt;Think of workspaces as a layer of isolation for Terraform state files. Every workspace has its state file. All modifications applied in a particular workspace will never affect resources managed by another workspace. Workspaces are the key to manage multiple independent environments using a single Terraform project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to build smaller and secure  Docker Images for .NET</title>
      <link>https://thorsten-hans.com/how-to-build-smaller-and-secure-docker-images-for-net5/</link>
      <pubDate>Mon, 07 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-build-smaller-and-secure-docker-images-for-net5/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;&#xA;&lt;p&gt;This post explains how to optimize a .NET 5 Docker image and address two main concerns. Image size and security vulnerabilities. The article shows how to reduce the size from ~210 to ~58 MB. Additionally, it shows how to remove all 59 vulnerabilities.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-we-get-from-microsoft&#34;&gt;What we get from Microsoft&lt;/h2&gt;&#xA;&lt;p&gt;Visual Studio (also Visual Studio for Mac) creates a relatively simple &lt;code&gt;Dockerfile&lt;/code&gt; for .NET projects. It is a good starting point for users new to Docker. However, users should apply several optimizations before using the &lt;code&gt;Dockerfile&lt;/code&gt; to create Docker images for production environments.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Run containers in Azure Container Instances straight from Docker CLI</title>
      <link>https://thorsten-hans.com/run-containers-in-azure-container-instances-straight-from-docker-cli/</link>
      <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/run-containers-in-azure-container-instances-straight-from-docker-cli/</guid>
      <description>&lt;p&gt;A couple of months ago, both Microsoft and Docker announced the seamless integration of &lt;strong&gt;Azure Container Instances (ACI)&lt;/strong&gt; and Docker CLI. As a container enthusiast, I had to look into this integration. I tested it in different scenarios to see how it could support me and increase my productivity.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; The integration of ACI and Docker CLI is excellent. Once configured, I found myself spinning up numerous containers :). It provisions even multi-container applications based on &lt;em&gt;Docker Compose&lt;/em&gt;. There is a downside. Pulling images from registries was slower compared to my local machine. Overall, I like the experience and share everything you need to know about it in this article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scan Docker images for vulnerabilities with Docker CLI and Snyk</title>
      <link>https://thorsten-hans.com/scan-docker-images-for-vulnerabilities-with-docker-cli-and-snyk/</link>
      <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/scan-docker-images-for-vulnerabilities-with-docker-cli-and-snyk/</guid>
      <description>&lt;p&gt;Vulnerabilities are everywhere. Application developers use frameworks and libraries to solve business requirements. An operating system executes applications and their dependencies, and vulnerabilities could exist in each of those layers.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, as application developers, we fix potential vulnerabilities in our code-bases. However, fixing critical vulnerabilities in the Linux distribution our applications rely on, is probably not what we are responsible for. Often, it is more important to know which vulnerabilities exist and how we can fix them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is new in Open Service Mesh 0.4.0</title>
      <link>https://thorsten-hans.com/what-is-new-in-open-service-mesh-040/</link>
      <pubDate>Wed, 07 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/what-is-new-in-open-service-mesh-040/</guid>
      <description>&lt;p&gt;A couple of days ago, &lt;a href=&#34;https://openservicemesh.io&#34;&gt;Open Service Mesh (OSM)&lt;/a&gt; version &lt;code&gt;0.4.0&lt;/code&gt; was released on GitHub. Compared to the previous release, several things have changed. In this post I will walk through the most important changes, which will have an impact on the actual usage of Open Service Mesh.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sidecar-injection-disabled-by-default&#34;&gt;Sidecar Injection disabled by default&lt;/h2&gt;&#xA;&lt;p&gt;Open Service Mesh uses Kubernetes&amp;rsquo; sidecar-container pattern to bring Service Mesh capabilities to your application deployments. With version &lt;code&gt;0.4.0&lt;/code&gt;, OSM will no longer inject sidecar-containers by default. In contrast, you have to enable it explicitly when onboarding a Namespace. This can be achieved by using &lt;code&gt;osm&lt;/code&gt; CLI with the new &lt;code&gt;--enable-sidecar-injection&lt;/code&gt; flag:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started With Microsoft Open Service Mesh</title>
      <link>https://thorsten-hans.com/getting-started-with-microsoft-open-service-mesh/</link>
      <pubDate>Fri, 28 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/getting-started-with-microsoft-open-service-mesh/</guid>
      <description>&lt;p&gt;A couple of weeks ago, Microsoft announced the first public release of &lt;a href=&#34;https://openservicemesh.io&#34;&gt;Open Service Mesh (OSM)&lt;/a&gt; an open-source, lightweight, and extensible service mesh implementation, based on the Service Mesh Interface (SMI) specification. This article explains the core concepts of a service mesh, provides an Open Service Mesh introduction, and demonstrates some common service mesh use-cases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#table-of-contents&#34;&gt;Table of contents&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#update-2020-10-08&#34;&gt;Update 2020-10-08&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-a-service-mesh&#34;&gt;What is a Service Mesh&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-the-service-mesh-interface-specification&#34;&gt;What is the Service Mesh Interface specification&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#should-you-consider-using-a-service-mesh&#34;&gt;Should you consider using a Service Mesh&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#introducing-microsoft-open-service-mesh&#34;&gt;Introducing Microsoft Open Service Mesh&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#install-the-open-service-mesh-cli&#34;&gt;Install the Open Service Mesh CLI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#install-open-service-mesh-on-kubernetes&#34;&gt;Install Open Service Mesh on Kubernetes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#traffic-access-control-for-simple-applications&#34;&gt;Traffic Access Control for simple Applications&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-and-onboard-the-kubernetes-namespace&#34;&gt;Create and Onboard the Kubernetes Namespace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-the-sample-application&#34;&gt;Deploy the Sample Application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-traffic-access-control&#34;&gt;Deploy Traffic Access Control&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#canary-deployments-with-open-service-mesh&#34;&gt;Canary Deployments with Open Service Mesh&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-and-onboard-the-canary-deployment-namespace&#34;&gt;Create and Onboard the Canary Deployment Namespace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-the-canary-deployment-sample-application&#34;&gt;Deploy the Canary Deployment Sample Application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-traffic-access-control-and-traffic-split&#34;&gt;Deploy Traffic Access Control and Traffic Split&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#verify-canary-deployment&#34;&gt;Verify Canary Deployment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-open-service-mesh-dashboard&#34;&gt;The Open Service Mesh Dashboard&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sample-code&#34;&gt;Sample Code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;update-2020-10-08&#34;&gt;Update 2020-10-08&lt;/h3&gt;&#xA;&lt;p&gt;In the meantime, Microsoft has released version &lt;code&gt;0.0.4&lt;/code&gt; of Open Service Mesh. The updates reflect the upstream changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frictionless zsh And oh-my-zsh Management With Antigen</title>
      <link>https://thorsten-hans.com/frictionless-zsh-and-oh-my-zsh-management-with-antigen/</link>
      <pubDate>Wed, 10 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frictionless-zsh-and-oh-my-zsh-management-with-antigen/</guid>
      <description>&lt;p&gt;I love tinkering my shell environment. I found myself sitting down during the weekend and doing an overhaul of my configuration approach for ZSH. That said, I decided to change my ZSH plugin management and started using &lt;a href=&#34;http://antigen.sharats.me/&#34;&gt;Antigen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Antigen is a small set of helper functions that allow friction-less management of ZSH plugins. Personally, I was addicted to vim for decades and used vundle to manage my vim customizations. As the official Antigen website mentions: &amp;ldquo;&lt;em&gt;Antigen is to ZSH what Vundle is to vim.&lt;/em&gt;&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Access Kubernetes Dashboard On RBAC Enabled Azure Kubernetes</title>
      <link>https://thorsten-hans.com/access-kubernetes-dashboard-on-rbac-enabled-azure-kubernetes/</link>
      <pubDate>Tue, 09 Jun 2020 09:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/access-kubernetes-dashboard-on-rbac-enabled-azure-kubernetes/</guid>
      <description>&lt;p&gt;The Kubernetes dashboard is quite useful to drill through existing Kubernetes clusters and inspect things without using &lt;code&gt;kubectl&lt;/code&gt;. However, starting with version &lt;code&gt;2.0.40&lt;/code&gt; of Azure CLI, Azure Kubernetes clusters are deployed with Role-Based-Access-Control (RBAC)  enabled by default. Since that point in time, you will be presented with a bunch of errors when trying to access the traditional Kubernetes dashboard using &lt;code&gt;az aks browse&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/kubernetes-dashboard-in-rbac-enabled-aks-1.png&#34; alt=&#34;Insufficient permissions for Kubernetes dashboard in RBAC enabled AKS&#34; title=&#34;Broken Kubernetes Dashboard in RBAC enabled AKS&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>6 Steps To Run .NET Core Apps In Azure Kubernetes</title>
      <link>https://thorsten-hans.com/6-steps-to-run-netcore-apps-in-azure-kubernetes/</link>
      <pubDate>Sun, 07 Jun 2020 08:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/6-steps-to-run-netcore-apps-in-azure-kubernetes/</guid>
      <description>&lt;p&gt;Mastering Kubernetes is hard and a time-consuming task. However, getting started with Kubernetes in Azure as a .NET Core Developer is relatively easy. It takes six steps to get your application up and running in Azure Kubernetes Service (AKS), starting with a plain, regular .NET Core Web API.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#scope&#34;&gt;Scope&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#requirements&#34;&gt;Requirements&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#1-create-a-docker-image&#34;&gt;1. Create A Docker Image&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#2-create-an-azure-container-registry&#34;&gt;2. Create An Azure Container Registry&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#3-push-the-docker-image-to-acr&#34;&gt;3. Push The Docker Image To ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#4-create-a-kubernetes-cluster&#34;&gt;4. Create A Kubernetes Cluster&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#5-create-kubernetes-deployment-manifests&#34;&gt;5. Create Kubernetes Deployment Manifests&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#6-deploy-your-application&#34;&gt;6. Deploy Your Application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This article will guide you through the entire process and explain all steps in detail, so you can follow and end up with having your application being executed in Kubernetes and being exposed to the internet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 Types Of ZSH Aliases You Should Know</title>
      <link>https://thorsten-hans.com/5-types-of-zsh-aliases/</link>
      <pubDate>Tue, 26 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/5-types-of-zsh-aliases/</guid>
      <description>&lt;p&gt;My shell means everything to me. It is the first program I start in the morning and the last one I close in the evening. It is the program that I regularly tweak to boost my overall productivity. From my perspective, Microsoft&amp;rsquo;s release of Windows Terminal 1.0 and WSL 2.0 will boost overall Shell adoption. Over the past decade, I have seen numerous users installing and using different shells. However, the number of people that invest time in configuring their shell to be more productive is just a small percentage. And that is a shame!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure Arc enabled Kubernetes: Digital Ocean Kubernetes in Azure</title>
      <link>https://thorsten-hans.com/azure-arc-enabled-kubernetes-digital-ocean/</link>
      <pubDate>Sun, 24 May 2020 08:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-arc-enabled-kubernetes-digital-ocean/</guid>
      <description>&lt;p&gt;During Microsoft Build Conference 2020, Microsoft demonstrated Azure Arc enabled Kubernetes, which allows you to connect and manage external Kubernetes clusters in Azure.&lt;/p&gt;&#xA;&lt;p&gt;By attaching your existing Kubernetes clusters to Azure, you can use all the Azure goodness to control external clusters like any other internal Azure resource. Once connected, you can do certain things with the external Kubernetes cluster, like for example:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Add it to given Resource Groups&lt;/li&gt;&#xA;&lt;li&gt;Categorize it using Tags&lt;/li&gt;&#xA;&lt;li&gt;Access it via Azure Resource Graph&lt;/li&gt;&#xA;&lt;li&gt;Apply Azure Policies to it&lt;/li&gt;&#xA;&lt;li&gt;Protect with Azure Security Center&lt;/li&gt;&#xA;&lt;li&gt;Collect metrics using Azure Monitor&lt;/li&gt;&#xA;&lt;li&gt;Define cluster and application configuration with GitOps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This post explains how to connect a Kubernetes cluster running in Digital Ocean to your Azure Subscription by leveraging Azure Arc. Once connected, we will add some tags to the external cluster and query it using Azure Resource Graph to verify the connection.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Container Metrics With CTOP</title>
      <link>https://thorsten-hans.com/docker-container-metrics-ctop/</link>
      <pubDate>Fri, 22 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/docker-container-metrics-ctop/</guid>
      <description>&lt;p&gt;A while ago, I stumbled upon &lt;code&gt;ctop&lt;/code&gt;; a small, yet handy command-line tool to interact with Docker containers and gather essential metrics. You know &lt;code&gt;docker stats&lt;/code&gt;? &lt;code&gt;ctop&lt;/code&gt; is &lt;code&gt;docker stats&lt;/code&gt; on steroids. The open-source tool is available for free and can be installed directly on Linux and macOS.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/docker-container-metrics-ctop/images/docker-metrics-ctop-1.png&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;ctop - Essential metrics for Docker containers&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;With &lt;code&gt;ctop&lt;/code&gt;, you get more than just fundamental metrics. Overall, &lt;code&gt;ctop&lt;/code&gt; combines the following features in one single tool:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure CLI on the iPad - Azure CLI Tips &amp; Tricks 3</title>
      <link>https://thorsten-hans.com/azure-cli-ipad--azure-cli-tips-tricks/</link>
      <pubDate>Wed, 20 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-cli-ipad--azure-cli-tips-tricks/</guid>
      <description>&lt;p&gt;&lt;em&gt;Azure CLI Tips &amp;amp; Tricks&lt;/em&gt; is a collection of small, yet powerful things, that will boost your productivity when working with Microsoft Azure CLI.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I love my iPad Pro and the possibility to work from almost everywhere. Using the official &lt;a href=&#34;https://apps.apple.com/de/app/microsoft-azure/id1219013620#?platform=ipad&#34;&gt;Azure app&lt;/a&gt; from the Apple App Store, I can browse through my cloud resources and get essential information about cloud-based workloads.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Check metrics and resource status from anywhere&lt;/li&gt;&#xA;&lt;li&gt;Start or Stop resources like VMs or Azure App Services at anytime&lt;/li&gt;&#xA;&lt;li&gt;Receive notifications and alerts about service health issues&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additionally, the app comes with an integrated &lt;em&gt;Cloud Shell&lt;/em&gt;, which gives me direct access to Azure CLI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Container CPU Limits Explained</title>
      <link>https://thorsten-hans.com/docker-container-cpu-limits-explained/</link>
      <pubDate>Mon, 18 May 2020 08:30:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/docker-container-cpu-limits-explained/</guid>
      <description>&lt;p&gt;If we think about Docker containers, we tend to associate words like efficient and small to them. Although this may be the case for the vast of situations, there are exceptions. There are containers that - perhaps unintentionally -  have a very high CPU utilization. This post explains how you can limit CPU utilization for specific Docker containers to have better control of the overall hardware utilization.&lt;/p&gt;&#xA;&lt;p&gt;On top of providing CPU limits for Docker containers, you should also limit the memory consumption. Consider reading my article, &lt;a href=&#34;https://thorsten-hans.com/limit-memory-for-docker-containers/&#34;&gt;Limit Memory For Docker Containers&lt;/a&gt;, and learn how to prevent memory-intensive Docker containers from draining your overall system performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Clean ZSH History Temporary</title>
      <link>https://thorsten-hans.com/how-to-clean-zsh-history-temporary/</link>
      <pubDate>Sat, 16 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-clean-zsh-history-temporary/</guid>
      <description>&lt;p&gt;I am super fussy when it comes to terminal configuration. I tweak my dotfiles now and then to optimize my workflow and improve my overall productivity.&lt;/p&gt;&#xA;&lt;p&gt;I love having features like auto-suggestion. However, I work for different customers, and I do quite a lot of public speaking at developer conferences (or virtual events these days). In situations like these, I have to clean ZSH history entirely for the current terminal session, to prevent me from leaking sensitive information unintentionally.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Container Memory Limits Explained</title>
      <link>https://thorsten-hans.com/limit-memory-for-docker-containers/</link>
      <pubDate>Fri, 15 May 2020 08:30:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/limit-memory-for-docker-containers/</guid>
      <description>&lt;p&gt;When running &lt;a href=&#34;http://docker.com/&#34;&gt;Docker&lt;/a&gt; Images locally, you may want to control how many memory a particular container can consume. Otherwise, it may end up consuming too much memory, and your overall system performance may suffer.&#xA;By default, Docker does not apply memory limitations to individual containers. Containers can consume all available memory of the &lt;strong&gt;host&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No need to panic (for most of the users)! If you are using &lt;a href=&#34;https://www.docker.com/products/docker-desktop&#34;&gt;Docker Desktop&lt;/a&gt;, the &lt;strong&gt;host&lt;/strong&gt; is actually a &lt;strong&gt;virtualized host&lt;/strong&gt;. On macOS, the &lt;strong&gt;host&lt;/strong&gt; is a virtualized system leveraging Apple&amp;rsquo;s Hypervisor framework (which has been released with macOS 10.10 Yosemite). We use the Docker Desktop app, to specify an overall limit for containerized workloads.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How To Run Commands In Stopped Docker Containers</title>
      <link>https://thorsten-hans.com/how-to-run-commands-in-stopped-docker-containers/</link>
      <pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-run-commands-in-stopped-docker-containers/</guid>
      <description>&lt;p&gt;You may already know the &lt;code&gt;exec&lt;/code&gt; command, which allows you to execute a command inside of a running Docker container. This works excellent and will enable us to dive into a running container to inspect certain things like files in the file system, running processes, and other stuff. However, &lt;code&gt;exec&lt;/code&gt; does not work when the Docker container stopped already. The following lines will explain and demonstrate how to run commands in stopped Docker containers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Choose the best output format - Azure CLI Tips &amp; Tricks 2</title>
      <link>https://thorsten-hans.com/azure-cli-tips-and-tricks-2-choose-the-best-output-format/</link>
      <pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-cli-tips-and-tricks-2-choose-the-best-output-format/</guid>
      <description>&lt;p&gt;Azure CLI Tips &amp;amp; Tricks is a collection of small, yet powerful things, that will boost your productivity when working with Microsoft Azure CLI.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest&#34;&gt;Azure CLI&lt;/a&gt; provides a bunch of different output formats. By default, it generates output using the &lt;code&gt;json&lt;/code&gt; format. Although the default output format is both human-readable and descriptive, it is not the optimal format for every situation. Sometimes you need more focused responses, or you just &lt;strong&gt;want&lt;/strong&gt; a good old &lt;a href=&#34;https://en.wikipedia.org/wiki/ASCII&#34;&gt;ASCII&lt;/a&gt;-style table.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AKS cluster auto-scaler inside out</title>
      <link>https://thorsten-hans.com/aks-cluster-auto-scaler-inside-out/</link>
      <pubDate>Mon, 11 May 2020 16:10:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/aks-cluster-auto-scaler-inside-out/</guid>
      <description>&lt;p&gt;Cluster auto-scaling for &lt;a href=&#34;https://azure.microsoft.com/en-us/services/kubernetes-service/&#34;&gt;Azure Kubernetes Service (AKS)&lt;/a&gt; is available for quite some time now. I have been using it in several projects so far.This post explains all details about the AKS cluster auto-scaler, shows how to enable it for both - new and existing AKS clusters - and gives you an example of how to use custom auto-scaler profile settings.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-the-aks-cluster-auto-scaler&#34;&gt;What is the AKS cluster auto-scaler&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#why-should-you-use-cluster-auto-scaler&#34;&gt;Why should you use cluster auto-scaler&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#enable-azure-kubernetes-cluster-auto-scaler&#34;&gt;Enable Azure Kubernetes cluster auto-scaler&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#modify-auto-scaler-boundaries&#34;&gt;Modify auto-scaler boundaries&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#disable-cluster-auto-scaler&#34;&gt;Disable cluster auto-scaler&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#verify-aks-cluster-auto-scaling&#34;&gt;Verify AKS cluster auto-scaling&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-the-sample-application&#34;&gt;Deploy the sample application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#retract-the-sample-application&#34;&gt;Retract the sample application&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#custom-cluster-scaling-behavior&#34;&gt;Custom cluster scaling behavior&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#specify-custom-sclaing-profile-settings&#34;&gt;Specify custom sclaing profile settings&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#cluster-auto-scaler-in-combination-with-multiple-aks-node-pools&#34;&gt;Cluster auto-scaler in combination with multiple AKS node-pools&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#recap&#34;&gt;Recap&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-the-aks-cluster-auto-scaler&#34;&gt;What is the AKS cluster auto-scaler&lt;/h2&gt;&#xA;&lt;p&gt;With cluster auto-scaling, the actual load of your worker-nodes will be monitored actively. By adding and removing worker-nodes from the cluster, it ensures that enough resources are available to keep your application healthy and responsive. In contrast, it removes worker-nodes from the AKS cluster, to optimize resource utilization and be as cost-effective as possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get samples with az find - Azure CLI Tips &amp; Tricks 1</title>
      <link>https://thorsten-hans.com/azure-cli-tips-and-tricks-1-get-samples-with-az-find/</link>
      <pubDate>Tue, 05 May 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-cli-tips-and-tricks-1-get-samples-with-az-find/</guid>
      <description>&lt;p&gt;Azure CLI Tips &amp;amp; Tricks is a collection of small, yet powerful things, that will boost your productivity when working with Microsoft Azure CLI.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;code&gt;az find&lt;/code&gt; is a useful command for every Azure CLI user. It is the go-to command, if you want to get scenario-based examples for Azure CLI commands. You can provide any command as positional argument to &lt;code&gt;az find&lt;/code&gt;, and it will scan the official Azure documentation for examples.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Use ACR As Registry For Helm Charts</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-use-acr-as-registry-for-helm-charts/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-use-acr-as-registry-for-helm-charts/</guid>
      <description>&lt;p&gt;The seventh and last part of &lt;em&gt;Azure Container Registry Unleashed&lt;/em&gt; is about housing &lt;a href=&#34;https://helm.sh&#34;&gt;Helm&lt;/a&gt; charts in ACR. This post explains how to use ACR as a protected Registry for Helm charts. We walk through the process of creating, publishing, and consuming a sample chart from ACR. However, if you have not used or seen Helm 3 before, consider reading my &amp;ldquo;&lt;a href=&#34;https://thorsten-hans.com/getting-started-with-helm3/&#34;&gt;Getting started with Helm 3&lt;/a&gt;&amp;rdquo; article first.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-oci-and-what-are-oci-artifacts&#34;&gt;What Is OCI And What Are OCI artifacts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#prerequisites&#34;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#authenticate-helm-cli-against-acr&#34;&gt;Authenticate Helm CLI Against ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#enable-oci-support-in-helm-cli&#34;&gt;Enable OCI Support In Helm CLI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#prepare-helm-charts-for-publication-on-acr&#34;&gt;Prepare Helm Charts For Publication On ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#push-a-helm-chart-to-acr&#34;&gt;Push A Helm Chart To ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#pull-a-helm-chart-from-acr&#34;&gt;Pull A Helm Chart From ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#export-helm-chart-once-pulled&#34;&gt;Export Helm Chart Once Pulled&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#deploy-helm-chart-to-aks&#34;&gt;Deploy Helm Chart To AKS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#azure-cli-commands-for-helm-charts&#34;&gt;Azure CLI Commands For Helm charts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-acr-unleashed-series&#34;&gt;The ACR Unleashed series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;what-is-oci-and-what-are-oci-artifacts&#34;&gt;What Is OCI And What Are OCI artifacts&lt;/h2&gt;&#xA;&lt;p&gt;On top of Docker Registry 2.0, Azure Container Registry supports OCI artifacts. The &lt;a href=&#34;https://github.com/opencontainers/image-spec&#34;&gt;OCI specification&lt;/a&gt; defines a general format for interchanging various artifacts like Docker Images or application bundles such as Helm charts. The official definition of OCI&amp;rsquo;s responsibility is&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Started With Helm 3</title>
      <link>https://thorsten-hans.com/getting-started-with-helm3/</link>
      <pubDate>Wed, 22 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/getting-started-with-helm3/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://helm.sh&#34;&gt;Helm 3&lt;/a&gt; is around for a couple of months now. During that time, I recognized more and more customers willing to use Helm 3 to package, distribute, and construct their cloud-native application bundles. Perhaps you have already heard of Helm, but don&amp;rsquo;t know where to start with Helm exactly? Or you want to learn the differences between Helm 2 and Helm 3. Again others, prefer having all essential information compiled into a single article. Then this is the right one for you! See this post as an introduction to Helm 3; it explains all the major building-blocks and provides - just - enough background information to get started with Helm 3.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom Validation Rules for Variables in Terraform</title>
      <link>https://thorsten-hans.com/custom-validation-rules-for-variables-in-terraform/</link>
      <pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/custom-validation-rules-for-variables-in-terraform/</guid>
      <description>&lt;p&gt;In Terraform, we use &lt;em&gt;Variables&lt;/em&gt; to make projects configurable and to reduce code duplication. We can harden variables, by applying individual validations to them.&lt;/p&gt;&#xA;&lt;p&gt;Obviously, providers like &lt;a href=&#34;https://www.terraform.io/docs/providers/azurerm/index.html&#34;&gt;the official Azure Provider&lt;/a&gt; come with validations on resource attributes. For example, consider describing an instance of &lt;a href=&#34;https://azure.microsoft.com/en-us/services/container-registry/&#34;&gt;Azure Container Registry (ACR)&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;ACR has several &lt;code&gt;required&lt;/code&gt; attributes, which must be provided by consumers. If consumers forget specifying a &lt;code&gt;required&lt;/code&gt; attribute, Terraform will not try to provision it. Instead, the operation will fail and report a corresponding error message to the user, as shown in figure 1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Image Scanning With Azure Security Center</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-image-scanning-with-azure-security-center/</link>
      <pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-image-scanning-with-azure-security-center/</guid>
      <description>&lt;p&gt;The sixth part of &lt;em&gt;Azure Container Registry Unleashed&lt;/em&gt; is about scannig Docker Images in ACR using &lt;a href=&#34;https://azure.microsoft.com/en-us/services/security-center/&#34;&gt;Azure Security Center&lt;/a&gt;. This post explains, what you get from Azure Security Center in the context of ACR and how to configure the integration of both Azure services. Before we dive into the article, I want to reach out and say thank you to my fellow MVP and well-known Azure security expert &lt;a href=&#34;https://blog.azureandbeyond.com/&#34;&gt;Tom Janetscheck&lt;/a&gt; for contributing to this article.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Free English Terraform Webinar on Thursday the 16th of April</title>
      <link>https://thorsten-hans.com/free-english-terraform-webinar-april-2020/</link>
      <pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/free-english-terraform-webinar-april-2020/</guid>
      <description>&lt;p&gt;My fellow MVP &lt;a href=&#34;https://www.linkedin.com/in/damir-dobric-a2756286/&#34;&gt;Damir Dobric&lt;/a&gt; organizes the local Azure Meetup in Frankfurt. We know each other for many years and meet several times a year at different conferences. Back in September 2019, we met in Mainz during BASTA! 2019 and decided to do a local Meetup in Frankfurt and talk about Terraform in the context of Microsoft Azure. Due to the global impact of Coronavirus, we decided to transform the meetup into a virtual meetup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Free German Terraform Webinar on Wednesday the 15th of April</title>
      <link>https://thorsten-hans.com/free-german-terraform-webinar-april-2020/</link>
      <pubDate>Thu, 09 Apr 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/free-german-terraform-webinar-april-2020/</guid>
      <description>&lt;p&gt;At &lt;a href=&#34;https://thinktecture.com&#34;&gt;Thinktecture&lt;/a&gt;, we have started a new, free webinar series to share experiences from real-world projects to demonstrate technologies and practices we believe in and love. As part of the webinar series, I will do a free online webinar in German on Wednesday the 15th of April 2020 at 10:30 (CEST).&lt;/p&gt;&#xA;&lt;p&gt;You can register for the webinar for free, using &lt;a href=&#34;https://www.bigmarker.com/conferences/c5ffcf9541b0/?utm_source=thorstensblog&amp;amp;utm_medium=campaign&amp;amp;utm_campaign=Webinar%20-%20Infrastructure%20as%20code&#34;&gt;this registration link&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;During the webinar, I will explain what Terraform is and why you should care about it. You will learn how to build infrastructures for Microsoft Azure using Terraform and the HashiCorp Configuration Language (HCL). Additionally, I will explain how we structure large scale Terrform projects and demonstrate how to slice modules to increase re-use of infrastructure components.&#xA;During the webinar, I will explain what Terraform is and why you should care about it. You will learn how to build infrastructures for Microsoft Azure using Terraform and the HashiCorp Configuration Language (HCL). Additionally, I will explain how we structure large scale Terrform projects and demonstrate how to slice modules to increase re-use of infrastructure components.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 Ways to integrate ACR with AKS</title>
      <link>https://thorsten-hans.com/3-ways-to-integrate-acr-with-aks/</link>
      <pubDate>Wed, 12 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/3-ways-to-integrate-acr-with-aks/</guid>
      <description>&lt;p&gt;To integrate Azure Container Registry (ACR) with Azure Kubernetes Service (AKS), operators and developers currently have three different options. At the end of the article, you can integrate the protected implementation of Docker Registry 2.0 with your Kubernetes cluster using your preferred strategy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-kubernetes-secret&#34;&gt;1. Kubernetes Secret&lt;/h2&gt;&#xA;&lt;p&gt;First and perhaps the easiest integration strategy is to create a Kubernetes Secret of type &lt;code&gt;docker-registry&lt;/code&gt;. You can create such a &lt;code&gt;Secret&lt;/code&gt; either using &lt;code&gt;yaml&lt;/code&gt; or using the &lt;code&gt;kubectl create&lt;/code&gt; command:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extend Kubernetes with Custom Resource Definitions and RBAC for ServiceAccounts</title>
      <link>https://thorsten-hans.com/custom-resource-definitions-with-rbac-for-serviceaccounts/</link>
      <pubDate>Tue, 11 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/custom-resource-definitions-with-rbac-for-serviceaccounts/</guid>
      <description>&lt;p&gt;We can extend Kubernetes using Custom Resource Definitions (CRDs). By adding Custom Resource Definitions to Kubernetes, operators can use familiar concepts and tools like &lt;code&gt;kubectl&lt;/code&gt; to deal with custom data. We can bring our schema and have it sitting next to first-class types like &lt;code&gt;Pod&lt;/code&gt;, &lt;code&gt;Service&lt;/code&gt;, and others. Kubernetes API Server takes care of the entire lifecycle of custom objects, which means once &lt;code&gt;CRDs&lt;/code&gt; are deployed, we can create, modify, retrieve, and delete them. On top of that, we can create custom &lt;code&gt;Roles&lt;/code&gt; and &lt;code&gt;ClusterRoles&lt;/code&gt; to protect custom objects using RBAC.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Tasks</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-tasks/</link>
      <pubDate>Wed, 05 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-tasks/</guid>
      <description>&lt;p&gt;The fifth part of &lt;em&gt;Azure Container Registry Unleashed&lt;/em&gt; is all about automating things in the context of Docker Images and ACR. Starting from scratch with simple, yet useful ACR Quick Tasks, over regular ACR Tasks to full-fledged ACR Multi-Step Tasks, this article covers everything you need to know about Tasks in ACR.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-are-arc-tasks&#34;&gt;What Are ARC Tasks&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-tasks-pricing&#34;&gt;ACR Tasks Pricing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#source-code-context&#34;&gt;Source Code Context&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-quick-tasks&#34;&gt;ACR Quick Tasks&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-quick-tasks-with-remote-contexts&#34;&gt;ACR Quick Tasks With Remote Contexts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#trigger-acr-tasks-automatically&#34;&gt;Trigger ACR Tasks Automatically&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#multi-step-acr-tasks&#34;&gt;Multi-Step ACR Tasks&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-tasks-reference-yaml&#34;&gt;ACR Tasks reference: YAML&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#build-a-blog-search-with-azure-cognitive-search&#34;&gt;Build A Blog Search With Azure Cognitive Search&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-required-azure-resources&#34;&gt;Create Required Azure Resources&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#identify-acr-tasks&#34;&gt;Identify ACR Tasks&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-build-index-acr-task&#34;&gt;The build-index ACR Task&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-feed-index-acr-task&#34;&gt;The feed-index ACR Task&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-acr-series&#34;&gt;The ACR Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-next&#34;&gt;What Is Next&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-are-arc-tasks&#34;&gt;What Are ARC Tasks&lt;/h2&gt;&#xA;&lt;p&gt;With Azure Container Registry (ACR), customers can use so-called tasks to offload several workloads from local machines, and services such as GitHub or Azure DevOps to Azure Container Registry. With ACR Tasks, customers can build, push, and run Docker Images for different platforms, including Linux, Windows, and ARM. As of today, there are three different types of Tasks available in ACR:&lt;/p&gt;</description>
    </item>
    <item>
      <title>European Azure Conference 2020</title>
      <link>https://thorsten-hans.com/european-azure-conference-2020/</link>
      <pubDate>Tue, 04 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/european-azure-conference-2020/</guid>
      <description>&lt;p&gt;I am thrilled to join the announcement of the European Azure Conference 2020 (EAC20). While Microsoft just finished celebrating the 10th birthday of Azure, we want to add another reason to be excited about Azure.&lt;/p&gt;&#xA;&lt;p&gt;From &lt;strong&gt;2nd till 4th of June 2020&lt;/strong&gt;, Azure enthusiasts from all over the world will meet in beautiful &lt;strong&gt;Nice&lt;/strong&gt; (France) to celebrate the first iteration of this independent and dedicated Azure conference in Europe.&lt;/p&gt;&#xA;&lt;p&gt;During the three-day event, we will deliver outstanding Keynotes, &lt;strong&gt;8 tutorials&lt;/strong&gt;, and &lt;strong&gt;more than 70 sessions&lt;/strong&gt; covering all areas of Microsoft Azure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>API Summit - IaC for everyone with Terraform</title>
      <link>https://thorsten-hans.com/api-summit-iac-for-everyone-with-terraform/</link>
      <pubDate>Tue, 10 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/api-summit-iac-for-everyone-with-terraform/</guid>
      <description>&lt;p&gt;This week, API Summit 2019 took place in Berlin. I was invited to demonstrate some Infrastructure as Code (IaC) goodness and talk about Terraform.&lt;/p&gt;&#xA;&lt;p&gt;During my half-day tutorial, I explained how to create multi-cloud infrastructures for Azure and AWS using HashiCorp Terraform. Additionally, we used &lt;code&gt;git flow&lt;/code&gt; to establish a proper collaboration workflow.&lt;/p&gt;&#xA;&lt;p&gt;All samples are available &lt;a href=&#34;https://github.com/ThorstenHans/api-summit-2019-terraform&#34;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, you can cycle through the &lt;a href=&#34;https://onedrive.live.com/embed?cid=50A514874839E12E&amp;amp;resid=50A514874839E12E%2119807&amp;amp;authkey=AKo3URpj6kJKMr0&amp;amp;em=2&#34;&gt;slide-deck right here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESPC 2019 - Interview</title>
      <link>https://thorsten-hans.com/espc2019-interview/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/espc2019-interview/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://twitter.com/fabianwilliams&#34;&gt;Fabian Williams&lt;/a&gt; (fellow MVP and good friend of mine) interviewed me during &lt;a href=&#34;http://sharepointeurope.com/&#34;&gt;European SharePoint, Office365 and Azure Conference (ESPC19)&lt;/a&gt;. We had a great conversation about different topics which I focus on these days. Basically, we talked about&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Microsoft Azure&lt;/li&gt;&#xA;&lt;li&gt;Infrastructure as Code&lt;/li&gt;&#xA;&lt;li&gt;Engagement in the developer community&lt;/li&gt;&#xA;&lt;li&gt;How to participate and contribute to the community&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Additionally, we talked about how ESPC has evolved over time and how it addresses latest and greatest technology trends. The interview was filmed and is available for free, in full length on YouTube.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Webhooks</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-webhooks/</link>
      <pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-webhooks/</guid>
      <description>&lt;p&gt;In the fourth part of Azure Container Registry Unleashed, we will dive into webhooks offered by ACR and learn how to use them to build simple, yet powerful automations based on ACR interactions such as pushing new tags of an image.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-a-webhook&#34;&gt;What Is A Webhook&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-webhooks&#34;&gt;ACR Webhooks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-webhook-limits-by-sku&#34;&gt;ACR Webhook Limits By SKU&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#integrate-azure-services-using-acr-webhooks&#34;&gt;Integrate Azure Services Using ACR Webhooks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-demo-project&#34;&gt;The Demo Project&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-azure-functions-project&#34;&gt;The Azure Functions Project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-acr-webhook&#34;&gt;Create ACR Webhook&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#test-the-webhook&#34;&gt;Test The Webhook&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#push-new-docker-image-tags-to-acr&#34;&gt;Push New Docker Image Tags To ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#check-results-in-azure-cosmosdb&#34;&gt;Check Results In Azure CosmosDB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-acr-unleashed-series&#34;&gt;The ACR Unleashed series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-a-webhook&#34;&gt;What Is A Webhook&lt;/h2&gt;&#xA;&lt;p&gt;Before we dive into ACR webhooks, let us do a quick refresher on webhooks. However, if you are familiar with webhooks, skip this paragraph and move on to (ACR webhooks).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESPC 2019 - Code your Azure with Terraform</title>
      <link>https://thorsten-hans.com/espc2019-code-your-azure-with-terraform/</link>
      <pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/espc2019-code-your-azure-with-terraform/</guid>
      <description>&lt;p&gt;This week European SharePoint and Azure Conference (ESPC19) takes place in Prague. I had the chance to give a talk on Terraform as part of the Azure track.&lt;/p&gt;&#xA;&lt;p&gt;My talk was all about adopting Infrastructure as Code (IaC) in the Azure space.&lt;/p&gt;&#xA;&lt;p&gt;During the talk we built three different environments (development, staging and production) with slightly different configuration. If you want to look at the final solution, &lt;a href=&#34;https://github.com/ThorstenHans/espc2019-terraform&#34;&gt;checkout the demo-code on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker on Windows - Fix Time Synchronization Issue</title>
      <link>https://thorsten-hans.com/docker-on-windows-fix-time-synchronization-issue/</link>
      <pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/docker-on-windows-fix-time-synchronization-issue/</guid>
      <description>&lt;p&gt;During validation of Windows as main operating system (which is still ongoing), I experienced strange issues when trying to build my blog using the &lt;code&gt;jekyll/jekyll&lt;/code&gt; Docker Image running on Windows 10.&lt;/p&gt;&#xA;&lt;p&gt;At some point, &lt;code&gt;jekyll build&lt;/code&gt; printed strange warnings that my shiny new article wont be compiled because it has a date in future.&lt;/p&gt;&#xA;&lt;p&gt;I checked the filename and frontmatter metadata of the post. However both looked good. So I dived a bit deeper and recognized that the date within the container was set to &lt;strong&gt;25th&lt;/strong&gt; of November whereas my host system was displaying the &lt;strong&gt;27th&lt;/strong&gt; of November.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Integrate ACR And Azure Monitor</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-integrate-acr-and-azure-monitor/</link>
      <pubDate>Tue, 26 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-integrate-acr-and-azure-monitor/</guid>
      <description>&lt;p&gt;The third part of Azure Container Registry Unleashed will guide you through the process of integrating ACR and Azure Monitor to collect essential information and metrics about your ACR instances at runtime. The integration of ACR and Azure Monitor is currently in public preview. However, retrieving insights about your ACR instance is mission-critical, so we will dive into this topic now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-azure-monitor&#34;&gt;What Is Azure Monitor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-a-log-analytics-workspace&#34;&gt;Create A Log Analytics Workspace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#connect-acr-to-azure-monitor&#34;&gt;Connect ACR To Azure Monitor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#populate-sample-data-into-azure-monitor&#34;&gt;Populate Sample Data Into Azure Monitor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#query-acr-events-and-metrics-using-azure-monitor&#34;&gt;Query ACR Events And Metrics Using Azure Monitor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#create-alerts-for-acr-events&#34;&gt;Create Alerts For ACR Events&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-acr-unleashed-series&#34;&gt;The ACR Unleashed series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-azure-monitor&#34;&gt;What Is Azure Monitor&lt;/h2&gt;&#xA;&lt;p&gt;Azure Monitor is a centralized hub for aggregating, analyzing, visualizing and working with data. It consumes data from different sources and collects that data in data stores. All data collected by Azure Monitor fits into on of two categories, logs and metrics.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – Authentication, Identity Access Management And Content-Trust</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-authentication-iam-contenttrust/</link>
      <pubDate>Thu, 21 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-authentication-iam-contenttrust/</guid>
      <description>&lt;p&gt;This is the second part of Azure Container Registry Unleashed. Today, we will go one step further and talk about Authentication (AuthN), Identity Access Management (IAM) and Content-Trust in the scope of ACR. To be a bit more precisely, this post contains the following sections:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-authentication&#34;&gt;ACR Authentication&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-identity-access-management-iam&#34;&gt;ACR Identity Access Management (IAM)&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#iam-for-azure-active-directory-users-and-groups&#34;&gt;IAM For Azure Active Directory Users And Groups&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#iam-for-service-principals&#34;&gt;IAM For Service Principals&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-docker-content-trust&#34;&gt;What Is Docker Content-Trust&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-content-trust-in-acr&#34;&gt;Configure Content-Trust In ACR&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#enable-content-trust-for-docker-cli&#34;&gt;Enable Content-Trust For Docker CLI&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-content-trust-globally&#34;&gt;Configure Content-Trust Globally&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#configure-content-trust-explicitly&#34;&gt;Configure Content-Trust Explicitly&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#content-trust-by-example&#34;&gt;Content-Trust By Example&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#push-signed-docker-images-with-global-content-trust&#34;&gt;Push Signed Docker Images With Global Content-Trust&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#push-signed-docker-images-with-contextual-content-trust&#34;&gt;Push Signed Docker Images With Contextual Content-Trust&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#content-trust-key-management&#34;&gt;Content-Trust Key Management&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#acr-content-trust-pitfalls&#34;&gt;ACR Content-Trust Pitfalls&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#docker-content-trust-pitfalls&#34;&gt;Docker Content-Trust Pitfalls&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#further-information-on-content-trust&#34;&gt;Further Information On Content-Trust&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-acr-unleashed-series&#34;&gt;The ACR Unleashed series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;acr-authentication&#34;&gt;ACR Authentication&lt;/h2&gt;&#xA;&lt;p&gt;As mentioned in the first post of the series, Azure Container Registry integrates seamlessly with Azure Active Directory (AAD) and offers several ways to authenticate. Basically, you should differentiate between user-involved authentication and headless authentication, which is typically issued by a service in service-to-service scenarios. Having all authentication calls separated into those two categories, finding the correct authentication-pattern becomes easier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ACR Unleashed – ACR Up And Running with Geo Replication</title>
      <link>https://thorsten-hans.com/azure-container-registry-unleashed-acr-up-and-running/</link>
      <pubDate>Tue, 19 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-container-registry-unleashed-acr-up-and-running/</guid>
      <description>&lt;p&gt;Azure Container Registry – or short ACR - is a managed service offered by Microsoft Azure. It is a private Docker Registry based on Docker Registry 2.0 and acts as central service in many containerized application architectures. Compared to other private Docker registries, ACR offers several advantages like ease of administration due to powerful Azure CLI commands, seamless integration with other Azure Services such as Azure Kubernetes Service and frictionless authentication using Azure Active Directory (AAD).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Book review - Kubernetes Up &amp; Running 2nd Edition</title>
      <link>https://thorsten-hans.com/book-review-kubernetes-up-and-running-2nd-edition/</link>
      <pubDate>Sat, 02 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/book-review-kubernetes-up-and-running-2nd-edition/</guid>
      <description>&lt;p&gt;A couple of days ago, I stumbled upon a tweet from Brendan Burns mentioning that the 2nd edition of &amp;ldquo;Kubernetes: Up &amp;amp; Running&amp;rdquo; is available. Because I enjoyed the initial release of the book some years ago, I bought a copy and read it. Brendan Burns, Joe Beda, and Kelsey Hightower updated their popular book  &amp;ldquo;Kubernetes: Up &amp;amp; Running&amp;rdquo; to provide a good Kubernetes introduction for developers. On less than 300 pages, you will learn what Kubernetes is and which needs it addresses.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Certified Kubernetes Application Developer - Review and Tips</title>
      <link>https://thorsten-hans.com/certified-kubernetes-application-developer-ckad-review-and-tips/</link>
      <pubDate>Tue, 22 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/certified-kubernetes-application-developer-ckad-review-and-tips/</guid>
      <description>&lt;p&gt;During this week, I took the Certified Kubernetes Application Developer (CKAD) exam and passed. However, I did not take the exam because of the certificate; I took the exam because of the challenge.  The challenge to verify my Kubernetes knowledge and experience. The knowledge and experience I got from real-world projects and from falling in love with cloud-native application development in general.&lt;/p&gt;&#xA;&lt;p&gt;Compared to other exams (and I did a bunch of exams back in the .NET Framework v3 and v4 days), CKAD is challenging. There are no multiple-choice questions, CKAD challenges your experience with Kubernetes by presenting you with a set of day-to-day tasks. Tasks that you must solve in 120 minutes or less by using a terminal and an editor. I enjoy challenges like these. They make me identify areas where I can improve because they measure both: Experience and speed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Join my webinar about Terraform and Azure during Azure Week</title>
      <link>https://thorsten-hans.com/terraform-webinar-during-azure-week/</link>
      <pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/terraform-webinar-during-azure-week/</guid>
      <description>&lt;p&gt;We are getting closer to the European Azure and SharePoint Conference 2019 (ESPC2019), which takes place during December 2019 in Prague.&lt;/p&gt;&#xA;&lt;p&gt;A couple of speakers (all focussing Azure related topics) and myself agreed on delivering a vast amount of free content to ramp up your Azure skills before ESPC19.&lt;/p&gt;&#xA;&lt;p&gt;We will celebrate Azure week starting the 14th of October and have a &lt;a href=&#34;https://www.sharepointeurope.com/azure-week/&#34;&gt;great schedule&lt;/a&gt;  for you.&lt;/p&gt;&#xA;&lt;p&gt;I will contribute a webinar about Terraform and Azure on Friday the 18th of October at 11 am CEST. You can &lt;a href=&#34;https://www.sharepointeurope.com/azure-week/#form&#34;&gt;register for the webinar here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AKS and ACR Integration - Revisited</title>
      <link>https://thorsten-hans.com/aks-and-acr-integration-revisited/</link>
      <pubDate>Fri, 04 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/aks-and-acr-integration-revisited/</guid>
      <description>&lt;p&gt;Back in 2017, I published &lt;a href=&#34;https://thorsten-hans.com/how-to-use-private-azure-container-registry-with-kubernetes/&#34;&gt;this&lt;/a&gt; article on integrating Kubernetes with ACR. Since that time, a lot has changed in the world of containers and orchestrators. Especially Microsoft is pushing hard in the Kubernetes area and keeps on shipping features regularly as part of their managed Kubernetes offering. The integration of ACR and AKs became even more comfortable since Azure CLI &lt;code&gt;2.0.73&lt;/code&gt; has been released. That said, let&amp;rsquo;s check out how smooth the integration is.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The state of Helm 3 - Hands-On!</title>
      <link>https://thorsten-hans.com/the-state-of-helm3-hands-on/</link>
      <pubDate>Wed, 02 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/the-state-of-helm3-hands-on/</guid>
      <description>&lt;p&gt;Helm, is the package manager for Kubernetes. It allows you to install complex applications and maintain the entire application lifecycle using a lightweight and intuitive CLI.  You can think of it as the &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;nuget&lt;/code&gt; for Kubernetes.&lt;/p&gt;&#xA;&lt;p&gt;Helm is around for quite some time in the Kubernetes community. The project was started by Deis and Google and is an essential part of CNCF.&lt;/p&gt;&#xA;&lt;p&gt;Since Helm 3 is available as a beta release, it is the right time to look into it. This article summarizes the upcoming changes and illustrates how Helm 3 could be used to build, distribute, and manage applications in Kubernetes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom domains in Azure Kubernetes Service (AKS) with NGINX Ingress and Azure CLI</title>
      <link>https://thorsten-hans.com/custom-domains-in-azure-kubernetes-with-nginx-ingress-azure-cli/</link>
      <pubDate>Mon, 30 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/custom-domains-in-azure-kubernetes-with-nginx-ingress-azure-cli/</guid>
      <description>&lt;p&gt;When running applications in Azure Kubernetes Service (AKS), NGINX Ingress does a great job in routing inbound traffic. The flexible routing engine allows a wide variety of scenarios to expose different parts of cloud-native applications using different URLs. Unfortunately, there is no documentation on how to map such a custom domain to a public IP address without using the Azure Portal.&lt;/p&gt;&#xA;&lt;p&gt;This article outlines the process of mapping a custom domain to the public IP address acquired by NGINX Ingress in AKS using Azure CLI. I assume you have already deployed your application and corresponding NGINX Ingress to your AKS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Six golden rules of Infrastructure as Code (IaC)</title>
      <link>https://thorsten-hans.com/six-golden-rules-of-infrastructure-as-code-iac/</link>
      <pubDate>Mon, 06 May 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/six-golden-rules-of-infrastructure-as-code-iac/</guid>
      <description>&lt;p&gt;Infrastructure as Code (IaC) is the process of describing all required infrastructure (such as servers, services or databases) to run your service or application. In this article, I want to share my six golden rules of Infrastructure as Code.&lt;/p&gt;&#xA;&lt;p&gt;Over the past couple of years, IaC gained a lot of traction; more and more people are interested in persisting all their infrastructure-related knowledge in code to collaborate on it and establish a common understanding of it and get rid of that critical project risk. However, IaC solutions should be treated like every other primary part of your solution and follow some rules. I&amp;rsquo;ve seen many IaC solutions and compiled the following six rules, which will help you building robust Infrastructure as Code solutions for your projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terraform - State demystified</title>
      <link>https://thorsten-hans.com/terraform-state-demystified/</link>
      <pubDate>Sat, 30 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/terraform-state-demystified/</guid>
      <description>&lt;p&gt;&lt;em&gt;State Management&lt;/em&gt; is essential in &lt;em&gt;Terraform&lt;/em&gt;. This post explains what State in &lt;em&gt;Terraform&lt;/em&gt; is, how it is mutated and how you should deal with it - no matter if you&amp;rsquo;re a one-person show or part of a development team.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-terraform-state&#34;&gt;What is Terraform State&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#terraforms-state-file&#34;&gt;Terraform&amp;rsquo;s State file&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#tracking-of-outputs&#34;&gt;Tracking of outputs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#querying-state-using-cli&#34;&gt;Querying State using CLI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#visualizing-terraform-dependecy-graph&#34;&gt;Visualizing Terraform Dependecy Graph&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#introducing-state-backends&#34;&gt;Introducing State Backends&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#state-locking&#34;&gt;State Locking&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Having &lt;em&gt;Terraform&lt;/em&gt; displaying detailed previews before applying modifications to cloud platforms is amazing. To deliver such a great experience, &lt;em&gt;Terraform&lt;/em&gt; uses the so-called &lt;em&gt;State&lt;/em&gt;. This article will explain what &lt;em&gt;State&lt;/em&gt; is, how it works and why it is mission-critical.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terraform - The Definitive Guide for Azure Enthusiasts</title>
      <link>https://thorsten-hans.com/terraform-the-definitive-guide-for-azure-enthusiasts/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/terraform-the-definitive-guide-for-azure-enthusiasts/</guid>
      <description>&lt;p&gt;&lt;em&gt;Terraform&lt;/em&gt; is a product in the &lt;em&gt;Infrastructure as Code (IaC)&lt;/em&gt; space, it has been created by &lt;a href=&#34;https://www.hashicorp.com/&#34;&gt;HashiCorp&lt;/a&gt;. With &lt;em&gt;Terraform&lt;/em&gt; you can use a single language to describe your infrastructure in code. This guide explains the core concepts of &lt;em&gt;Terraform&lt;/em&gt; and essential basics that you need to spin up your first Azure environments.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-infrastructure-as-code-iac&#34;&gt;What is Infrastructure as Code (IaC)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#what-is-terraform&#34;&gt;What is Terraform&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#terraform-providers&#34;&gt;Terraform Providers&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-hashicorp-configuration-language-hcl&#34;&gt;The HashiCorp Configuration Language (HCL)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#preview-changes---terraform-execution-plan&#34;&gt;Preview Changes - Terraform Execution Plan&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#setup-terraform-on-your-machine&#34;&gt;Setup Terraform On Your Machine&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#terraform-in-visualstudio-code&#34;&gt;Terraform in VisualStudio Code&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#datatypes-in-hcl&#34;&gt;DataTypes in HCL&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#booleans-in-hcl&#34;&gt;Booleans in HCL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#strings-in-hcl&#34;&gt;Strings in HCL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lists-in-hcl&#34;&gt;Lists in HCL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#maps-in-hcl&#34;&gt;Maps in HCL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#terraform-project-structure&#34;&gt;Terraform Project Structure&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#variables-in-hcl&#34;&gt;Variables In HCL&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#use-variable-references&#34;&gt;Use Variable References&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#outputs-in-hcl&#34;&gt;Outputs in HCL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#overrides&#34;&gt;Overrides&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-terraform-azure-provider&#34;&gt;The Terraform Azure Provider&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#terraform-azure-provider-authentication-mechanisms&#34;&gt;Terraform Azure Provider Authentication mechanisms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#your-first-azure-environment-with-terraform&#34;&gt;Your first Azure Environment with Terraform&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#destroy-terraform-environments&#34;&gt;Destroy Terraform Environments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#the-terraform-lifecycle&#34;&gt;The Terraform Lifecycle&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#download-sample-code-from-github&#34;&gt;Download Sample Code from GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#conclusion&#34;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-is-infrastructure-as-code-iac&#34;&gt;What is Infrastructure as Code (IaC)&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Infrastructure as Code (IaC)&lt;/em&gt; is the process of describing infrastructural components such as servers, services, or databases using a programming language. Once all infrastructural requirements are described in code, that code can be stored in &lt;em&gt;source control&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Azure Key Vault FlexVolume for Kubernetes  —  A journey to integrate Azure Key Vault and AKS</title>
      <link>https://thorsten-hans.com/azure-key-vault-flexvolume-for-kubernetes/</link>
      <pubDate>Mon, 10 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azure-key-vault-flexvolume-for-kubernetes/</guid>
      <description>&lt;p&gt;This is the second part of the mini-series on Integrating &lt;em&gt;Azure Key Vault&lt;/em&gt; and &lt;em&gt;AKS&lt;/em&gt; (Azure Kubernetes Services). If you missed the &lt;a href=&#34;https://thorsten-hans.com/azuread-pod-identity-aks-integrate-azure-keyvault/&#34;&gt;first part&lt;/a&gt;, you should definitely read it before digging into this article.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introducing-azure-key-vault-flexvolume-for-kubernetes&#34;&gt;Introducing Azure Key Vault FlexVolume for Kubernetes&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Azure Key Vault FlexVolume for Kubernetes&lt;/em&gt; is a driver that allows you to consume typed data from &lt;em&gt;Azure Key Vault&lt;/em&gt; (like secrets, keys or certificates) and attach that data directly to Pods. You can find the project itself &lt;a href=&#34;https://github.com/Azure/kubernetes-keyvault-flexvol&#34;&gt;directly on GitHub&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AzureAD Pod Identity in AKS: A journey to integrate Azure Key Vault</title>
      <link>https://thorsten-hans.com/azuread-pod-identity-aks-integrate-azure-keyvault/</link>
      <pubDate>Thu, 06 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/azuread-pod-identity-aks-integrate-azure-keyvault/</guid>
      <description>&lt;p&gt;Back in May, I wrote an article on how to integrate Azure Key Vault with ACS. Since that, a lot happened in the Azure and Kubernetes space and I thought an updated version would be worth sharing because dealing correctly with sensitive data is &lt;strong&gt;essential&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is the first of two separate articles, that will guide you through the complete setup and configuration process to integrate &lt;em&gt;Azure Kubernetes Services&lt;/em&gt; and &lt;em&gt;Azure Key Vault&lt;/em&gt; securely without leaking essential data about your &lt;em&gt;Service Principal&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inspect your Kubernetes inventory in no time with ASP.NET Core and Kubernetes Client Library</title>
      <link>https://thorsten-hans.com/inspect-kubernetes-inventory-with-aspnetcore-kubernetes-client-library/</link>
      <pubDate>Tue, 04 Dec 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/inspect-kubernetes-inventory-with-aspnetcore-kubernetes-client-library/</guid>
      <description>&lt;p&gt;Running and maintaining complex applications on Kubernetes often requires good monitoring capabilities. Sure, there are plenty of products available which can be deployed easily to an existing cluster to get insights about the current cluster inventory. But why not build your own?&lt;/p&gt;&#xA;&lt;p&gt;In this post, I&amp;rsquo;ll guide you through the process of creating a simple ASP.NET Core Web API to expose your cluster&amp;rsquo;s inventory  -  such as Pods for example -  to other applications in order to get exactly those insights that are important for you. I used the following example frequently during public talks to explain the core concepts of &lt;em&gt;Kubernetes&lt;/em&gt; to .NET developers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Azure Key Vault with Azure Container Services</title>
      <link>https://thorsten-hans.com/integrating-azure-keyvault-with-azure-container-services/</link>
      <pubDate>Fri, 11 May 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/integrating-azure-keyvault-with-azure-container-services/</guid>
      <description>&lt;p&gt;With &lt;em&gt;Azure Key Vault&lt;/em&gt;, Microsoft is offering a dedicated and secure service to manage and maintain sensitive data like Connection-Strings, Certificates, or key-value pairs.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re hoping to see a native &lt;em&gt;Azure Key Vault&lt;/em&gt; integration for &lt;em&gt;Azure Container Services&lt;/em&gt; (ACS) in the near future. At least the &lt;a href=&#34;https://docs.microsoft.com/en-us/azure/aks/faq&#34;&gt;official FAQ&lt;/a&gt; mentions the feature on the product&amp;rsquo;s roadmap. Until this features will be shipped and if you&amp;rsquo;re using another &lt;em&gt;Kubernetes&lt;/em&gt; environment - such as &lt;em&gt;GCP&lt;/em&gt; or &lt;em&gt;AWS&lt;/em&gt; offerings -, you&amp;rsquo;ve to integrate &lt;em&gt;Azure Key Vault&lt;/em&gt; manually into your application building blocks to get rid of storing most sensitive data in plain old &lt;em&gt;Kubernetes Secrets&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limit resources for containers with LimitRanges in Kubernetes</title>
      <link>https://thorsten-hans.com/limit-resources-for-containers-with-limitranges-in-kubernetes/</link>
      <pubDate>Thu, 22 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/limit-resources-for-containers-with-limitranges-in-kubernetes/</guid>
      <description>&lt;p&gt;When deploying applications to &lt;em&gt;Kubernetes&lt;/em&gt; one of the most important things to specify are &lt;em&gt;resource-requests&lt;/em&gt; and &lt;em&gt;-limits&lt;/em&gt;. Having proper limits defined per Container makes it easier to optimize the hardware utilization for all worker nodes in a Kubernetes cluster.&lt;/p&gt;&#xA;&lt;p&gt;When creating deployments, you can set resource-requests and -limits by using the &lt;code&gt;resources&lt;/code&gt; property on each container as part of the &lt;code&gt;podspec&lt;/code&gt;. See the &lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/#container-v1-core&#34;&gt;official documentation for further information&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, those properties are not mandatory, so every developer has to remember providing requests and limits for both &lt;strong&gt;memory&lt;/strong&gt; and &lt;strong&gt;cpu&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upgrading a Kubernetes cluster on AKS using Azure CLI</title>
      <link>https://thorsten-hans.com/upgrading-a-kubernetes-cluster-on-aks-using-azure-cli/</link>
      <pubDate>Thu, 22 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/upgrading-a-kubernetes-cluster-on-aks-using-azure-cli/</guid>
      <description>&lt;p&gt;Upgrading an on-premises &lt;em&gt;Kubernetes&lt;/em&gt; cluster can be very cumbersome and time-consuming task. It&amp;rsquo;s not just a single upgrade command that you can execute and everything happens magically behind the scenes. A single command for upgrading an entire Kubernetes cluster would be awesome 💚 and that&amp;rsquo;s exactly what&amp;rsquo;s provided by the AKS team. A single command to upgrade all your masters and nodes.&lt;/p&gt;&#xA;&lt;p&gt;My fellow MVP &lt;a href=&#34;https://zimmergren.net&#34;&gt;Tobias Zimmergren&lt;/a&gt; wrote a &lt;a href=&#34;https://zimmergren.net/azure-container-services-aks-upgrade-kubernetes/&#34;&gt;great post on how to upgrade AKS clusters&lt;/a&gt; a couple of weeks ago. But technology and tools are &lt;strong&gt;changing quickly&lt;/strong&gt; these days.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CronJobs on AKS using Azure Files and .NET Core</title>
      <link>https://thorsten-hans.com/cronjobs-in-managed-azure-container-services-aks-using-azure-files-and-net-core/</link>
      <pubDate>Wed, 21 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/cronjobs-in-managed-azure-container-services-aks-using-azure-files-and-net-core/</guid>
      <description>&lt;p&gt;Tasks need to be executed repeatedly in almost every application. We all know requirements like these. Perhaps you have to clean up some tables in the database or you&amp;rsquo;ve to delete temporary files, no matter which requirement you&amp;rsquo;ve exactly, but &lt;em&gt;CronJobs&lt;/em&gt; in &lt;em&gt;Kubernetes&lt;/em&gt; are exactly designed for scenarios like these.&#xA;&lt;em&gt;Kubernetes&lt;/em&gt; offers &lt;em&gt;CronJobs&lt;/em&gt; as first-class citizen objects. In the scope of &lt;em&gt;Kubernetes&lt;/em&gt;, a &lt;em&gt;CronJob&lt;/em&gt; should be used if you want to execute a piece of software either at a specified point in time or repeatedly at specified points in time.&#xA;Technically it&amp;rsquo;s just a regular Pod with a schedule definition. You&amp;rsquo;ve to provide your schedule using the good old &lt;a href=&#34;https://en.wikipedia.org/wiki/Cron&#34;&gt;cron format&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploy Azure Functions to Kubernetes and scale them automatically</title>
      <link>https://thorsten-hans.com/deploy-azure-functions-to-kubernetes-and-scale-them-automatically/</link>
      <pubDate>Fri, 26 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/deploy-azure-functions-to-kubernetes-and-scale-them-automatically/</guid>
      <description>&lt;p&gt;&lt;em&gt;Azure Functions&lt;/em&gt; has become my standard framework to build &lt;em&gt;serverless&lt;/em&gt; backends for &lt;em&gt;Single Page Applications&lt;/em&gt; (SPAs). It&amp;rsquo;s easy to get started with &lt;em&gt;Azure Functions&lt;/em&gt;, although the platform itself is really powerful and highly configurable. I really love the cloud hosting capabilities for &lt;em&gt;Azure Functions&lt;/em&gt;, but from time to time, it&amp;rsquo;s not allowed to use the public cloud as the deployment target.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Azure Functions&lt;/em&gt; can easily be hosted in different environments. You can download the entire runtime and execute it on-premises (if you have to) or you can use the existing &lt;em&gt;Docker&lt;/em&gt; image and deploy your serverless backend to &lt;em&gt;Kubernetes&lt;/em&gt;. And that&amp;rsquo;s exactly what this post will describe, you&amp;rsquo;ll create a sample Azure Functions project including a docker container, deploy it to a Kubernetes cluster and let it automatically scale based on CPU utilization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hybrid Kubernetes Cluster on Azure Container Services</title>
      <link>https://thorsten-hans.com/hybrid-kubernetes-cluster-on-azure-container-services/</link>
      <pubDate>Sat, 26 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/hybrid-kubernetes-cluster-on-azure-container-services/</guid>
      <description>&lt;p&gt;Using Azure Container Services (ACS) you can easily build hybrid kubernetes clusters. In this context, hybrid means that you&amp;rsquo;ll end up having a kubernetes cluster with both, Linux Nodes and Windows Nodes.&lt;/p&gt;&#xA;&lt;p&gt;In this article I&amp;rsquo;ll guide you through the process of creating a new hybrid kubernetes cluster on Azure Container Services.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;When starting from scratch, you need only a few things:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a Microsoft Azure Account&lt;/li&gt;&#xA;&lt;li&gt;a Text Editor&lt;/li&gt;&#xA;&lt;li&gt;a local installation of &lt;code&gt;kubectl&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/cli/azure/overview&#34;&gt;Azure CLI 2.0&lt;/a&gt; installed on your machine&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;configuring-azure-cli&#34;&gt;Configuring Azure CLI&lt;/h2&gt;&#xA;&lt;p&gt;Once you&amp;rsquo;ve all the prerequisites in place, it&amp;rsquo;s time to care a bit about our Azure Subscription.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What to do if Pods stuck in state Pending while deploying to Azure Container Instances</title>
      <link>https://thorsten-hans.com/fix-pods-stuck-in-pending-on-azure-container-instances/</link>
      <pubDate>Thu, 24 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/fix-pods-stuck-in-pending-on-azure-container-instances/</guid>
      <description>&lt;p&gt;&lt;em&gt;Azure Container Instances&lt;/em&gt; (&lt;em&gt;ACI&lt;/em&gt;) allows you to spin up containers in the cloud without creating or managing any kind of infrastructure. It&amp;rsquo;s really bringing container as a service to you. That said, &lt;em&gt;ACI&lt;/em&gt; is no replacement for Container Orchestration Systems like &lt;em&gt;Kubernetes&lt;/em&gt;. It&amp;rsquo;s more an underlying infrastructure for hosting/running containers itself.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;ACI&lt;/em&gt; integrates seamlessly with orchestrators like &lt;em&gt;Kubernetes&lt;/em&gt;. You can use the &lt;em&gt;ACI connector for Kubernetes&lt;/em&gt; to create an &lt;em&gt;ACI&lt;/em&gt; node on your Kubernetes cluster. See &lt;a href=&#34;https://github.com/Azure/aci-connector-k8s&#34;&gt;this repo for more details&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Autocompletion for kubectl and aliases using oh-my-zsh</title>
      <link>https://thorsten-hans.com/autocompletion-for-kubectl-and-aliases-using-oh-my-zsh/</link>
      <pubDate>Tue, 22 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/autocompletion-for-kubectl-and-aliases-using-oh-my-zsh/</guid>
      <description>&lt;p&gt;&lt;em&gt;Kubernetes&lt;/em&gt; is managed and used by utilizing the command line interface &lt;code&gt;kubectl&lt;/code&gt;. I got a ton of questions regarding my terminal configuration for daily k8s tasks. Questions like &lt;em&gt;“Which aliases do you use for regular k8s tasks?”&lt;/em&gt; or &lt;em&gt;“How did you get autocompletion for all the k8s stuff up and running on your mac?”&lt;/em&gt;&#xA;So this post will answer those questions quickly to ensure everyone will become more productive and can spin up even more pods and nodes in less time 🚀&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Azure Files in Kubernetes Deployments with ASP.NET Core</title>
      <link>https://thorsten-hans.com/using-azure-files-in-kubernetes-deployments-with-asp-net-core/</link>
      <pubDate>Mon, 21 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/using-azure-files-in-kubernetes-deployments-with-asp-net-core/</guid>
      <description>&lt;p&gt;&lt;em&gt;Azure Container Services&lt;/em&gt; (&lt;em&gt;ACS&lt;/em&gt;) makes it incredibly easy to spin up and manage &lt;em&gt;Kubernetes&lt;/em&gt; clusters in the cloud. There are plenty of other Azure resources which you can use to build daily scenarios on a native cloud stack.&#xA;Common scenarios are serving files from and writing important information to persisted locations. Azure offers many different storage capabilities. In this post, I&amp;rsquo;ll explain how to use an Azure File Share to serve content by using a .NET Core Web API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use a private Azure Container Registry with Kubernetes</title>
      <link>https://thorsten-hans.com/how-to-use-private-azure-container-registry-with-kubernetes/</link>
      <pubDate>Fri, 18 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/how-to-use-private-azure-container-registry-with-kubernetes/</guid>
      <description>&lt;p&gt;Besides using the goodness of Azure Container Services (ACS). Different Azure services like Azure Container Registry (ACR) and Azure Container Instances (ACI) can be used and connected from independent container orchestrators like kubernetes (k8s). This post will explain how to set up a custom ACR and connect it to an existing k8s cluster to ensure images will be pulled from the private container registry instead of the public docker hub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KISS  Angular apps a bit more framework agnostic</title>
      <link>https://thorsten-hans.com/kiss-angular-apps-more-framework-agnostic/</link>
      <pubDate>Tue, 07 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/kiss-angular-apps-more-framework-agnostic/</guid>
      <description>&lt;p&gt;More and more developers are jumping on the &lt;em&gt;Angular&lt;/em&gt; train in these days. &lt;em&gt;Angular&lt;/em&gt; is awesome 💚🤘🏼 but it&amp;rsquo;s just a framework, a framework that may be replaced at some point in time by the next big thing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hopefully, the next big thing will also be an Angular thing 😀&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;But to be honest, nobody can tell. Fast forward a few years and you&amp;rsquo;ll find yourself being responsible for migrating an existing old &lt;em&gt;Angular&lt;/em&gt; &lt;code&gt;4.0.0&lt;/code&gt; app to the cool, new kid.&#xA;As soon as this will happen, you&amp;rsquo;ll hopefully remember this post. I&amp;rsquo;m going to share small, easy to adopt steps to make your &lt;em&gt;Angular&lt;/em&gt; apps a bit more &lt;em&gt;framework agnostic&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Make writing technical content great again!</title>
      <link>https://thorsten-hans.com/make-writing-technical-content-great-again/</link>
      <pubDate>Sat, 04 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/make-writing-technical-content-great-again/</guid>
      <description>&lt;p&gt;Like many other developers, I write articles for various print and online magazines. I do this for almost a decade now and I&amp;rsquo;ve used many different approaches to make writing as comfortable as possible for me. That said, I want to share the tools I use and the workflow I prefer.&lt;/p&gt;&#xA;&lt;p&gt;When writing about frameworks, programming languages or scripts, you&amp;rsquo;ve some slightly different requirements than authors of regular books or articles. You want to:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Electron CrashReporter - stay up to date if your app fucked up!</title>
      <link>https://thorsten-hans.com/electron-crashreporter-stay-up-to-date-if-your-app-fucked-up/</link>
      <pubDate>Fri, 03 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/electron-crashreporter-stay-up-to-date-if-your-app-fucked-up/</guid>
      <description>&lt;p&gt;Every one of us knows about those situations. You ship your app to production and you&amp;rsquo;re instantly losing 10 pounds of weight 💪🏼 if nothing bad happens in the first 24 hours. You&amp;rsquo;re finally able to get some sleep, customers are happy, the manager is happy, &lt;em&gt;you are happy&lt;/em&gt;!&lt;/p&gt;&#xA;&lt;p&gt;But at some point in time your app will crash! It will definitely crash. No matter how professional you are, there are bugs! Customers will find them! And that&amp;rsquo;s &lt;strong&gt;okay&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating Angular and Electron using ngx-electron</title>
      <link>https://thorsten-hans.com/integrating-angular-and-electron-using-ngx-electron/</link>
      <pubDate>Fri, 24 Feb 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/integrating-angular-and-electron-using-ngx-electron/</guid>
      <description>&lt;p&gt;GitHub Electron makes crafting cross-platform desktop applications really simple. You can take any existing website or &lt;em&gt;Single Page Application&lt;/em&gt; (&lt;em&gt;SPA&lt;/em&gt;) and just wrap it into a native container. Those containers (powered by &lt;em&gt;Chromium&lt;/em&gt; and &lt;em&gt;Node.js&lt;/em&gt;) could easily be distributed to all major desktop operating systems like &lt;em&gt;Windows&lt;/em&gt;, &lt;em&gt;macOS&lt;/em&gt; or &lt;em&gt;Linux&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;On the other side is &lt;em&gt;Angular&lt;/em&gt; as a full-blown application framework for building robust &lt;em&gt;SPAs&lt;/em&gt;. &lt;em&gt;Angular&lt;/em&gt; makes building &lt;em&gt;SPAs&lt;/em&gt; fun and provides a rich set of APIs to get everything done, inside of the client. However, sometimes you need a deeper integration. For example, you want to call into &lt;em&gt;Electron&amp;rsquo;s&lt;/em&gt; main-process to execute some &lt;em&gt;Node.js&lt;/em&gt; script like reading files from a directory or do some other processing using &lt;em&gt;Node.js&lt;/em&gt;. In those cases, you could utilize &lt;em&gt;Electron&amp;rsquo;s&lt;/em&gt; APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Standard Angular Pipes and ng-translate</title>
      <link>https://thorsten-hans.com/standard-angular-pipes-and-ng-translate/</link>
      <pubDate>Thu, 23 Feb 2017 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/standard-angular-pipes-and-ng-translate/</guid>
      <description>&lt;p&gt;Of course is &lt;em&gt;Angular&lt;/em&gt; itself shipping with some &lt;em&gt;i18n&lt;/em&gt; (internationalization) APIs, but &lt;a href=&#34;https://github.com/ngx-translate/core&#34;&gt;ng-translate&lt;/a&gt; has become the new default for many developers to provide translations within &lt;em&gt;Angular&lt;/em&gt; apps.&lt;/p&gt;&#xA;&lt;p&gt;Personally, I prefer &lt;code&gt;ng-translate&lt;/code&gt; over built-in i18n APIs because it is fast, easy to explain and it allows to run multilingual apps without having the requirement to have dedicated hosting for each language.&lt;/p&gt;&#xA;&lt;p&gt;One of the disadvantages is, that &lt;code&gt;ng-translate&lt;/code&gt; doesn&amp;rsquo;t provide &lt;em&gt;Pipes&lt;/em&gt; as &lt;em&gt;Angular&lt;/em&gt; does. &lt;em&gt;Angular&lt;/em&gt; ships twelve useful &lt;em&gt;Pipes&lt;/em&gt;, including things like &lt;code&gt;DecimalPipe&lt;/code&gt;, &lt;code&gt;DatePipe&lt;/code&gt; or the &lt;code&gt;CurrencyPipe&lt;/code&gt;. Some of those standard &lt;em&gt;Pipes&lt;/em&gt; offer a simple way to format values directly within &lt;em&gt;HTML&lt;/em&gt; templates.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Treat your iTerm2 like Guake</title>
      <link>https://thorsten-hans.com/treat-your-iterm2-like-guake/</link>
      <pubDate>Sat, 15 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/treat-your-iterm2-like-guake/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.iterm2.com/&#34;&gt;&lt;em&gt;iTerm2&lt;/em&gt;&lt;/a&gt; is a real productivity boost for &lt;em&gt;macOS&lt;/em&gt; users. There are numerous great features built in the terminal replacement. This article will explain how to configure the &lt;em&gt;hotkey window&lt;/em&gt; &lt;em&gt;iTerm&lt;/em&gt; is offering.&lt;/p&gt;&#xA;&lt;p&gt;Over the past couple of weeks, I found myself using &lt;em&gt;Ubuntu&lt;/em&gt; quiet often. Unfortunately, &lt;em&gt;iTerm2&lt;/em&gt; isn&amp;rsquo;t available for &lt;em&gt;Ubuntu&lt;/em&gt;, but there is &lt;em&gt;Guake&lt;/em&gt; which is another powerful terminal. The experience and integration &lt;em&gt;Guake&lt;/em&gt; is offering for &lt;em&gt;Linux&lt;/em&gt; distributions is amazing, &lt;em&gt;Guake&lt;/em&gt; registers a global shortcut to easily open the terminal no matter where you&amp;rsquo;re currently working on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTML5 notifications in electron apps with Angular</title>
      <link>https://thorsten-hans.com/html5-notifications-in-electron-apps-with-angular/</link>
      <pubDate>Fri, 22 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/html5-notifications-in-electron-apps-with-angular/</guid>
      <description>&lt;p&gt;Within &lt;em&gt;Electron&lt;/em&gt; apps, you can use &lt;em&gt;HTML5 Notification API&lt;/em&gt; to keep users posted about events happened. &lt;em&gt;Electron&lt;/em&gt; is bridging incoming calls to &lt;em&gt;HTML5 Notification API&lt;/em&gt; to native notification APIs offered by all supported platforms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-a-notification&#34;&gt;Create a notification&lt;/h2&gt;&#xA;&lt;p&gt;Creating new notifications is straightforward. An instance of the &lt;code&gt;Notification&lt;/code&gt; class is all you need. In the most basic shape, notification consists of a &lt;code&gt;title&lt;/code&gt;. Additional metadata could be provided by providing an object as the second parameter to the &lt;code&gt;Notification&lt;/code&gt; constructor, as demonstrated below with &lt;code&gt;body&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Augury inside of Electron Apps</title>
      <link>https://thorsten-hans.com/using-augury-inside-of-electron-apps/</link>
      <pubDate>Sat, 02 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/using-augury-inside-of-electron-apps/</guid>
      <description>&lt;p&gt;Writing apps using &lt;em&gt;GitHub&amp;rsquo;s Electron&lt;/em&gt; is a reasonably easy task. The framework and community-driven tools are taking away much pain from you as a developer. Nevertheless, it is essential to have powerful debugging tools working in every environment. &lt;a href=&#34;https://augury.rangle.io/&#34;&gt;&lt;em&gt;Augury&lt;/em&gt;&lt;/a&gt; (created by &lt;em&gt;Rangle.IO&lt;/em&gt;) is currently the most powerful debugging tool for &lt;em&gt;Angular&lt;/em&gt; developers. It&amp;rsquo;s a &lt;em&gt;Chrome Extension&lt;/em&gt; that works perfectly inside of the Browser, in this post, you&amp;rsquo;ll learn how to use &lt;em&gt;Augury&lt;/em&gt; inside of your &lt;em&gt;Electron&lt;/em&gt; apps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie - Why can&#39;t I compile my Angular app anymore</title>
      <link>https://thorsten-hans.com/angular-quickie-why-cant-i-compile-my-angular-app-anymore/</link>
      <pubDate>Mon, 15 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-why-cant-i-compile-my-angular-app-anymore/</guid>
      <description>&lt;p&gt;Staying on top of the technology stack is sometimes really hard. The &lt;em&gt;Angular&lt;/em&gt; core team tries to do it&amp;rsquo;s best to keep breaking changes as seldom as possible. Because &lt;em&gt;Angular&lt;/em&gt; is still in beta, breaking changes may happen. I was facing some issues while catching up latest betas. If you&amp;rsquo;re also facing &lt;code&gt;TS2304&lt;/code&gt; while transpiling your app, this article may help.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;After pulling a remote branch from git this morning, I tried to start a simple &lt;em&gt;Angular&lt;/em&gt; project by invoking our &lt;em&gt;Gulp.JS&lt;/em&gt; tasks. However, suddenly the script crashed and printed tons of errors from the &lt;em&gt;TypeScript Compiler&lt;/em&gt; (short &lt;code&gt;tsc&lt;/code&gt;). After some short discussion, I decided to dig deeper into the issue and tried to fix the issue and understand why this has happened.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular and Electron - The definitive guide</title>
      <link>https://thorsten-hans.com/angular-and-electron-the-definitive-guide/</link>
      <pubDate>Sun, 14 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-and-electron-the-definitive-guide/</guid>
      <description>&lt;p&gt;Building cross-platform apps for desktop operating systems became simple compared to the past. With &lt;em&gt;GitHub&amp;rsquo;s Electron&lt;/em&gt; is a framework available that takes away the pain for abstracting all common platform APIs from us as web developers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Electron&lt;/em&gt; makes it easy to host &lt;em&gt;Single Page Applications&lt;/em&gt; (short &lt;em&gt;SPAs&lt;/em&gt;) within a native application container which is available for &lt;em&gt;macOS&lt;/em&gt;, &lt;em&gt;Linux&lt;/em&gt;, and &lt;em&gt;Windows&lt;/em&gt;. When looking at &lt;em&gt;Electron&amp;rsquo;s&lt;/em&gt; architecture, you will find two main counterparts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie - Async Routes</title>
      <link>https://thorsten-hans.com/angular-quickie-async-routes/</link>
      <pubDate>Tue, 09 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-async-routes/</guid>
      <description>&lt;p&gt;&lt;em&gt;Angular&lt;/em&gt; ships with its component router. The router makes it easy to compose complex applications from a bunch of components. Multiple routers could easily be nested to achieve almost every requirement for a &lt;em&gt;SPA&lt;/em&gt;. When using regular routes, all files from your &lt;em&gt;SPA&lt;/em&gt; are transferred to the client as soon as &lt;code&gt;RouteConfig&lt;/code&gt; is interpreted by the JavaScript engine of your browser.&lt;/p&gt;&#xA;&lt;p&gt;With growing apps, you may change this behavior. Clients should only download those files that are required for the current use case. Alternatively, you would initially transfer only those files required to make the core functionality of your app work. Optional components and templates should only be transferred if users request those components explicitly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NW.js and Electron compared</title>
      <link>https://thorsten-hans.com/nw-js-and-electron-compared/</link>
      <pubDate>Tue, 09 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/nw-js-and-electron-compared/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent much time doing cross-platform development over the past year with a significant workload on &lt;strong&gt;cross-platform desktop&lt;/strong&gt; development.&lt;/p&gt;&#xA;&lt;p&gt;During that time, I found some customers and blog readers asking me if they should go for &lt;strong&gt;NW.js&lt;/strong&gt; or if they should go direction &lt;strong&gt;Electron&lt;/strong&gt;. There is no quick answer to this question. It&amp;rsquo;s this kind of question that has to be answered with &lt;strong&gt;It depends&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve used both frameworks for real projects in the past, and both of them worked great for the given projects. Neither &lt;em&gt;Electron&lt;/em&gt; nor &lt;em&gt;NW.js&lt;/em&gt; is perfect (but they&amp;rsquo;re close to it) 😃. Each has its pitfalls. However, the communities behind those frameworks are fantastic and keep on answering quickly to questions popping up on GitHub or in tools like Gitter or Slack.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pug-up your Angular markup</title>
      <link>https://thorsten-hans.com/pug-up-your-angular-markup/</link>
      <pubDate>Fri, 05 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/pug-up-your-angular-markup/</guid>
      <description>&lt;p&gt;Can you imagine the combination of &lt;em&gt;Angular&lt;/em&gt; and Pug (previously known as Jade) is super awesome and timesaving? If not, read the following lines and reconsider!&lt;/p&gt;&#xA;&lt;p&gt;When building &lt;em&gt;SPAs&lt;/em&gt; using &lt;em&gt;Angular&lt;/em&gt; or &lt;em&gt;AngularJS&lt;/em&gt;, you use custom &lt;em&gt;HTML&lt;/em&gt; markup extensions (aka &lt;em&gt;directives&lt;/em&gt;) to instrument &lt;em&gt;Angular&lt;/em&gt; how to render your &lt;em&gt;SPA&lt;/em&gt; or how the different building blocks of your app should correspond to user interaction. Using those directives is smooth and well known in the &lt;em&gt;Angular&lt;/em&gt; Community.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Be more productive with Pug</title>
      <link>https://thorsten-hans.com/be-more-productive-with-pug/</link>
      <pubDate>Thu, 04 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/be-more-productive-with-pug/</guid>
      <description>&lt;p&gt;&lt;em&gt;Pug&lt;/em&gt; (previously known as &lt;em&gt;Jade&lt;/em&gt;) is like &lt;em&gt;HTML&lt;/em&gt; on steroids. Once learned, you&amp;rsquo;ll never miss it. This article isn&amp;rsquo;t my first post on &lt;em&gt;Pug&lt;/em&gt;. I had already written an article about it back in 2013 when it still was called &lt;em&gt;Jade&lt;/em&gt;. If you didn&amp;rsquo;t read it yet, take your time, &lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-jade/&#34;&gt;go and read through the Pug introduction&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This post covers only a few but powerful features &lt;em&gt;Pug&lt;/em&gt; is offering to make you a more productive frontend developer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie — ViewEncapsulation.Native in all browsers</title>
      <link>https://thorsten-hans.com/angular-quickie-viewencapsulation-native-in-all-browsers/</link>
      <pubDate>Wed, 03 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-viewencapsulation-native-in-all-browsers/</guid>
      <description>&lt;p&gt;A few days ago &lt;a href=&#34;https://thorsten-hans.com/angular-quickie-component-viewencapsulation-and-webcomponents/&#34;&gt;I wrote about &lt;em&gt;Angular ViewEncapsulation&lt;/em&gt;&lt;/a&gt;. The sample I&amp;rsquo;ve created for that post only works if you&amp;rsquo;re using &lt;em&gt;Google Chrome&lt;/em&gt;. In this article, I&amp;rsquo;ll explain why the sample only works in &lt;em&gt;Google Chrome&lt;/em&gt; and how you can take the example one step further to work and behave as expected in all modern browsers.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Angular&lt;/em&gt; is using &lt;code&gt;ViewEncapsulation.Emulated&lt;/code&gt; by default, to render components. &lt;code&gt;Emulated&lt;/code&gt; means you&amp;rsquo;re not using native &lt;code&gt;ShadowDOM&lt;/code&gt; features; instead &lt;em&gt;Angular&lt;/em&gt; does some refactoring to both, your template and your styles, to encapsulate those from the rest of your app and render everything as expected. (see the linked article above for more details).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing Angular Apps with Jasmine and TypeScript</title>
      <link>https://thorsten-hans.com/testing-angular-apps-with-jasmine-and-typescript/</link>
      <pubDate>Mon, 01 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/testing-angular-apps-with-jasmine-and-typescript/</guid>
      <description>&lt;p&gt;Unit-Testing &lt;em&gt;Angular&lt;/em&gt; applications made me crazy during Beta time. In this post, I&amp;rsquo;ll share how to set up unit testing for &lt;em&gt;Angular&lt;/em&gt; applications. The samples below were tested on &lt;em&gt;Angular 2&lt;/em&gt; &lt;em&gt;Beta 2&lt;/em&gt; and &lt;em&gt;Beta 3&lt;/em&gt;. There are many resources available on the web that explain how unit-testing should work in &lt;em&gt;Angular&lt;/em&gt; beta. Unfortunately, none of them worked for me from front to end. The official documentation is also lacking a fully working example with &lt;em&gt;SystemJS&lt;/em&gt; while I&amp;rsquo;m writing this article. Things may change over time, so you should check out the latest documentation on &lt;a href=&#34;https://angular.io&#34;&gt;https://angular.io&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Electron App-Icons for Windows from macOS</title>
      <link>https://thorsten-hans.com/setting-electron-app-icons-for-windows-from-macos/</link>
      <pubDate>Sat, 16 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/setting-electron-app-icons-for-windows-from-macos/</guid>
      <description>&lt;p&gt;When building cross-platform apps using &lt;em&gt;GitHub Electron&lt;/em&gt;, you may run into the same issue I did a few days ago. I wanted to build an &lt;em&gt;Electron&lt;/em&gt; app for &lt;em&gt;Windows&lt;/em&gt; and &lt;em&gt;macOS&lt;/em&gt; directly from my host-system (also &lt;em&gt;macOS&lt;/em&gt;). The build-process failed because setting the &lt;em&gt;Windows App&lt;/em&gt; Icon didn&amp;rsquo;t work for me when building it from the &lt;em&gt;Mac&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I was using &lt;code&gt;gulp-atom-electron&lt;/code&gt; to build the apps automatically. It has a dependency on &lt;code&gt;rcedit&lt;/code&gt; which is a small Windows executable that is responsible for updating either &lt;em&gt;Windows Assemblies or Windows Executables&lt;/em&gt; to make resource changes from outside. &lt;em&gt;GitHub&lt;/em&gt; itself has published a corresponding npm module which uses &lt;code&gt;wine&lt;/code&gt; to execute &lt;code&gt;wine rcedit app-name.exe --set-icon app-icon.ico&lt;/code&gt; if you&amp;rsquo;re executing the code on a &lt;em&gt;macOS&lt;/em&gt; or &lt;em&gt;Linux&lt;/em&gt; system.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie - Component ViewEncapsulation and WebComponents</title>
      <link>https://thorsten-hans.com/angular-quickie-component-viewencapsulation-and-webcomponents/</link>
      <pubDate>Fri, 08 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-component-viewencapsulation-and-webcomponents/</guid>
      <description>&lt;p&gt;&lt;em&gt;&amp;ldquo;Component&amp;rdquo;&lt;/em&gt; is perhaps the most overloaded term when it comes to &lt;em&gt;JavaScript&lt;/em&gt; frameworks these days. Every single framework has its definition of what precisely a component is, also &lt;em&gt;Angular&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Components are the building blocks of &lt;em&gt;Angular&lt;/em&gt; apps. By default, &lt;em&gt;Angular&lt;/em&gt; embeds components into the &lt;code&gt;DOM&lt;/code&gt;. When &lt;em&gt;Angular&lt;/em&gt; renders your component, the entire contents of your template (string or loaded from the given &lt;em&gt;URL&lt;/em&gt;) goes inbetween the component&amp;rsquo;s selector.&lt;/p&gt;&#xA;&lt;p&gt;There are two different ways how &lt;em&gt;Angular&lt;/em&gt; is injecting the view for a given component. &lt;code&gt;ViewEncapsulation&lt;/code&gt; is responsible for defining how Views are injected. If you create a component like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie - Local template variables</title>
      <link>https://thorsten-hans.com/angular-quickie-local-template-variables/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-local-template-variables/</guid>
      <description>&lt;p&gt;Local template variables in &lt;em&gt;Angular&lt;/em&gt; can be used to reference &lt;em&gt;HTML&lt;/em&gt; elements easily and use their properties either on sibling or child nodes.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s pretty easy to create and use those local template variables. Let&amp;rsquo;s say you have got an input file for dealing the first name of someone.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;your name please&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;required&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;maxlength&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;25&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can make the &lt;code&gt;HTMLInputField&lt;/code&gt; available to sibling or child nodes using the &lt;code&gt;#&lt;/code&gt; symbol.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;firstName&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;your name please&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next, let&amp;rsquo;s say we want to extend our small example to provide a char counter beside the element. Users will see how many characters are available until they hit the maximal length constraint. First, let&amp;rsquo;s add the corresponding &lt;code&gt;span&lt;/code&gt; which is responsible for displaying this information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie — Elvis is in tha house</title>
      <link>https://thorsten-hans.com/angular-quickie-elvis-operator/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-elvis-operator/</guid>
      <description>&lt;p&gt;Another &lt;em&gt;Angular quickie&lt;/em&gt; for today!😉 &lt;em&gt;Angular&lt;/em&gt; introduces the &lt;em&gt;Elvis&lt;/em&gt; operator &lt;strong&gt;?.&lt;/strong&gt; is used in templates.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;CoffeeScript&lt;/em&gt; Developers may know this as &amp;ldquo;Existential Operator&amp;rdquo; which can easily be used to check if a variable has a value.In combination with &lt;code&gt;*ngFor&lt;/code&gt; and &lt;code&gt;*ngIf&lt;/code&gt; this makes a good toolbelt for rapidly building UIs within *Angular *Apps.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/angular-quickie-elvis.gif&#34; alt=&#34;Elvis in tha Angular House&#34; title=&#34;Elvis in tha Angular House&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://angular.io/guide/template-syntax#template-expression-operators&#34;&gt;official Angular documentation&lt;/a&gt; gives you a few examples of how to use the &lt;em&gt;Elvis&lt;/em&gt; operator.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular Quickie — How to structure your projects</title>
      <link>https://thorsten-hans.com/angular-quickie-structure-your-apps/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-quickie-structure-your-apps/</guid>
      <description>&lt;p&gt;When building large &lt;em&gt;Angular&lt;/em&gt; Apps, you&amp;rsquo;ve to care about how to structure your project. I can imagine, &lt;a href=&#34;https://twitter.com/John_Papa&#34;&gt;John Papa&lt;/a&gt; will, of course, provide a new style guide soon 🙂 (no pressure here, we&amp;rsquo;ve our own for &lt;em&gt;Angular.JS&lt;/em&gt; and &lt;em&gt;Angular&lt;/em&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/angular-quickie-tweet-john-papa.png&#34; alt=&#34;Jogn Papa sneaks a new styleguide for Angular devs&#34; title=&#34;Jogn Papa sneaks a new styleguide for Angular devs&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;But already in those early days, you&amp;rsquo;ve to care about the project structure. Refactoring an entire project structure is hard 💩. So think about it, before you start coding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building an electron app using Angular Beta0 in TypeScript</title>
      <link>https://thorsten-hans.com/building-an-electron-app-using-angular-beta0-in-typescript/</link>
      <pubDate>Thu, 07 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/building-an-electron-app-using-angular-beta0-in-typescript/</guid>
      <description>&lt;p&gt;You can build Angular apps using plain old &lt;em&gt;JavaScript&lt;/em&gt; and &lt;em&gt;TypeScript&lt;/em&gt;. I&amp;rsquo;ve been using plain JavaScript for the past &lt;em&gt;Angular&lt;/em&gt; demonstrations, because I felt in love again with &lt;em&gt;JavaScript&lt;/em&gt; after spending years with &lt;em&gt;CoffeeScript&lt;/em&gt; (But that&amp;rsquo;s a different story). However, teams at Google and Microsoft were working together in these days to marriage &lt;em&gt;Angular&lt;/em&gt; and &lt;em&gt;TypeScript&lt;/em&gt;. If you don&amp;rsquo;t know &lt;em&gt;TypeScript&lt;/em&gt; yet, go and learn it. It will change the way how you write Frontend stuff in the upcoming years. You can think of it as todays *&lt;em&gt;JavaScript&lt;/em&gt; on steroids. It makes you more productive, it makes your code more robust, you&amp;rsquo;ve to write less plumbing because the &lt;em&gt;TypeScript Compiler (TSC)&lt;/em&gt; generates all the good parts of &lt;em&gt;JavaScript&lt;/em&gt; and knows about the edge-cases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Angular goes cross platform with GitHub Electron</title>
      <link>https://thorsten-hans.com/angular-goes-cross-platform-with-github-electron/</link>
      <pubDate>Mon, 16 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/angular-goes-cross-platform-with-github-electron/</guid>
      <description>&lt;p&gt;A while ago I&amp;rsquo;ve posted a &lt;a href=&#34;https://github.com/ThorstenHans/electron-angular-es6&#34;&gt;sample on how to write an electron app using Angular 1.x with ES2015 and JSPM&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Now having more than 100 stars on &lt;em&gt;GitHub&lt;/em&gt;, it seems to be quiet important for the community. That&amp;rsquo;s why I&amp;rsquo;ve decided to take this sample to another level.&lt;/p&gt;&#xA;&lt;p&gt;Angular2 is becoming more severe with each day. That&amp;rsquo;s why I&amp;rsquo;ve decided to publish another electron sample targeting Angular2. &lt;a href=&#34;https://github.com/ThorstenHans/electron-es2015-ng2&#34;&gt;Go and visit the repo right here on &lt;em&gt;GitHub&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 7 - Conditional Build Tasks</title>
      <link>https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/</link>
      <pubDate>Sat, 24 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the seventh and last part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;idea&#34;&gt;Idea&lt;/h2&gt;&#xA;&lt;p&gt;During the last post, we made our BaaS configurable so that you can align the build to work with different folder structures, filenames or module configurations. Now it&amp;rsquo;s time to take our build to another level. Many developers are using things like &lt;a href=&#34;http://lesscss.org/&#34;&gt;less&lt;/a&gt;, &lt;a href=&#34;http://sass-lang.com/&#34;&gt;Sass&lt;/a&gt; to build their stylesheets. Others use &lt;a href=&#34;http://coffeescript.org/&#34;&gt;CoffeeScript&lt;/a&gt;, &lt;a href=&#34;https://babeljs.io/&#34;&gt;BabelJS&lt;/a&gt; or &lt;a href=&#34;http://www.typescriptlang.org/&#34;&gt;TypeScript&lt;/a&gt; to build their JavaScript. Exactly those tasks are missing in our BaaS solution, so let&amp;rsquo;s add them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 6 - Configurable builds</title>
      <link>https://thorsten-hans.com/frontend-builds-6-configurable-builds/</link>
      <pubDate>Thu, 22 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-6-configurable-builds/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the sixth part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;idea&#34;&gt;Idea&lt;/h2&gt;&#xA;&lt;p&gt;BaaS is fine so far if you&amp;rsquo;re building your projects on the same structure I did for building &lt;a href=&#34;https://github.com/ThorstenHans/x-note&#34;&gt;x-note&lt;/a&gt;. However, right now, we&amp;rsquo;re using &lt;strong&gt;Build as a Service&lt;/strong&gt;, so it&amp;rsquo;s time to make everything configurable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 5 - Build as a Service (BaaS)</title>
      <link>https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/</link>
      <pubDate>Wed, 21 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the fifth part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-idea&#34;&gt;The idea&lt;/h2&gt;&#xA;&lt;p&gt;Most developers frequently create new projects, either for work or for just trying something new. This is also true for me. I found myself using yeoman to create new projects almost every day automatically. There are plenty of great generators available in the wild. Just visit the &lt;a href=&#34;http://yeoman.io&#34;&gt;yeoman website&lt;/a&gt; and discover the generator repository, it&amp;rsquo;s fantastic.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 4 - Building Cross Platform Mobile Apps</title>
      <link>https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/</link>
      <pubDate>Sat, 17 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the fourth part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-idea&#34;&gt;The Idea&lt;/h2&gt;&#xA;&lt;p&gt;During this post, I&amp;rsquo;ll explain how to bring x-note to various mobile platforms using &lt;a href=&#34;http://cordova.apache.org&#34;&gt;Apache Cordova&lt;/a&gt;. x-note has been built using Angular Material, so it can easily fit on any resolution no matter if customers are using a 27&amp;quot; Cinema Display or a 5&amp;quot; cellphone. We&amp;rsquo;ll extend our build process to build and run mobile apps automatically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 3 - Cross Platform Desktop Builds</title>
      <link>https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/</link>
      <pubDate>Thu, 15 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the third part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-idea&#34;&gt;The idea&lt;/h2&gt;&#xA;&lt;p&gt;Frontend Apps can quickly be built for a various range of platforms. You can use &lt;a href=&#34;http://cordova.apache.org&#34;&gt;Apache Crodova&lt;/a&gt; for building cross-platform mobile apps. For building cross-platform desktop apps, you can either use Electron or &lt;a href=&#34;http://nwjs.io&#34;&gt;NW.js&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 2 - readable and pluggable Gulp files</title>
      <link>https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/</link>
      <pubDate>Wed, 14 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the second part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;the-idea&#34;&gt;The idea&lt;/h2&gt;&#xA;&lt;p&gt;Within this post, I will explain the steps I used to move from the &lt;a href=&#34;https://github.com/ThorstenHans/x-note/blob/3969b13344ff5992786fc890893949265727c869/gulpfile.js&#34;&gt;initial gulpfile&lt;/a&gt; to a readable and more maintainable version. Before explaining the technical steps, let&amp;rsquo;s talk about the target. Over the past year I&amp;rsquo;ve seen so many different styles and approaches for writing and organizing Gulpfiles, but most of them share the same problem. Once you revisit the project and its gulpfile after a few weeks or months, you need much time for reading and understanding what gulp is doing in this particular project when executing &lt;code&gt;gulp default&lt;/code&gt; or just &lt;code&gt;gulp&lt;/code&gt;. To reduce this effort, I&amp;rsquo;ve outlined my idea of how to align tasks and how things should interact using a small mockup&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend Builds 1 - Getting started</title>
      <link>https://thorsten-hans.com/frontend-builds-1-getting-started/</link>
      <pubDate>Mon, 12 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-builds-1-getting-started/</guid>
      <description>&lt;h2 id=&#34;the-frontend-builds-article-series&#34;&gt;The Frontend Builds article series&lt;/h2&gt;&#xA;&lt;p&gt;Welcome to the very first part of this article series. If you didn&amp;rsquo;t read the other parts, check them out now.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-build-series-introduction/&#34;&gt;Introducing the Frontend Builds Article Series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/frontend-builds-1-getting-started/&#34;&gt;Frontend Builds 1: Getting Started &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-2-readable-and-pluggable-gulp-files/&#34;&gt;Frontend Builds 2: Readable and Pluggable Gulpfiles  &lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-3-cross-platform-desktop-builds/&#34;&gt;Frontend Builds 3: Cross-Platform Desktop Builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-4-building-cross-platform-mobile-apps/&#34;&gt;Frontend Builds 4: Building Cross-Platform Mobile Apps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-5-build-as-a-service-baas/&#34;&gt;Frontend Builds 5: Build as a Service (BaaS)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-6-configurable-builds/&#34;&gt;Frontend Builds 6: Configurable builds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/frontend-builds-7-conditional-build-tasks/&#34;&gt;Frontend Builds 7: Conditional Build Tasks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;idea&#34;&gt;Idea&lt;/h2&gt;&#xA;&lt;p&gt;As described during the introduction, here the link to the &lt;a href=&#34;https://github.com/ThorstenHans/x-note&#34;&gt;sample frontend application&lt;/a&gt;. x-note is a small note-taking application which I&amp;rsquo;ll use for this series of posts. I&amp;rsquo;ve build the app using &lt;a href=&#34;https://angularjs.org/&#34;&gt;AngularJS&lt;/a&gt; and &lt;a href=&#34;https://material.angularjs.org/latest/#/&#34;&gt;angular-material&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frontend build series introduction</title>
      <link>https://thorsten-hans.com/frontend-build-series-introduction/</link>
      <pubDate>Thu, 08 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/frontend-build-series-introduction/</guid>
      <description>&lt;p&gt;Here at &lt;em&gt;Thinktecture&lt;/em&gt;, we&amp;rsquo;re focusing on cross-platform apps, and we&amp;rsquo;re optimizing our development workflow continuously to push boundaries when it comes to development performance. I found myself again falling in love with creating fast and super awesome build processes. I want to use today&amp;rsquo;s lunchtime to write this short introduction post. So in the upcoming weeks, I&amp;rsquo;ll share some cool things around cross-platform builds. If you haven&amp;rsquo;t heard of &lt;em&gt;Gulp.js&lt;/em&gt;, it could be a bit difficult to follow the series because I will not publish an introduction for &lt;em&gt;Gulp.js&lt;/em&gt;. Do some research on &lt;em&gt;Gulp.js&lt;/em&gt; to understand the critical concepts of &lt;em&gt;Gulp.js&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chromebook review / Chrome App Model</title>
      <link>https://thorsten-hans.com/chromebook-review-chrome-app-model/</link>
      <pubDate>Fri, 14 Aug 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/chromebook-review-chrome-app-model/</guid>
      <description>&lt;p&gt;Today I received my &lt;strong&gt;Acer C720P Touch&lt;/strong&gt; Chromebook. I&amp;rsquo;ve used it now for around about two hours. It is a stunning device, double check the price on Amazon it&amp;rsquo;s about $280 (199€ in Germany) &lt;a href=&#34;http://www.amazon.com/Acer-Chromebook-11-6-Inch-Touchscreen-Moonstone/dp/B00H7WF22K/ref=sr_1_1?ie=UTF8&amp;amp;qid=1439573518&amp;amp;sr=8-1&amp;amp;keywords=acer+c720p&#34;&gt;Amazon Deeplink&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;some-technical-details&#34;&gt;Some technical details&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Intel Celeron Processor 2955U&lt;/li&gt;&#xA;&lt;li&gt;2 Gigs of RAM&lt;/li&gt;&#xA;&lt;li&gt;16 Gigs SSD&lt;/li&gt;&#xA;&lt;li&gt;11.6” Screen @ 1366×768 pixels&lt;/li&gt;&#xA;&lt;li&gt;TouchScreen&lt;/li&gt;&#xA;&lt;li&gt;Multi-Gesture TouchPad&lt;/li&gt;&#xA;&lt;li&gt;7.5 hrs Battery Lifetime&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;first-impressions&#34;&gt;First Impressions&lt;/h2&gt;&#xA;&lt;p&gt;As you can see in the picture below, the device looks pretty good, and you may recognize the glossy display. The keyboard is good for programming, but it&amp;rsquo;s a bit small for my hands.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On the move — Goodbye SharePoint</title>
      <link>https://thorsten-hans.com/on-the-move-goodbye-sharepoint/</link>
      <pubDate>Fri, 29 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/on-the-move-goodbye-sharepoint/</guid>
      <description>&lt;p&gt;&lt;strong&gt;After more than seven years of doing SharePoint Development I will leave the SharePoint Business by today and start a new journey.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Over the past years, I was involved in numerous SharePoint projects from a developer&amp;rsquo;s and a consultant&amp;rsquo;s perspective. It has been a blast.&lt;/p&gt;&#xA;&lt;p&gt;For those of you that know me in person, this is not so surprising. Over the years I&amp;rsquo;ve always tried to bring the latest and greatest technologies, frameworks and even other programming languages into SharePoint to have more fun during daily business.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automate everything — A journey from GitHub over Codeship to Docker on Azure</title>
      <link>https://thorsten-hans.com/automate-everything-a-journey-from-github-over-codeship-to-docker-on-azure/</link>
      <pubDate>Thu, 21 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/automate-everything-a-journey-from-github-over-codeship-to-docker-on-azure/</guid>
      <description>&lt;p&gt;Do you want to go from code to (pre)production in a few seconds? No problem. I&amp;rsquo;ve used the last night to get that working. I want to share the journey with you guys right here.&lt;/p&gt;&#xA;&lt;p&gt;There are several services involved, but the glue between those services are a set of good old shell scripts 🙂 So, unfortunately, no introduction for services like&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GitHub&lt;/li&gt;&#xA;&lt;li&gt;Codeship&lt;/li&gt;&#xA;&lt;li&gt;Microsoft Azure&lt;/li&gt;&#xA;&lt;li&gt;Docker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you don&amp;rsquo;t know those things go for google. There are tons of introductions for each of those.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up iTerm2 with OH-MY-ZSH and Powerline on OSX</title>
      <link>https://thorsten-hans.com/setting-up-iterm2-with-oh-my-zsh-and-powerline-on-osx/</link>
      <pubDate>Thu, 07 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/setting-up-iterm2-with-oh-my-zsh-and-powerline-on-osx/</guid>
      <description>&lt;p&gt;When people ask me why I&amp;rsquo;m using a Mac instead of a Windows device for doing all my stuff, I always end up with a single but significant reason: &lt;strong&gt;I have a real shell!&lt;/strong&gt; Most hardcore Windows fans are answering to this comment: &lt;em&gt;&amp;ldquo;Well there is PowerShell&amp;rdquo; or: &amp;ldquo;Hey we have Cygwin&amp;rdquo;&lt;/em&gt; but to be honest, those are no alternatives to a real shell 🙂&lt;/p&gt;&#xA;&lt;p&gt;A few people asked me over the time which configuration/theme and stuff I use within my terminal and because I&amp;rsquo;ve to set up a new device in these days (a stunning brand new 13&amp;quot; MBP Retina with ForceTouch)&lt;/p&gt;</description>
    </item>
    <item>
      <title>When Electron&#39;s window.setTitle keeps you driving crazy</title>
      <link>https://thorsten-hans.com/when-electrons-window-settitle-keeps-you-driving-crazy/</link>
      <pubDate>Wed, 06 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/when-electrons-window-settitle-keeps-you-driving-crazy/</guid>
      <description>&lt;p&gt;As a reaction on my initial post about Electron, &lt;a href=&#34;https://github.com/ingorichter&#34;&gt;Ingo Richter&lt;/a&gt; came up with a comment on setting the window&amp;rsquo;s title. He described that he get errors when trying to set the window title to the app&amp;rsquo;s name.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;browser-window&lt;/code&gt; is exposing the &lt;code&gt;setTitle&lt;/code&gt; function and &lt;code&gt;app&lt;/code&gt; is exposing the &lt;code&gt;getName&lt;/code&gt; function. So my first impression was “well, that should be easy to realize”, but there is on common pitfall that I realized when trying to set the title of the window – which I&amp;rsquo;d like to share with you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Packaging Electron apps as ASAR archive using Gulp.js</title>
      <link>https://thorsten-hans.com/packaging-electron-apps-as-asar-archive-using-gulp/</link>
      <pubDate>Tue, 05 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/packaging-electron-apps-as-asar-archive-using-gulp/</guid>
      <description>&lt;p&gt;A couple of weeks ago I open-sourced a sample on how to build an electron app using Angular and ES6. The sample has become popular on Github, so I sat down and updated the sample a bit. All changes are about distributing the electron app.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ThorstenHans/electron-angular-es6&#34;&gt;https://github.com/ThorstenHans/electron-angular-es6&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Instead of writing down all the bits, I&amp;rsquo;ve started Camtasia and recorded a short webcast.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll explain all the required steps from 0 to the final &lt;code&gt;app.asar&lt;/code&gt; package in these 11 minutes. Enjoy&lt;/p&gt;</description>
    </item>
    <item>
      <title>Writing an Electron app using Angular and ES6</title>
      <link>https://thorsten-hans.com/writing-an-electron-app-using-angular-and-es6/</link>
      <pubDate>Mon, 04 May 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/writing-an-electron-app-using-angular-and-es6/</guid>
      <description>&lt;p&gt;If you haven&amp;rsquo;t heard of &lt;em&gt;Electron&lt;/em&gt; (formerly known as &lt;em&gt;Atom Shell&lt;/em&gt;) you should check out it&amp;rsquo;s official website &lt;a href=&#34;https://github.com/atom/electron&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I will not provide an introduction for all the different tools and frameworks. It&amp;rsquo;s more a walkthrough that should give you some hints on how to get things up and to run with the following stack.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/atom/electron&#34;&gt;Electron&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://angularjs.org&#34;&gt;Angular.JS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;ES6 using &lt;a href=&#34;https://babeljs.io&#34;&gt;Babel&lt;/a&gt; as transpiler&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/systemjs/systemjs&#34;&gt;SystemJS&lt;/a&gt; as module-loader&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;&#xA;&lt;p&gt;First of all, you&amp;rsquo;ve to ensure that all dependencies are installed on your system and a simple folder structure has been created for the sample project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://thorsten-hans.com/about/</link>
      <pubDate>Fri, 03 Apr 2015 02:13:50 +0000</pubDate>
      <guid>https://thorsten-hans.com/about/</guid>
      <description>&lt;p&gt;Hello, my name is Thorsten, and I live in Saarland — the most beautiful state of Germany. I work as a Senior Developer Advocate at &lt;a href=&#34;https://akamai.com&#34;&gt;Akamai&lt;/a&gt;, where I help developers build high-performance, distributed systems for the edge.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/images/thorsten-hans-speaker.jpg&#34; width=&#34;300px&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;Hello 👋🏼&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;I&amp;rsquo;m a Docker Captain and a WebAssembly enthusiast who thrives on pushing the limits of WebAssembly and Edge Computing. These days I focus on cloud-native and serverless application architectures built with containers and WebAssembly — contributing to projects like &lt;a href=&#34;https://spinframework.dev&#34;&gt;Spin&lt;/a&gt; and &lt;a href=&#34;https://spinkube.dev&#34;&gt;SpinKube&lt;/a&gt;. Before that, I spent years deep in Kubernetes and Infrastructure as Code, especially Terraform.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing Node.js and io.js with NVM</title>
      <link>https://thorsten-hans.com/managing-node-js-and-io-js-with-nvm/</link>
      <pubDate>Mon, 23 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/managing-node-js-and-io-js-with-nvm/</guid>
      <description>&lt;p&gt;Are you building Node.js Apps? &lt;strong&gt;Use NVM&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;p&gt;If you haven’t seen &lt;em&gt;NVM&lt;/em&gt; (Node Version Manager) in action, go and install it now. I can’t imagine working with Node.js based projects without &lt;em&gt;NVM&lt;/em&gt;. I wrote this short post because I saw a friend of mine doing some first steps in Node.js without having NVM installed. So instead of explaining him the basics on a phone call, I wrote this summary, which I’d like to share with you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developer presentations using reveal.js</title>
      <link>https://thorsten-hans.com/developer-presentations-using-reveal-js/</link>
      <pubDate>Thu, 19 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/developer-presentations-using-reveal-js/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/hakimel/reveal.js/&#34;&gt;reveal.js&lt;/a&gt; has been around for a while. I saw many people using it for their presentations (for example &lt;a href=&#34;http://www.andrewconnell.com/blog&#34;&gt;AC&lt;/a&gt;). AC also wrote &lt;a href=&#34;http://www.andrewconnell.com/blog/using-github-for-developer-technical-presentations-post-mortem&#34;&gt;a great article&lt;/a&gt; on how he is organizing his presentations on GitHub using reveal.js.&lt;/p&gt;&#xA;&lt;p&gt;AC’s idea is cool, but I wanted something &lt;strong&gt;more&lt;/strong&gt; something which is less pain, I don’t want to set up a &lt;strong&gt;gh-pages&lt;/strong&gt; branch on every repo I create for my demos.&lt;/p&gt;&#xA;&lt;p&gt;Instead, I built a &lt;strong&gt;presentation hub&lt;/strong&gt; using reveal.js and some simple &lt;a href=&#34;http://gulpjs.com&#34;&gt;Gulp.js&lt;/a&gt; tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I ❤ CodeShip</title>
      <link>https://thorsten-hans.com/i-love-codeship/</link>
      <pubDate>Mon, 26 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/i-love-codeship/</guid>
      <description>&lt;p&gt;Within this post, I’d like to give you a short introduction for using &lt;a href=&#34;http://www.codeship.com&#34;&gt;CodeShip&lt;/a&gt; to automatically build, test and deploy your web projects.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/codeship-1.png&#34; alt=&#34;CodeShip&#34; title=&#34;CodeShip&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;CodeShip is a service which is free for a single concurrent build with 100 builds per month. So there is no cost for giving it a try, if you’re interested in bigger plans with more concurrent builds or if you (and your team) are more frequently pushing commits to either &lt;strong&gt;GitHub&lt;/strong&gt; or &lt;strong&gt;BitBucket&lt;/strong&gt; you can choose one of the available paid plans from &lt;a href=&#34;https://codeship.com/pricing&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASP.NET vNext on OSX Yosemite — Get KVM up and running</title>
      <link>https://thorsten-hans.com/asp-net-vnext-on-osx-yosemite-get-kvm-up-and-running/</link>
      <pubDate>Thu, 13 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/asp-net-vnext-on-osx-yosemite-get-kvm-up-and-running/</guid>
      <description>&lt;p&gt;I use .NET for building WebAPI&amp;rsquo;s because all other stuff is mostly done using AngularJS and Node.js in these days. However, since the incredible change that Microsoft is living these days, I can finally get rid of my virtual development machine 🙂&lt;/p&gt;&#xA;&lt;p&gt;To get ASP.NET vNext up and running on your Mac, you&amp;rsquo;ve of course to use Mono. In the case you&amp;rsquo;ve already installed Xamarin on your system, you may run into the issue that your Mono version is outdated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing an WebAPI using ADAL.JS and Azure AD within AngularJS</title>
      <link>https://thorsten-hans.com/accessing-an-webapi-using-adal-js-and-azure-ad-within-angularjs/</link>
      <pubDate>Wed, 12 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/accessing-an-webapi-using-adal-js-and-azure-ad-within-angularjs/</guid>
      <description>&lt;p&gt;Building a secured WebAPI using &lt;em&gt;Azure Active Directory (AAD)&lt;/em&gt; is pretty easy, OWIN middleware allows developers to integrate AuthN in their services quickly.&lt;/p&gt;&#xA;&lt;p&gt;Accessing those API with plain old C# is easy because &lt;em&gt;AAD Authentication Library (ADAL)&lt;/em&gt; for .NET is available for quite a long time (at least what we call a long time in our business :D)&lt;/p&gt;&#xA;&lt;p&gt;During TechEd Europe, Microsoft announced and released the developer preview for &lt;em&gt;ADAL.js&lt;/em&gt;  — a lightweight JavaScript library for integrating AAD authentication into your &lt;em&gt;Single Page Application (SPA)&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>O365 API — The ultimative list of resources for devs</title>
      <link>https://thorsten-hans.com/o365-api-the-ultimative-list-of-resources-for-devs/</link>
      <pubDate>Fri, 31 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/o365-api-the-ultimative-list-of-resources-for-devs/</guid>
      <description>&lt;p&gt;Finding information targeting the latest Office 365 API builds can be a hard job, that’s why Chaks  -  he&amp;rsquo;s one of the Program Managers at Microsoft who’s currently working on the O365 API Tools  —  has summarized an impressive list with all critical resources.&lt;/p&gt;&#xA;&lt;p&gt;If you’re new to Office365 development and don’t know where to get started, I advise you to read at least this post &lt;a href=&#34;http://chakkaradeep.com/index.php/the-ultimate-link-roll-for-getting-started-with-office-365-apis&#34;&gt;http://chakkaradeep.com/index.php/the-ultimate-link-roll-for-getting-started-with-office-365-apis&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On top of that, he’s frequently blogging great articles on O365 and sharing examples on those APIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Office 365 API Tools — GA Release changes</title>
      <link>https://thorsten-hans.com/office-365-api-tools-ga-release-changes/</link>
      <pubDate>Wed, 29 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/office-365-api-tools-ga-release-changes/</guid>
      <description>&lt;p&gt;Yesterday I only posted a short post about the most recent release of Office 365 API Tools.&lt;/p&gt;&#xA;&lt;p&gt;I had the chance to get some hands-on since yesterday and the most important thing you’ll see when using the GA Release maybe, that there is no longer a &lt;code&gt;CalendarApiSample&lt;/code&gt;, &lt;code&gt;MailApiSample&lt;/code&gt; or similar sample class for accessing resources from Office 365.&lt;/p&gt;&#xA;&lt;p&gt;There are some reasons why those samples are gone, but for developers starting with Office 365, it’s a little bit harder right now to get started.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Office 365 API Tools Update</title>
      <link>https://thorsten-hans.com/office-365-api-tools-update/</link>
      <pubDate>Tue, 28 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/office-365-api-tools-update/</guid>
      <description>&lt;p&gt;The Office 365 API Team released a new version of &lt;strong&gt;Office 365 API Tools&lt;/strong&gt; today. The new release can be downloaded directly from Visual Studio Gallery right &lt;a href=&#34;https://visualstudiogallery.msdn.microsoft.com/7e947621-ef93-4de7-93d3-d796c43ba34f&#34;&gt;here&lt;/a&gt; or by using &lt;em&gt;Visual Studio’s Extension Manager&lt;/em&gt; Window.&lt;/p&gt;&#xA;&lt;p&gt;With this version, the Tools are official out of preview.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee 0.1.3</title>
      <link>https://thorsten-hans.com/sharecoffee-0-1-3/</link>
      <pubDate>Fri, 03 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-0-1-3/</guid>
      <description>&lt;p&gt;ShareCoffee &lt;code&gt;0.1.3&lt;/code&gt; is available by now on NuGet and bower. It&amp;rsquo;s only a small release at this time. Previously I&amp;rsquo;ve added &lt;code&gt;ShareCoffee.Commons.infect()&lt;/code&gt; to ShareCoffee as described &lt;a href=&#34;https://thorsten-hans.com/sharecoffee-0-1-2/&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;With &lt;code&gt;0.1.3&lt;/code&gt; this method got an optional parameter which is very useful for SharePoint Hosted Apps. If you built a SharePoint Hosted App using a plain HTML or ASPX Page, you&amp;rsquo;ve also to maintain all &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;form&lt;/code&gt; tags and ensure that SPHostUrl is part of the QueryString.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee 0.1.2</title>
      <link>https://thorsten-hans.com/sharecoffee-0-1-2/</link>
      <pubDate>Sat, 27 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-0-1-2/</guid>
      <description>&lt;p&gt;A while ago I wrote about &lt;a href=&#34;https://thorsten-hans.com/from-the-field-ensure-sharepoint-context-for-all-kinds-of-redirects-in-mvc/&#34;&gt;SharePoint Apps in ASP.NET MVC&lt;/a&gt; and how to get them working.&lt;/p&gt;&#xA;&lt;p&gt;With ShareCoffee &lt;code&gt;0.1.2&lt;/code&gt;  —  which is already available on NuGet and bower  —  you can now ensure that &lt;code&gt;SPHostUrl&lt;/code&gt; is appended to all links in your Apps without making changes to &lt;code&gt;spcontext.js&lt;/code&gt; which is provided by Microsoft.&lt;/p&gt;&#xA;&lt;p&gt;You can now remove the OOB bundle config and references to &lt;code&gt;spcontext.js&lt;/code&gt; from your Apps and use a single function to extend all links and forms by directly calling&lt;/p&gt;</description>
    </item>
    <item>
      <title>grunt-nuget - Create NuGet packages on macOS and Linux</title>
      <link>https://thorsten-hans.com/grunt-nuget-packaging-for-mac-and-linux/</link>
      <pubDate>Wed, 24 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/grunt-nuget-packaging-for-mac-and-linux/</guid>
      <description>&lt;p&gt;While building &lt;em&gt;ShareCoffee&lt;/em&gt;, I recognized that building NuGet packages doesn’t work on macOS or Linux. Today I’d the chance to look again into this issue.&lt;/p&gt;&#xA;&lt;p&gt;I’ve used &lt;a href=&#34;https://github.com/spatools/grunt-nuget&#34;&gt;grunt-nuget&lt;/a&gt; for building the NuGet packages for ShareCoffee from within my &lt;a href=&#34;http://www.gruntjs.com&#34;&gt;GruntJS&lt;/a&gt; tasks.&lt;/p&gt;&#xA;&lt;p&gt;Responsible for the fact that I wasn’t able to create the NuGet packages on MacOS or Linux was the &lt;code&gt;.nuspec&lt;/code&gt; file. To build NuGet packages on other operating systems than Windows systems, you’ve to use Unix paths instead of Windows paths.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use &#39;bower install&#39; on Heroku</title>
      <link>https://thorsten-hans.com/use-bower-install-on-heroku/</link>
      <pubDate>Wed, 24 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/use-bower-install-on-heroku/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://bower.io&#34;&gt;bower.io&lt;/a&gt; is a fantastic tool for managing client-side dependencies. When you’re deploying a Node.js app to &lt;a href=&#34;http://www.heroku.com&#34;&gt;Heroku&lt;/a&gt;, you’ve to add &lt;code&gt;script&lt;/code&gt; to your &lt;code&gt;package.json&lt;/code&gt; file instead to get bower running right after installing your app using git.&lt;/p&gt;&#xA;&lt;p&gt;First, you’ve to ensure that bower is part of your dependencies. Either double-check the &lt;code&gt;dependencies&lt;/code&gt; object within your &lt;code&gt;package.json&lt;/code&gt; or execute&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install bower --save&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Somewhere in your &lt;code&gt;package.json&lt;/code&gt; you’ll find another object called &lt;code&gt;scripts&lt;/code&gt; add a dedicated script for &lt;code&gt;postinstall&lt;/code&gt; like shown in the following snippet:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slides and Samples from CodeCamp NYC</title>
      <link>https://thorsten-hans.com/slides-and-samples-from-codecamp-nyc/</link>
      <pubDate>Tue, 16 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/slides-and-samples-from-codecamp-nyc/</guid>
      <description>&lt;p&gt;On Saturday I spoke at CodeCamp in New York. It has been the third CodeCamp NYC in a row for me. I like the community event in New York because I’m able to combine both, holding a session and visiting one of the greatest cities in the states.&lt;/p&gt;&#xA;&lt;p&gt;Finally, I got a talk which wasn&amp;rsquo;t related to SharePoint 🙂 “ASP.NET MVC ❤ AngularJS.”&lt;/p&gt;&#xA;&lt;p&gt;Most of the tips and hints I gave during this talk came from real-world customer projects which were built using that technology stack with only a few SharePoint integration points 🙂 So I could focus on the Angular and MVC WebAPI stuff.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee eBook</title>
      <link>https://thorsten-hans.com/sharecoffee-ebook/</link>
      <pubDate>Fri, 29 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-ebook/</guid>
      <description>&lt;p&gt;About a week ago I finally published my first eBook on &lt;a href=&#34;http://www.leanpub.com&#34;&gt;LeanPub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The book covers all the different ShareCoffee features and describes how to use them within SharePoint App projects. On about 100 pages all the different capabilities are explained and demonstrated using small code-snippets.&lt;/p&gt;&#xA;&lt;p&gt;There is also a short SharePoint App introduction included if you’re not familiar with the SharePoint App platform. Leanpub is offering a flexible pricing model. So usually the minimal price for my eBook is $9.99 but based on a two-week poll the suggested price has been locked at $10.99 (but it’s entirely up to you how much you spend).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee with JsonLight support</title>
      <link>https://thorsten-hans.com/sharecoffee-with-jsonlight-support/</link>
      <pubDate>Mon, 25 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-with-jsonlight-support/</guid>
      <description>&lt;p&gt;A few minutes ago, I published the version 0.1.1 of ShareCoffee.&lt;/p&gt;&#xA;&lt;p&gt;It’s available on &lt;em&gt;NuGet&lt;/em&gt; and &lt;em&gt;bower.io&lt;/em&gt; for downloading and upgrading if you’re already using it. New in the current release is &lt;em&gt;JsonLight&lt;/em&gt; support for Office365. If you’re running on demand, your tenant can produce different results when calling SharePoint’s REST services.&lt;/p&gt;&#xA;&lt;p&gt;On August 13th, Microsoft announced the availability of JSON Light responses for Office 365 on its &lt;a href=&#34;http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/&#34;&gt;Office blog right here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From the field: Ensure SharePoint Context for all kinds of redirects in MVC</title>
      <link>https://thorsten-hans.com/from-the-field-ensure-sharepoint-context-for-all-kinds-of-redirects-in-mvc/</link>
      <pubDate>Sun, 01 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/from-the-field-ensure-sharepoint-context-for-all-kinds-of-redirects-in-mvc/</guid>
      <description>&lt;p&gt;During the last months, I was responsible for building a huge &lt;em&gt;Provider-Hosted SharePoint App&lt;/em&gt;. During this journey, I’ve used the latest version of ASP.NET MVC and Entity Framework to build a beautiful, scalable and clean Web Application to fit customer’s requirements.&lt;/p&gt;&#xA;&lt;p&gt;When building SharePoint Apps using Visual Studio, a NuGet Package is installed which is also responsible for including &lt;code&gt;spcontext.js&lt;/code&gt; into your Web-App’s script folder.&lt;/p&gt;&#xA;&lt;p&gt;This small part of JavaScript is critical. It’s responsible for concatenating SharePoint’s HostUrl QueryString Parameter to each link tag sitting in your Web-App. By concatenating this QueryString parameter, we can create a &lt;code&gt;SharePointContext&lt;/code&gt; from within the Controller sitting behind the route that catches the target of the Hyperlink.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Implementing CRUD with Office365 APIs</title>
      <link>https://thorsten-hans.com/implementing-crud-with-office365-apis/</link>
      <pubDate>Sun, 01 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/implementing-crud-with-office365-apis/</guid>
      <description>&lt;p&gt;Office365 API&amp;rsquo;s current preview version can generate some sample code for you. However, the sample only contains code for reading data. People from the community asked me how they can write entities back to Office365, and that&amp;rsquo;s why I want to share the following sample, which explains to you how to implement all CRUD methods using Office365 API.&lt;/p&gt;&#xA;&lt;p&gt;I hope this post makes clear, that Office365 is supporting the full CRUD stack, no matter which kind of entity (Contacts, Calendar Events, Users, Groups, Mails, Files) you&amp;rsquo;re interested in!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Our SharePoint Power Hour from TechEd North America</title>
      <link>https://thorsten-hans.com/our-sharepoint-power-hour-from-teched-north-america/</link>
      <pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/our-sharepoint-power-hour-from-teched-north-america/</guid>
      <description>&lt;p&gt;Last week I was attending Microsoft’s TechEd North America in Houston Texas. Together with Jeremy Thake who has recently moved over to Redmond to work with the &lt;em&gt;Microsoft Office Division (MOD)&lt;/em&gt; at Microsoft Corp, we’ve delivered the SharePoint Power Hour. Some of you guys may already know this Session Topic from Build conference.&lt;/p&gt;&#xA;&lt;p&gt;However, compared Rob Howard’s version from Build 2014, Jeremy and I decided to go for the most recent release of Office 365 API’s which have been shipped last Monday during TechEd Keynote.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proper Paging Implementation for Office365 APIs</title>
      <link>https://thorsten-hans.com/proper-paging-implementation-for-office365-apis/</link>
      <pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/proper-paging-implementation-for-office365-apis/</guid>
      <description>&lt;p&gt;I’m currently working on another (fancier) sample for using Office365 APIs from Web Applications. During today&amp;rsquo;s night session I tried to implement the entire Service and Repository for my sample. I started with the current sample API implementation from Office 365 API Tools I made a lot of changes to this to provide even more features and to be more efficient as the current static class sample.&lt;/p&gt;&#xA;&lt;p&gt;During this post, I’d like to show only the &lt;code&gt;GetContacts&lt;/code&gt; method which has been refactored a little bit to provide real paging support for my contacts sitting in Exchange Online.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building an Office365 development machine using Microsoft Azure VirtualMachines in no time</title>
      <link>https://thorsten-hans.com/building-office365-development-machine-using-azure-virtualmachines/</link>
      <pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/building-office365-development-machine-using-azure-virtualmachines/</guid>
      <description>&lt;p&gt;Today Microsoft announced the availability of client machines in Microsoft Azure. It turns out to be an excellent deal for Office365 Developers too. By just creating a new Machine (let’s take a Windows 8.1 including Visual Studio 2013 Update 2 for example) you can quickly spin off an Office365 development machine in no time.&lt;/p&gt;&#xA;&lt;p&gt;When logged in to the Azure Portal, you’ve to navigate to &lt;strong&gt;Virtual Machines&lt;/strong&gt; and select &lt;strong&gt;New&lt;/strong&gt; and pick an Image from the &lt;strong&gt;Gallery&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Office365 API&#39;s in MVC WebApps</title>
      <link>https://thorsten-hans.com/using-office365-apis-in-mvc-webapps/</link>
      <pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/using-office365-apis-in-mvc-webapps/</guid>
      <description>&lt;p&gt;Yesterday a new version of Office365 API Tools Preview had been shipped. Many things have changed with the latest release. I&amp;rsquo;ll not write all the new features and changes down manually, instead I&amp;rsquo;ll explain how to write an MVC WebApp which calls into Office365 and pulls out upcoming events from Exchange Online for the given user.&lt;/p&gt;&#xA;&lt;h2 id=&#34;before-youstart&#34;&gt;Before you start&lt;/h2&gt;&#xA;&lt;p&gt;Ensure that you&amp;rsquo;ve installed the latest Version of &lt;strong&gt;Office365 API Tools Preview&lt;/strong&gt; you can either download the bits from &lt;a href=&#34;http://dev.office.com&#34;&gt;dev.office.com&lt;/a&gt; or install/update it directly from within Visual Studio 2013 using the &lt;strong&gt;Extensions and Updates&lt;/strong&gt; window.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create a lightweight REST service using Sinatra</title>
      <link>https://thorsten-hans.com/create-a-lightweight-rest-service-using-sinatra/</link>
      <pubDate>Mon, 28 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/create-a-lightweight-rest-service-using-sinatra/</guid>
      <description>&lt;p&gt;Exposing data using a REST service is an easy task which can be achieved using almost any programming language. In the past, I&amp;rsquo;ve used ASP.NET MVC WebApi to achieve this.&lt;/p&gt;&#xA;&lt;p&gt;However, as soon as you&amp;rsquo;ve to run your service on different platforms, CLR isn&amp;rsquo;t the best option. Programming languages like Ruby and Python or Node.js are stronger when it comes to cross-platform support.&lt;/p&gt;&#xA;&lt;p&gt;I love the Ruby syntax, and that&amp;rsquo;s why I&amp;rsquo;ll show how to build a small REST Service exposing tasks using Ruby&amp;rsquo;s Sinatra framework. Sinatra doesn&amp;rsquo;t require a fix or predefined project structure. I want to organize all the artifacts a little bit. That&amp;rsquo;s why I&amp;rsquo;ve chosen the following structure&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easy switching between yammer accounts</title>
      <link>https://thorsten-hans.com/easy-switching-between-yammer-accounts/</link>
      <pubDate>Tue, 22 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/easy-switching-between-yammer-accounts/</guid>
      <description>&lt;p&gt;Yammer is organized within different networks, which is excellent as long as you’re invited with a single mail address. As soon as you accept an invitation for a second email address you’ve to explicitly log out with the first mail address and re-login with the second one.&lt;/p&gt;&#xA;&lt;p&gt;Yammer is currently not offering a mechanism to merge or link two accounts.&lt;/p&gt;&#xA;&lt;p&gt;Most Yammer users are using different browsers to deal with this problem. However, that wasn’t a solution for me. I’ve configured Chrome to fit my needs, provide all my bookmarks in a single place and I won&amp;rsquo;t lose this experience because of the missing ‘merge my accounts feature’ in Yammer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MVP Mentor Session: Building SharePoint Apps with JavaScript</title>
      <link>https://thorsten-hans.com/mvp-mentor-session-building-sharepoint-apps-with-javascript/</link>
      <pubDate>Tue, 22 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/mvp-mentor-session-building-sharepoint-apps-with-javascript/</guid>
      <description>&lt;p&gt;The Microsoft MVP Mentor Program is offering free learning resources for students presented or created by Microsoft MVPs. Yesterday I’d the chance to do a webinar on SharePoint App Development using JavaScript.&lt;/p&gt;&#xA;&lt;p&gt;The webinar was in German, but I’ve created the slides in English to provide a value for a broader audience. If you’re interested in a rough introduction into building SharePoint Apps check out my slide deck.&lt;/p&gt;&#xA;&lt;p&gt;I’m currently trying to manage the second run of this webinar in English. As soon as the recording of my session is available on Youtube, I’ll update this post and also embed the recording itself. As mentioned earlier, this is an introductory session which will explain to you the very basics of building Apps for SharePoint using client-side technologies and call into SharePoint’s APIs (CSOM and REST).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top 25 European SharePoint Influencers</title>
      <link>https://thorsten-hans.com/top-25-european-sharepoint-influencers/</link>
      <pubDate>Mon, 31 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/top-25-european-sharepoint-influencers/</guid>
      <description>&lt;p&gt;Harmon.ie is again looking for the Top 25 European SharePoint Influencers. Again as back in 2013 the winners are announced during European SharePoint Conferences (which takes place in May 2014 in Barcelona).&lt;/p&gt;&#xA;&lt;h2 id=&#34;contribute&#34;&gt;Contribute&lt;/h2&gt;&#xA;&lt;p&gt;So please invest two minutes and vote for me at &lt;a href=&#34;http://www.scratchmm.com/sharepoint-eu/community-vote/&#34;&gt;http://www.scratchmm.com/sharepoint-eu/community-vote/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Thank you, Community!&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dell Venue 8 Pro Review</title>
      <link>https://thorsten-hans.com/dell-venue-8-pro-review/</link>
      <pubDate>Wed, 26 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/dell-venue-8-pro-review/</guid>
      <description>&lt;p&gt;During SharePoint Conference 2014 in Las Vegas, I bought a Dell Venue 8 Pro because I was looking for a small device in addition to my Surface Pro and my 15” MacBook Pro.&lt;/p&gt;&#xA;&lt;h2 id=&#34;here-my-most-essential-requirements&#34;&gt;Here my most essential requirements&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Long battery lifetime&lt;/li&gt;&#xA;&lt;li&gt;Running Windows 8 Pro&lt;/li&gt;&#xA;&lt;li&gt;Having access to all my essential services like — Multiple Exchange Accounts&lt;/li&gt;&#xA;&lt;li&gt;OneDrive&lt;/li&gt;&#xA;&lt;li&gt;OneDrive for Business&lt;/li&gt;&#xA;&lt;li&gt;Windows Azure&lt;/li&gt;&#xA;&lt;li&gt;The device should be rechargeable easily&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;At this point, I’d like to say thank you to my good old friend Heino, who pointed me to Dell’s device and gave me the chance to play a little bit with his Venue 8 Pro during SPC14.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slides and Demos from my SPC14 talk on ShareCoffee</title>
      <link>https://thorsten-hans.com/slides-and-demos-from-my-spc14-talk-on-sharecoffee/</link>
      <pubDate>Wed, 19 Mar 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/slides-and-demos-from-my-spc14-talk-on-sharecoffee/</guid>
      <description>&lt;p&gt;As every year, SPC14 was a blast. It was amazing to connect with all the guys and girls from the SharePoint world. During this post, I’m not going to summarize the SPC, so this post is only providing the content from my talk (#SPC417). First and most important are the demos.&lt;/p&gt;&#xA;&lt;h2 id=&#34;demos&#34;&gt;Demos&lt;/h2&gt;&#xA;&lt;p&gt;All my demos are available for free on GitHub, so go and check out &lt;a href=&#34;https://github.com/ThorstenHans/SPC417&#34;&gt;https://github.com/ThorstenHans/SPC417&lt;/a&gt;, regarding ShareCoffee in common, you should check out the ShareCoffee landing page at &lt;a href=&#34;https://sharecoffee.github.io&#34;&gt;https://sharecoffee.github.io&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee 0.0.11</title>
      <link>https://thorsten-hans.com/sharecoffee-0-0-11/</link>
      <pubDate>Tue, 25 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-0-0-11/</guid>
      <description>&lt;p&gt;Over the last weeks, I’ve added some new features to ShareCoffee which are now available in the most recent release.&lt;/p&gt;&#xA;&lt;p&gt;As for all previous versions you can grab a copy using &lt;em&gt;NuGet&lt;/em&gt; or &lt;em&gt;Bower.IO&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;new-shorthand-for-sharecoffee&#34;&gt;New Shorthand for ShareCoffee&lt;/h2&gt;&#xA;&lt;p&gt;To save even more keystrokes when building Apps for SharePoint, you can access ShareCoffee now by using the $s shorthand.&lt;/p&gt;&#xA;&lt;h2 id=&#34;inject-custom-appweburl&#34;&gt;Inject custom AppWebUrl&lt;/h2&gt;&#xA;&lt;p&gt;Since the first release of ShareCoffee, you’re able to load AppWebUrl by providing a custom function. With the release of &lt;code&gt;0.0.11&lt;/code&gt;, you’re also able to load the &lt;code&gt;AppWebUrl&lt;/code&gt; by yourself and provide the actual string to ShareCoffee.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SharePoint.Jasmine — Test your JavaScript directly inside your App</title>
      <link>https://thorsten-hans.com/sharepoint-jasmine-test-your-javascript-directly-inside-your-app/</link>
      <pubDate>Tue, 25 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharepoint-jasmine-test-your-javascript-directly-inside-your-app/</guid>
      <description>&lt;p&gt;Today I’ve published SharePoint.Jasmine on &lt;a href=&#34;https://github.com/ThorstenHans/SharePoint.Jasmine&#34;&gt;GitHub&lt;/a&gt; and &lt;a href=&#34;https://www.nuget.org/packages/SharePoint.Jasmine/&#34;&gt;NuGet&lt;/a&gt; which allows you to test your JavaScript code directly inside of a SharePoint App. By installing SharePoint.Jasmine into your project using&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Install-Package SharePoint.Jasmine&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;All required artifacts for executing JavaScript UnitTests using &lt;a href=&#34;http://jasmine.github.io/&#34;&gt;Jasmine&lt;/a&gt; are automatically integrated into your App project. The updated App structure will look like the following&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/jasmine-1.png&#34; alt=&#34;SharePoint App structure&#34; title=&#34;SharePoint App structure&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most important is the actual test page located in &lt;code&gt;Pages/tests&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;index.aspx&lt;/code&gt; file is responsible for loading the Jasmine Test-Runner, the specs and all the JavaScript source files you’re interested in. By default, I’ve added the Jasmine-Sample folder which gives you a rough introduction in how to write JavaScript unit tests using Jasmine. When installing the App and navigating to the Test-Runner-Site, you’ll receive the test results embedded in the default SharePoint MasterPage.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The ShareCoffee logo</title>
      <link>https://thorsten-hans.com/the-sharecoffee-logo/</link>
      <pubDate>Sat, 22 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/the-sharecoffee-logo/</guid>
      <description>&lt;p&gt;I’m glad to present the new ShareCoffee logo.&lt;/p&gt;&#xA;&lt;p&gt;A big thank you to &lt;a href=&#34;http://www.oliverjungmann.com/&#34;&gt;Oliver Jungmann&lt;/a&gt; for creating the awesome logo. A big thank you to &lt;a href=&#34;http://stefanhuebsch.com&#34;&gt;Stefan Hübsch&lt;/a&gt; for providing his awesome new font &lt;a href=&#34;http://lichtspiele3d.com/&#34;&gt;Typocalypse Lichtspiele&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/sharecoffee.png&#34; alt=&#34;The all new ShareCoffee logo!&#34; title=&#34;The all new ShareCoffee logo!&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;For me as a developer, it’s always amazing to see people creating such logos in almost no time. Creativity is just awesome.&lt;/p&gt;&#xA;&lt;p&gt;For all the SharePoint Conference attendees out there, Hopefully, the ShareCoffee stickers are shipped before #SPC14. Come and visit my #SPC417 session and grab some of those cool stickers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee.UserProfiles is available</title>
      <link>https://thorsten-hans.com/sharecoffee-userprofiles-is-available/</link>
      <pubDate>Fri, 21 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-userprofiles-is-available/</guid>
      <description>&lt;p&gt;Today I’ve published the next AddOn for &lt;a href=&#34;https://github.com/ThorstenHans/ShareCoffee&#34;&gt;ShareCoffee&lt;/a&gt;. ShareCoffee.UserProfiles. It’s providing a dedicated wrapper for SharePoint’s UserProfiles API.&lt;/p&gt;&#xA;&lt;p&gt;By using the new AddOn, you can easily configure REST requests for dealing with SharePoint’s UserProfile REST API from both, SharePoint Hosted and Cloud-Hosted Apps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;p&gt;You can install the AddOn (which will automatically pull ShareCoffee as a dependency) by using.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;NuGet&lt;/li&gt;&#xA;&lt;li&gt;bower.io&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;coverage&#34;&gt;Coverage&lt;/h2&gt;&#xA;&lt;p&gt;Not all UserProfile methods are currently available as REST endpoint. Currently, SharePoint is offering the following methods which can, of course, be used with ShareCoffee&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Introduction to SASS</title>
      <link>https://thorsten-hans.com/an-introduction-to-sass/</link>
      <pubDate>Tue, 18 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/an-introduction-to-sass/</guid>
      <description>&lt;p&gt;Throughout this post, I&amp;rsquo;ll give you a rough introduction into &lt;a href=&#34;www.sass-lang.com&#34;&gt;SASS&lt;/a&gt; as part of my &lt;em&gt;branding SharePoint sites with yeoman&lt;/em&gt; series. See all other posts from this series here.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/yeoman-the-web-development-workflow/&#34;&gt;Yeoman the web development workflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-jade/&#34;&gt;An Introduction to Pug (aka Jade)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-coffeescript/&#34;&gt;An Introduction to CoffeeScript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-sass/&#34;&gt;An Introduction to SASS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;sass&#34;&gt;SASS&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;SASS&lt;/em&gt; (Syntactically Awesome StyleSheets) is a language which compiles into CSS and allows you to write your styles in a comfortable and use all the cool things which CSS is missing like variables, mixins or nested rules.&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Introduction to CoffeeScript</title>
      <link>https://thorsten-hans.com/an-introduction-to-coffeescript/</link>
      <pubDate>Fri, 14 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/an-introduction-to-coffeescript/</guid>
      <description>&lt;p&gt;A while ago I started a series about how to brand SharePoint sites using the Yeoman web development workflow. With this small introduction to CoffeeScript, I&amp;rsquo;d like to continue the series.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/yeoman-the-web-development-workflow/&#34;&gt;Yeoman the web development workflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-jade/&#34;&gt;An Introduction to Pug (aka Jade)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-coffeescript/&#34;&gt;An Introduction to CoffeeScript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-sass/&#34;&gt;An Introduction to SASS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;em&gt;CoffeeScript&lt;/em&gt; is a small language that compiles into &lt;em&gt;JavaScript&lt;/em&gt;. The initial release of &lt;em&gt;CoffeeScript&lt;/em&gt; was published back in 2009. Since then the language has become more and more popular. The &lt;em&gt;CoffeeScript&lt;/em&gt; source code is hosted on &lt;a href=&#34;https://github.com/jashkenas/coffee-script&#34;&gt;GitHub&lt;/a&gt;, and there is an excellent website (&lt;a href=&#34;http://coffeescript.org&#34;&gt;coffescript.org&lt;/a&gt;) which teaches you all the things you&amp;rsquo;ve to know about the language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCamp 2014 in Munich</title>
      <link>https://thorsten-hans.com/sharecamp-2014-in-munich/</link>
      <pubDate>Fri, 31 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecamp-2014-in-munich/</guid>
      <description>&lt;p&gt;In 2014 we will celebrate the 5th ShareCamp in Munich. (23rd — 25th of May 2014) Don’t panic; the registration isn’t opened yet. However, you should check out our new website at&lt;a href=&#34;http://www.born2share.com&#34;&gt; born2share.com&lt;/a&gt; and get the latest information about the event.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/sharecamp.png&#34; alt=&#34;ShareCamp - born2share.&#34; title=&#34;ShareCamp - born2share.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’m thrilled to say that we’ll again be able to host the ShareCamp for 200 attendees! Moreover, it’s all for free.&lt;/p&gt;&#xA;&lt;p&gt;An entire weekend full of SharePoint.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Write your own ShareCoffee AddOns using the yeoman generator</title>
      <link>https://thorsten-hans.com/write-your-own-sharecoffee-addons-using-the-yeoman-generator/</link>
      <pubDate>Fri, 31 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/write-your-own-sharecoffee-addons-using-the-yeoman-generator/</guid>
      <description>&lt;p&gt;Today I’ve published a new yeoman generator which allows you to create new &lt;em&gt;ShareCoffee&lt;/em&gt; Add-Ons easily. (&lt;a href=&#34;https://github.com/ThorstenHans/generator-sharecoffee-addon&#34;&gt;view on GitHub&lt;/a&gt;) If you haven’t heard of &lt;em&gt;Yeoman&lt;/em&gt;, you should check out its website at &lt;a href=&#34;http://yeoman.io&#34;&gt;yeoman.io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;By using such a yeoman generator, you can start building web-apps or –in this case– &lt;em&gt;ShareCoffee&lt;/em&gt; Add-Ons in no time.&lt;/p&gt;&#xA;&lt;p&gt;Moreover, the best advantage is: All these frameworks and tools are based on &lt;em&gt;Node.js&lt;/em&gt; and can be used from any platform running &lt;em&gt;Node.js&lt;/em&gt;. (Also a low budget Chromebook can run &lt;em&gt;Node.js&lt;/em&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>CoffeeScript vs TypeScript vs JavaScript — my thoughts</title>
      <link>https://thorsten-hans.com/coffeescript-vs-typescript-vs-javascript-my-thoughts/</link>
      <pubDate>Wed, 29 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/coffeescript-vs-typescript-vs-javascript-my-thoughts/</guid>
      <description>&lt;p&gt;Throughout this post, I’d like to share my thoughts on Coffee-, Type- and JavaScript, because many people from the community were asking me for which language they should go or why I’ve chosen CoffeeScript for writing my SharePoint framework ShareCoffee. First of all, I’ve been doing JavaScript for a long, long time. I’ve spent much time reading books on how to write JavaScript code and how to do it well. Here, for example, two (in my opinion essential) books for JavaScript Developers, independent from their skill.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Query FormDigestValue from SharePoint using ShareCoffee</title>
      <link>https://thorsten-hans.com/query-formdigestvalue-from-sharepoint-using-sharecoffee/</link>
      <pubDate>Tue, 28 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/query-formdigestvalue-from-sharepoint-using-sharecoffee/</guid>
      <description>&lt;p&gt;When running in a SharePoint-Hosted App, you can easily receive the &lt;code&gt;FormDigestValue&lt;/code&gt; by executing &lt;code&gt;ShareCoffee.Commons.getFormDigest()&lt;/code&gt; which is very easy.&lt;/p&gt;&#xA;&lt;p&gt;However, if you’re executing queries from a plain HTML page sitting in your SharePoint-Hosted App  - or in the case, you’re running in an Office Add-In -  you can ask for a &lt;code&gt;FormDigestValue&lt;/code&gt; using ShareCoffee’s REST interface. The following sample code shows how to receive the &lt;code&gt;FormDigestValue&lt;/code&gt; from within a plain HTML Page using AngularJS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee.Search is available</title>
      <link>https://thorsten-hans.com/sharecoffee-search-is-available/</link>
      <pubDate>Tue, 28 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-search-is-available/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m glad to announce the availability of &lt;code&gt;ShareCoffee.Search&lt;/code&gt; &lt;a href=&#34;https://github.com/ThorstenHans/ShareCoffee.Search&#34;&gt;GitHub&lt;/a&gt; &lt;code&gt;0.0.1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Today I&amp;rsquo;ve published the first Add-On for &lt;em&gt;ShareCoffee&lt;/em&gt;. By using &lt;code&gt;ShareCoffee.Search&lt;/code&gt; (which is also available on &lt;em&gt;NuGet&lt;/em&gt;, &lt;em&gt;bower.io&lt;/em&gt;, and &lt;em&gt;GitHub&lt;/em&gt;) you can now easily execute Search queries from any SharePoint App. &lt;em&gt;ShareCoffee.Search&lt;/em&gt; offers a fully configured &lt;code&gt;PropertyObjects&lt;/code&gt; to support you by writing any search query. Of course, can you use ShareCoffee to execute a &lt;code&gt;GET&lt;/code&gt; or &lt;code&gt;POST&lt;/code&gt; request against SharePoint&amp;rsquo;s Search API but then you&amp;rsquo;ve to remember all of the property names, which turned out to be very time-consuming. That&amp;rsquo;s why I decided to publish this Add-On.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using SharePoint 2013 Search REST API to execute PostQueries</title>
      <link>https://thorsten-hans.com/using-sharepoint-2013-search-rest-api-to-execute-postqueries/</link>
      <pubDate>Tue, 28 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/using-sharepoint-2013-search-rest-api-to-execute-postqueries/</guid>
      <description>&lt;p&gt;Because I’m currently writing my first Add-On for &lt;em&gt;ShareCoffee&lt;/em&gt; which is going to provide a fluent and easy way to consume SharePoint’s Search Services, I had to dig a little bit deeper into SharePoint Search REST API.&lt;/p&gt;&#xA;&lt;p&gt;Executing Search requests as a &lt;code&gt;GET&lt;/code&gt; request is straight forward, and there is nothing special about them. However, if you hit the URL length limitation of your browser you should consider executing the search query using SharePoint’s &lt;code&gt;PostQuery&lt;/code&gt; endpoint. (&lt;code&gt;/_api/search/postQuery&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>SPC417 Session Trailer</title>
      <link>https://thorsten-hans.com/spc417-session-trailer/</link>
      <pubDate>Sat, 25 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/spc417-session-trailer/</guid>
      <description>&lt;p&gt;Like all other SharePoint Conference Speakers, I&amp;rsquo;ve also published a short trailer to promote my &lt;em&gt;ShareCoffee&lt;/em&gt; session at SharePoint Conference 2014 in Las Vegas.&lt;/p&gt;&#xA;&lt;p&gt;Watch it on youtube, and I hope you&amp;rsquo;ll join my talk in Vegas 🤘🏼&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>What&#39;s new in ShareCoffee 0.0.8</title>
      <link>https://thorsten-hans.com/whats-new-in-sharecoffee-v0-0-8/</link>
      <pubDate>Thu, 16 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/whats-new-in-sharecoffee-v0-0-8/</guid>
      <description>&lt;p&gt;Today I’ve published &lt;em&gt;ShareCoffee&lt;/em&gt; &lt;code&gt;0.0.8&lt;/code&gt;. You can download the latest version from &lt;a href=&#34;https://github.com/ThorstenHans/ShareCoffee&#34;&gt;GitHub&lt;/a&gt; or directly include the library into your project by using &lt;em&gt;NuGet&lt;/em&gt; or &lt;em&gt;bower.io&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-new-in-thisrelease&#34;&gt;What’s new in this release&lt;/h2&gt;&#xA;&lt;p&gt;Version &lt;code&gt;0.0.8&lt;/code&gt; of ShareCoffee ships with some great new features. I’ve added full API documentation which is hosted directly on GitHub (see the &lt;code&gt;docs&lt;/code&gt; folder) or have a look at the &lt;code&gt;.coffee&lt;/code&gt; sources. I’ve also removed the classes &lt;code&gt;ShareCoffee.REST.angularProperties&lt;/code&gt;, &lt;code&gt;ShareCoffee.REST.jQueryProperties&lt;/code&gt; and  &lt;code&gt;ShareCoffee.REST.reqwestProperties&lt;/code&gt;. Instead, a unified, new class called &lt;code&gt;ShareCoffee.REST.RequestProperties&lt;/code&gt; was added.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualise your data with ShareCoffee and ChartJS</title>
      <link>https://thorsten-hans.com/visualise-your-data-with-sharecoffee-and-chartjs/</link>
      <pubDate>Fri, 20 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/visualise-your-data-with-sharecoffee-and-chartjs/</guid>
      <description>&lt;p&gt;Visualizing data in SharePoint Apps is easy if you combine &lt;a href=&#34;https://github.com/ThorstenHans/ShareCoffee&#34;&gt;ShareCoffee&lt;/a&gt; and &lt;a href=&#34;http://www.chartjs.org/&#34;&gt;ChartJS.org&lt;/a&gt;. ChartJS.org is a small JavaScript library which is responsible for rendering HTML5 charts in websites.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-sampleapp&#34;&gt;Creating a sample App&lt;/h2&gt;&#xA;&lt;p&gt;For this post, I&amp;rsquo;ve prepared a small SharePoint list containing EnergyDrinks and their amount of caffeine. 🙂 To read the data from SharePoint, you need to include and reference ShareCoffee. Using Visual Studio&amp;rsquo;s Package Manager Console you can install ShareCoffee using &lt;strong&gt;Install-Package ShareCoffee&lt;/strong&gt; Including ChartJS.org is also really easy, grab the &lt;em&gt;Chart.js&lt;/em&gt; file from &lt;a href=&#34;https://github.com/davidaparicio/chartjs&#34;&gt;GitHub&lt;/a&gt; or the project site &lt;a href=&#34;http://www.chartjs.org/&#34;&gt;chartjs.org&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Loading the App ChromeControl with ShareCoffee</title>
      <link>https://thorsten-hans.com/loading-the-app-chromecontrol-with-sharecoffee/</link>
      <pubDate>Fri, 13 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/loading-the-app-chromecontrol-with-sharecoffee/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/ThorstenHans/ShareCoffee&#34;&gt;ShareCoffee&lt;/a&gt; assists you as a SharePoint App Developer in various situations. Of course is the most significant benefit the unified REST layer across all different kinds of SharePoint Apps and query targets (AppWeb / HostWeb).&lt;/p&gt;&#xA;&lt;p&gt;But there are some other nice features backed into ShareCoffee. Within this post I&amp;rsquo;ll explain how to load SharePoint&amp;rsquo;s &lt;code&gt;ChromeControl&lt;/code&gt; and CSS within Cloud-Hosted-Apps. First, it&amp;rsquo;s important to mention that ShareCoffee does not require any other JavaScript library. It&amp;rsquo;s no problem if you&amp;rsquo;re using jQuery or similar libraries, but you don&amp;rsquo;t have to. Instead of following the MSDN and writing about &lt;strong&gt;40 lines of JavaScript&lt;/strong&gt; code to get the ChromeControl into your app, &lt;strong&gt;ShareCoffee exposes a single function&lt;/strong&gt; which has to be called to achieve the goal. First, you&amp;rsquo;ve to install ShareCoffee within your App. ShareCoffee can be installed in various ways.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speaking at SharePoint Conference 2014 in Vegas</title>
      <link>https://thorsten-hans.com/speaking-at-sharepoint-conference-2014-in-vegas/</link>
      <pubDate>Thu, 05 Dec 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/speaking-at-sharepoint-conference-2014-in-vegas/</guid>
      <description>&lt;p&gt;The biggest and best conference about SharePoint, Microsoft&amp;rsquo;s SharePoint Conference takes again place in Las Vegas from 3rd till 6th of March 2014. I&amp;rsquo;m glad to announce that Experts Inside delivers two sessions next year in Vegas.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/vegas-1.png&#34; alt=&#34;SharePoint Conference 2014 in Las Vegas&#34; title=&#34;SharePoint Conference 2014 in Las Vegas&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;To see the entire list of session check out the #SPC14 website at &lt;a href=&#34;http://www.sharepointconference.com/content/sessions&#34;&gt;http://www.sharepointconference.com/content/sessions&lt;/a&gt; Within an in-depth dive developer session I&amp;rsquo;ll explain how to speed up your App Development for SharePoint using API abstractions. In detail, I&amp;rsquo;ll show the benefits of my Open-Source-Framework ShareCoffee and how you can take the best benefits from using such frameworks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating an ExcelServices JavaScript UDF — A working Sample</title>
      <link>https://thorsten-hans.com/creating-excelservices-javascript-udf/</link>
      <pubDate>Mon, 11 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/creating-excelservices-javascript-udf/</guid>
      <description>&lt;p&gt;&lt;em&gt;Excel Services&lt;/em&gt; in SharePoint 2013 is offering some new functionalities. One of these is a JavaScript User Defined Actions (&lt;strong&gt;UDFs&lt;/strong&gt;). There is currently one a little documentation on MSDN covering this topic. The given MSDN sample contains a small example which didn&amp;rsquo;t work at all. Because a customer would like to see the new features Excel Services are offering in 2013 (including Office 365). I had the choice to discover this feature by myself 🙂.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCoffee is available</title>
      <link>https://thorsten-hans.com/sharecoffee-is-available/</link>
      <pubDate>Tue, 29 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecoffee-is-available/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve published ShareCoffee today &lt;a href=&#34;http://github.com/ThorstenHans/ShareCoffee&#34;&gt;on GitHub&lt;/a&gt;. ShareCoffee is a small library containing cool stuff for SharePoint App developers. ShareCoffee is entirely written in CoffeeScript using the test-driven-design approach with (Mocha, ChaiJS, and SinonJS). Since the SharePoint App model is available, I thought about writing this library, but within the last four days I sat down and created it! 🙂&lt;/p&gt;&#xA;&lt;p&gt;ShareCoffee is offering all the stuff I was faced with since I started App development for SharePoint. The goal was for me to create a library which provides a single programming interface for any SharePoint App. What is ShareCoffee offering ShareCoffee is offering various functionality which I&amp;rsquo;ve grouped into the following &lt;code&gt;namespaces&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>An Introduction to Pug (aka Jade)</title>
      <link>https://thorsten-hans.com/an-introduction-to-jade/</link>
      <pubDate>Tue, 22 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/an-introduction-to-jade/</guid>
      <description>&lt;p&gt;&amp;lsquo;An Introduction to &lt;strong&gt;Pug&lt;/strong&gt;&amp;rsquo; is part of my article series &amp;lsquo;Branding SharePoint sites with &lt;strong&gt;yeoman&lt;/strong&gt;&amp;rsquo; see the list of all related articles here.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/yeoman-the-web-development-workflow/&#34;&gt;Yeoman the web development workflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-jade/&#34;&gt;An Introduction to Pug (aka Jade)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-coffeescript/&#34;&gt;An Introduction to CoffeeScript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-sass/&#34;&gt;An Introduction to SASS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;why-pug-aka-jade&#34;&gt;Why Pug (aka Jade)?&lt;/h2&gt;&#xA;&lt;p&gt;Well, &lt;em&gt;HTML&lt;/em&gt; MasterPages and PageLayouts are great, and this is precisely what we&amp;rsquo;re going to create, but instead of writing the &lt;em&gt;HTML&lt;/em&gt; directly we decided to use &lt;em&gt;Pug&lt;/em&gt; (which compiles into &lt;em&gt;HTML&lt;/em&gt;) to build robust &lt;em&gt;HTML&lt;/em&gt; sites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Surface 1 Pro — A development machine</title>
      <link>https://thorsten-hans.com/surface-1-pro-a-development-machine/</link>
      <pubDate>Tue, 22 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/surface-1-pro-a-development-machine/</guid>
      <description>&lt;p&gt;Because many people are asking me how developing software on the &lt;em&gt;Surface 1 Pro&lt;/em&gt; works, I&amp;rsquo;ve decided to write this second recap here. Right now my Surface is about 8 months old, and the general availability of Surface 2 and Surface 2 Pro are an excellent reason to recap.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/surface-dev-1.jpg&#34; alt=&#34;Surface 1 Pro&#34; title=&#34;Surface 1 Pro&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;First of all, I&amp;rsquo;ll give you a rough overview of what&amp;rsquo;s installed on my Surface Pro right now — Microsoft Windows 8.1 Enterprise&lt;/p&gt;</description>
    </item>
    <item>
      <title>Top 14 SPC14 Sessions announced</title>
      <link>https://thorsten-hans.com/top-14-spc14-sessions-announced/</link>
      <pubDate>Fri, 18 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/top-14-spc14-sessions-announced/</guid>
      <description>&lt;p&gt;As most SharePoint addicted people already may know, &lt;a href=&#34;http://sharepointconference.com/&#34;&gt;SharePoint Conference 2014&lt;/a&gt; takes place in Las Vegas again starting on 3rd March 2014.&lt;/p&gt;&#xA;&lt;p&gt;So far nothing new, but the conference team has just published the Top 14 sessions. Most interesting for me will be the &amp;lsquo;Developing on-premises solutions with an eye on the future&amp;rsquo; from the development track.&lt;/p&gt;&#xA;&lt;p&gt;At Experts Inside we&amp;rsquo;re currently doing most of our projects within Office 365, but there are still some customers who don&amp;rsquo;t want to join the cloud. So this session looks promising to me because I&amp;rsquo;m often faced with questions like &amp;lsquo;What will happen if we go for full-trust solutions&amp;rsquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visual Studio 2013 for SharePoint Development — My experience from the Preview Phase</title>
      <link>https://thorsten-hans.com/visual-studio-2013-for-sharepoint-development-my-experience-from-the-preview-phase/</link>
      <pubDate>Fri, 18 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/visual-studio-2013-for-sharepoint-development-my-experience-from-the-preview-phase/</guid>
      <description>&lt;p&gt;On 18th of October &lt;em&gt;Visual Studio 2013&lt;/em&gt; was published on MSDN. So today (one day later) it&amp;rsquo;s a perfect day to share my experiences I&amp;rsquo;ve earned during the preview phase.I&amp;rsquo;ve installed the VS2013 Preview early in July (it was available since 26th of June) on my &lt;em&gt;SharePoint&lt;/em&gt; development system. The first thing I&amp;rsquo;ve noticed was that I didn&amp;rsquo;t have to upgrade the solution file, which turned out to be a great benefit because my colleagues could continue working with VS2012 and we didn&amp;rsquo;t run into merge conflicts because of solution or project file modifications. In August I started a big SharePoint App Project, and I decided to build it by using the Preview. After some initial considerations, we decided to realize the project as a Provider-Hosted-App with SQL Azure Backend. So there were many different aspects of our project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yeoman the web development workflow</title>
      <link>https://thorsten-hans.com/yeoman-the-web-development-workflow/</link>
      <pubDate>Fri, 18 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/yeoman-the-web-development-workflow/</guid>
      <description>&lt;p&gt;See other posts on &amp;lsquo;Branding SharePoint sites with yeoman&amp;rsquo;.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;👉🏻 &lt;a href=&#34;https://thorsten-hans.com/yeoman-the-web-development-workflow/&#34;&gt;Yeoman the web development workflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-jade/&#34;&gt;An Introduction to Pug (aka Jade)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-coffeescript/&#34;&gt;An Introduction to CoffeeScript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thorsten-hans.com/an-introduction-to-sass/&#34;&gt;An Introduction to SASS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Okay ,  let&amp;rsquo;s get started with &lt;em&gt;Yeoman&lt;/em&gt;. As I mentioned within the introduction, &lt;em&gt;Yeoman&lt;/em&gt; is more a web development workflow for front-end apps than a single tool. Yeoman has been founded by leading JavaScript developers from the community (Paul Irish for example) and is maintained by Google and the community. The most important fact about &lt;em&gt;Yeoman&lt;/em&gt; is that &lt;em&gt;Yeoman&lt;/em&gt; is based on &lt;em&gt;Node.js&lt;/em&gt;, which makes &lt;em&gt;Yeoman&lt;/em&gt; available on all popular platforms such as Windows, Linux and of course macOS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Zero to Hero — How we brand SharePoint using Yeoman</title>
      <link>https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/</link>
      <pubDate>Tue, 08 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/from-zero-to-hero-how-we-brand-sharepoint-using-yeoman/</guid>
      <description>&lt;p&gt;Branding SharePoint has been taken to a new level with SharePoint 2013; you can now easily brand your SharePoint (on Premises and Demand) by using HTML MasterPages and HTML PageLayouts. This step allows many design agencies to brand SharePoint sites without digging deep into SharePoint Insights. About a year ago Experts Inside was faced with the first huge (really huge) SharePoint 2013 project were we had to provide both custom MasterPages and custom PageLayouts. Starting with HTML was fine, but after a few days working on these artifacts, we recognized that the development workflow isn&amp;rsquo;t as smart as it could be. Kevin Mees (one of our developers) started with combining both, latest SharePoint capabilities and latest web development tools. After some iterations, we&amp;rsquo;ve built an incredible development workflow for branding SharePoint portals using the latest languages such as&lt;/p&gt;</description>
    </item>
    <item>
      <title>Talking to SharePoint&#39;s REST Services with C# using RESTSharp</title>
      <link>https://thorsten-hans.com/consume-sharepoints-rest-services-with-restsharp/</link>
      <pubDate>Wed, 02 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/consume-sharepoints-rest-services-with-restsharp/</guid>
      <description>&lt;p&gt;When it comes to SharePoint App Development (especially Cloud- and Provider Hosted Apps), most samples out there are demonstrating how to use CSOM from ASP.NET or ASP.NET MVC. Most REST Samples are dedicated to client-side logic either in JavaScript, CoffeeScript or TypeScript.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s fine for most scenarios, but for me, it&amp;rsquo;s important to do as many calls as possible with a single kind of data-access or service consummation.&lt;/p&gt;&#xA;&lt;p&gt;Therefore I tried to get rid of &lt;code&gt;CSOM&lt;/code&gt; calls from my ASP.NET MVC backend (Controllers, Repositories,…) Of course, it&amp;rsquo;s possible to deal with SharePoint&amp;rsquo;s REST API by using plain .NET Framework, but it&amp;rsquo;s not the kind of code I&amp;rsquo;d like to write in these days.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Repair OneNote sync on iOS7</title>
      <link>https://thorsten-hans.com/repair-onenote-sync-on-ios7/</link>
      <pubDate>Fri, 20 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/repair-onenote-sync-on-ios7/</guid>
      <description>&lt;p&gt;I usually write only stuff related to software development. However, I&amp;rsquo;ve to share this quick little notes because it can drive you nuts to get OneDrive on the recent iOS release syncing again.&lt;/p&gt;&#xA;&lt;p&gt;OneNote itself is one of my favorite apps, and I use it every day for personal and professional (shared) note taking. Microsoft did a great job bringing OneNote with an excellent feature-set to all platforms.&lt;/p&gt;&#xA;&lt;p&gt;As almost every &lt;em&gt;iOS&lt;/em&gt; user, I was also looking forward to &lt;em&gt;iOS7&lt;/em&gt; which ships a ton of good stuff I was waiting for. So I decided to update my iPad first. After downloading and installing the update, everything looked, and I was thrilled having the latest and greatest software finally on my device.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wrong MSDN documentation on SharePoint&#39;s REST interface</title>
      <link>https://thorsten-hans.com/wrong-msdn-documentation-on-sharepoints-rest-interface/</link>
      <pubDate>Fri, 20 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/wrong-msdn-documentation-on-sharepoints-rest-interface/</guid>
      <description>&lt;p&gt;Today I stumbled upon a documentation bug in MSDN (once again). When trying to access the list of all available &lt;code&gt;WebTemplates&lt;/code&gt; on a &lt;code&gt;SPWeb&lt;/code&gt;, &lt;a href=&#34;http://msdn.microsoft.com/en-us/library/sharepoint/jj246878.aspx&#34;&gt;this article&lt;/a&gt; describes that you can use SharePoint&amp;rsquo;s REST interface by sending an &lt;code&gt;HTTP POST&lt;/code&gt; request to &lt;code&gt;http://yourtenant.sharepoint.com/sites/yoursite/_api/web/getAvailableWebTemplates(1033)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I was wondering why I should call a &lt;code&gt;GET&lt;/code&gt; method using a &lt;code&gt;HTTP POST&lt;/code&gt; operation. So I gave it a try. Using Chrome&amp;rsquo;s Postman plugin (which is fantastic for experimenting with REST interfaces), I tried to call the method as described within the MSDN reference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCamp 2013 in Vienna</title>
      <link>https://thorsten-hans.com/sharecamp-2013-in-vienna/</link>
      <pubDate>Mon, 09 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecamp-2013-in-vienna/</guid>
      <description>&lt;p&gt;On September the 7th the first &lt;strong&gt;ShareCamp&lt;/strong&gt; in Vienna was celebrated by Austrian SharePoint Community. About 60 SharePoint addicted people came to Vienna, to spend a Saturday in Microsoft Austria&amp;rsquo;s HQ.&lt;/p&gt;&#xA;&lt;p&gt;Traditionally the ShareCamp was opened with the session building. Within 30 minutes the attendees formed the entire conference schedule with round about 25 sessions.&lt;/p&gt;&#xA;&lt;p&gt;The sessions were covering different topics from SharePoint Migration to App Development and from Windows 8 in Enterprises to SkyDrive. Audience discussions popping up during the talks was exciting. Both Speakers and Attendees discussed various topics directly in the session. This is one essential aspect of BarCamps.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Developer Week 2013 — Quick recap</title>
      <link>https://thorsten-hans.com/developer-week-2013-quick-recap/</link>
      <pubDate>Wed, 26 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/developer-week-2013-quick-recap/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m just on my way back from &amp;lsquo;Developer Week 2013&amp;rsquo;, which is — with more than 1000 attendees — one of the biggest german developer conferences.&lt;/p&gt;&#xA;&lt;p&gt;I did two talks on SharePoint development. Inspecting the entire session catalog, I noticed that these are the only talks focusing SharePoint which was a little bit frustrating but also challenging on the other side.&lt;/p&gt;&#xA;&lt;p&gt;You can grab the slides from my first talk &amp;lsquo;New SharePoint APIs&amp;rsquo; &lt;a href=&#34;http://www.slideshare.net/ThorstenHans/new-sharepoint-apis&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DotNetDay Franken — Review and Slides</title>
      <link>https://thorsten-hans.com/dotnetday-franken-review-and-slides/</link>
      <pubDate>Mon, 24 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/dotnetday-franken-review-and-slides/</guid>
      <description>&lt;p&gt;About a week ago I did a presentation on SharePoint&amp;rsquo;s new App Model to give developers a rough introduction into the new age of SharePoint development.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;.NET Day Franken&lt;/em&gt;  - one of the coolest german community conferences  - was celebrated for the 4th time in Nürnberg Germany. It was also the 4th time that I was invited as a speaker, so it&amp;rsquo;s great to see how the conference is growing and becoming a must-join event for every community member in Germany.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create a SP2013 VM on Azure using PowerShell</title>
      <link>https://thorsten-hans.com/create-a-sp2013-vm-on-azure-using-powershell/</link>
      <pubDate>Thu, 23 May 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/create-a-sp2013-vm-on-azure-using-powershell/</guid>
      <description>&lt;p&gt;A few weeks ago Windows Azure IaaS features reached GA. Since then I&amp;rsquo;m continuously replacing my OnPremise SharePoint development machines by new Azure VMs. To save money, I&amp;rsquo;m going to remove the virtual machines as soon as I don&amp;rsquo;t need them. Automating the process of creation and deletion is essential for me because I don&amp;rsquo;t want to spend a few minutes each day in PowerShell to get my machine up and running.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCamp 2013 Vienna — We&#39;re doing it again</title>
      <link>https://thorsten-hans.com/sharecamp-2013-vienna-were-doing-it-again/</link>
      <pubDate>Tue, 21 May 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecamp-2013-vienna-were-doing-it-again/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m thrilled to announce that we&amp;rsquo;re organizing another ShareCamp. After participating in the successful fourth edition of our ShareCamp in Munich, we&amp;rsquo;re now going to add more ShareCamps in different venues.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/sharecamp-vienna.png&#34; alt=&#34;ShareCamp - born2share.&#34; title=&#34;ShareCamp - born2share.&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The upcoming ShareCamp will take place in Microsoft Austria&amp;rsquo;s headquarter in Vienna on 9th of September. Save the date and visit our &lt;a href=&#34;http://www.sharecamp.at&#34;&gt;ShareCamp Austria site&lt;/a&gt; and sign in.&lt;/p&gt;&#xA;&lt;p&gt;Registration opens now, and we&amp;rsquo;re currently limited to 75 attendees. So, hurry up and register for the 5th ShareCamp. As every time, attending a ShareCamp is free. We&amp;rsquo;re also scheduling a ShareCamp Party on Saturday evening. As soon as new information about the party is available, I&amp;rsquo;ll keep you updated. I want to say thank you to the entire organization-crew, without the great orga-team it would be impossible to schedule such an event.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Productivity boost with SublimeText Plugins</title>
      <link>https://thorsten-hans.com/productivity-boost-with-sublimetext-plugins/</link>
      <pubDate>Thu, 18 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/productivity-boost-with-sublimetext-plugins/</guid>
      <description>&lt;p&gt;For developing native web languages I use SublimeText 2 (&lt;a href=&#34;http://www.sublimetext.com/&#34;&gt;http://www.sublimetext.com/&lt;/a&gt;). Like many other editors, SublimeText offers a great plugin ecosystem, which allows you as a developer to add various functionality by installing additional packages.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/sublime-logo.png&#34; alt=&#34;Sublime Text&#34; title=&#34;Sublime Text&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Within this post I&amp;rsquo;ll introduce some plugins I&amp;rsquo;m using to increase my developer performance.&lt;/p&gt;&#xA;&lt;h2 id=&#34;package-control&#34;&gt;Package Control&lt;/h2&gt;&#xA;&lt;p&gt;Package Control is the most robust and vital plugin; it allows you to add new plugins to sublime without typing endless commands into the console or manually copying files to the application directory. To install Package Control, you&amp;rsquo;ve to execute the following script from Sublime Text&amp;rsquo;s Console&lt;/p&gt;</description>
    </item>
    <item>
      <title>Launch modal dialogs from ECB CustomActions from within the HostWeb</title>
      <link>https://thorsten-hans.com/modal-dialogs-from-ecb-customactions-from-within-the-hostweb/</link>
      <pubDate>Wed, 17 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/modal-dialogs-from-ecb-customactions-from-within-the-hostweb/</guid>
      <description>&lt;p&gt;When you&amp;rsquo;re building Apps for SharePoint 2013, you can create Pages, Client Parts or CustomActions.&lt;/p&gt;&#xA;&lt;p&gt;For CustomActions there are two different targets, either the Ribbon or the Edit Control Block (ECB) in both cases it&amp;rsquo;s not allowed to inject JavaScript. If SharePoint allowed adding JS in these situations, the client script would run in the context of the HostWeb which would cause possible security leaks.&lt;/p&gt;&#xA;&lt;p&gt;For ECB CustomActions you can provide an URL-Action which redirects the user to a URL defined by you (the App developer). You can add various tokens to the URL, as a SharePoint developer you&amp;rsquo;re perhaps aware of this functionality from previous SharePoint versions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maintaining Brownfield JS Apps? Check Js2Coffee</title>
      <link>https://thorsten-hans.com/maintaining-brownfield-js-apps-check-js2coffee/</link>
      <pubDate>Wed, 17 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/maintaining-brownfield-js-apps-check-js2coffee/</guid>
      <description>&lt;p&gt;Do you love &lt;em&gt;CoffeeScript&lt;/em&gt;? Alternatively, you&amp;rsquo;ve to maintain Brownfield &lt;em&gt;JavaScript&lt;/em&gt; based Applications?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/coffeescript-logo.png&#34; alt=&#34;CoffeeScript Logo&#34; title=&#34;CoffeeScript Logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Checkout &lt;em&gt;Js2coffee&lt;/em&gt;! &lt;em&gt;Js2coffee&lt;/em&gt; translates your JavaScript Code into nice, readable and valid CoffeeScript. In addition to the Js2coffee website (&lt;a href=&#34;js2coffee.org&#34; title=&#34;js2coffee.org&#34;&gt;js2coffee.org&lt;/a&gt;), there is also an &lt;code&gt;NPM&lt;/code&gt; package available. You can install it directly from the terminal&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install js2coffee&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or globally&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install js2coffee --g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can translate your JS file easily by providing the following command.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ShareCamp 2013 recap</title>
      <link>https://thorsten-hans.com/sharecamp-2013-recap/</link>
      <pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/sharecamp-2013-recap/</guid>
      <description>&lt;p&gt;Last weekend we did our fourth ShareCamp at Microsoft&amp;rsquo;s German headquarter in Munich (Unterschleißheim). The ShareCamp is not a typical conference; it&amp;rsquo;s a BarCamp, BarCamps typically have no schedule until the conference starts. Every attendee can submit sessions, discussions or Hands-On Workshops.&lt;/p&gt;&#xA;&lt;p&gt;Therefore it&amp;rsquo;s great for people who&amp;rsquo;d never spoken at huge, favorite conferences. The entire audience &lt;strong&gt;votes&lt;/strong&gt; for the session proposals and depending on these votes sessions are moved to bigger or smaller rooms. (More information on BarCamps can be found here&#xA;&lt;a href=&#34;http://en.wikipedia.org/wiki/BarCamp&#34;&gt;http://en.wikipedia.org/wiki/BarCamp&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows Azure Global Bootcamp</title>
      <link>https://thorsten-hans.com/windows-azure-global-bootcamp/</link>
      <pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/windows-azure-global-bootcamp/</guid>
      <description>&lt;p&gt;Since global availability of SharePoint 2013, Azure is getting more and more critical for SharePoint and SharePoint Online. As a developer, you can create Apps for SharePoint using Azure as the platform for your custom website, which will interact with your SharePoint instance.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/global-azure-bootcamp-2013.png&#34; alt=&#34;Global Azure Bootcamp 2013&#34; title=&#34;Global Azure Bootcamp 2013&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Therefore almost every SharePoint dev should be familiar with Windows Azure and it services. Microsoft Azure MVPs and the Microsoft Azure community are organizing a global BootCamp for Azure on 27th of April 2013.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows Azure IaaS reaches GA</title>
      <link>https://thorsten-hans.com/windows-azure-iaas-reaches-ga/</link>
      <pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/windows-azure-iaas-reaches-ga/</guid>
      <description>&lt;p&gt;Windows Azure&amp;rsquo;s IaaS components have just reached GA (General Availability) status. There is also a SharePoint Template existing which can be used to host SharePoint 2013 Farms on Windows Azure IaaS. Microsoft is also providing a whitepaper describing how to scale and create a SharePoint Farm on Windows Azure using all the great features offered by the Windows Azure Cloud. You can find the whitepaper here (&lt;a href=&#34;http://go.microsoft.com/fwlink/?LinkID=288782&amp;amp;clcid=0x409&#34;&gt;http://go.microsoft.com/fwlink/?LinkID=288782&amp;amp;clcid=0x409&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/azure-iaas-ga-1.png&#34; alt=&#34;Azure IaaS Catalog with SharePoint machines&#34; title=&#34;Azure IaaS Catalog with SharePoint machines&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prevent errors while using SPWebConfigModification</title>
      <link>https://thorsten-hans.com/prevent-errors-while-using-spwebconfigmodification/</link>
      <pubDate>Thu, 11 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/prevent-errors-while-using-spwebconfigmodification/</guid>
      <description>&lt;p&gt;Today I ran into an issue with &lt;code&gt;SPWebConfigModification&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;SPWebConfigModification&lt;/code&gt; can be used to make changes to SharePoint&amp;rsquo;s &lt;code&gt;web.config&lt;/code&gt;. The advantage of using &lt;code&gt;SPWebConfigModification&lt;/code&gt; - instead of manually changing &lt;code&gt;web.config&lt;/code&gt; files on each server - is that changes are applied automatically to each Web Frontend Server (WFE) in the farm.&lt;/p&gt;&#xA;&lt;p&gt;Internally SharePoint is holding a collection of modifications (a collection of &lt;code&gt;SPWebConfigModification&lt;/code&gt;) that should be applied to the &lt;code&gt;web.config&lt;/code&gt; File. Once a modification failed, this particular instance of &lt;code&gt;SPWebConfigModification&lt;/code&gt; may resist within the collection. Therefore you should always clear the collection directly before staging your modifications on an instance of &lt;code&gt;SPWebApplication&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 Days using Surface Pro — A developers review</title>
      <link>https://thorsten-hans.com/10-days-using-surface-pro-a-developers-review/</link>
      <pubDate>Thu, 28 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/10-days-using-surface-pro-a-developers-review/</guid>
      <description>&lt;p&gt;While visiting the Global MVP Summit 2013 in Redmond, I decided to buy a Surface Pro, because they don&amp;rsquo;t sell it in Germany at this time. There were more reasons why I bought the Surface Pro in opposite to other devices such as Lenovo&amp;rsquo;s Yoga — which is also really awesome — or perhaps a Samsung Slate or HP&amp;rsquo;s Envy.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Surface offers pen support which is working like a charm, it&amp;rsquo;s really smooth; you get fast feedback and it&amp;rsquo;s really, really precise.&lt;/li&gt;&#xA;&lt;li&gt;Surface is the fastest tablet with Win8 on it. (Did ultimate developer test -&amp;gt; VS 2012 Startup-Sequence) 😀&lt;/li&gt;&#xA;&lt;li&gt;No matter when Surface Pro will be shipped in Germany, but there will be accessory, I hope so 😉&lt;/li&gt;&#xA;&lt;li&gt;Surface is really handy and it isn&amp;rsquo;t that heavy as news sites are telling you&lt;/li&gt;&#xA;&lt;li&gt;Surface is also cheaper than comparable competitors&lt;/li&gt;&#xA;&lt;li&gt;It offers 4 gigs of RAM&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Okay these were a few reasons why I bought it, but now let&amp;rsquo;s move on, I&amp;rsquo;d like to share my experience with Surface PRO.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yammer vs SharePoint Social in 2013</title>
      <link>https://thorsten-hans.com/yammer-vs-sp-social-in-2013/</link>
      <pubDate>Tue, 26 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/yammer-vs-sp-social-in-2013/</guid>
      <description>&lt;p&gt;There are several discussions on SharePoint&amp;rsquo;s social strategy going on at the moment. I had some great discussions with my MVP mate &lt;a href=&#34;http://blog.sharedove.com/adisjugo/&#34;&gt;Adis Jugo&lt;/a&gt; during Summit last week. Since #SPC12 almost every SharePoint addicted developer, it-pro, power user has reviewed Yammer. If you don&amp;rsquo;t know what Yammer is, here a short introduction.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;images/yammer.png&#34; alt=&#34;Yammer - The enterprise social network&#34; title=&#34;Yammer - The enterprise social network&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yammer is an enterprise social network, which allows you and your coworkers to communicate in a modern way as on Facebook. The vast difference between Facebook and Yammer is, Yammer is private. That means only people from your organization or the people you&amp;rsquo;ve invited to join your network can see and take part in the conversation which is going on in your Yammer network. With the common understanding of Yammer, you should be able to follow up the ongoing discussions. Adis wrote &lt;a href=&#34;http://blog.sharedove.com/adisjugo/index.php/2013/02/20/my-2-when-will-yammer-really-matter/&#34;&gt;a great post&lt;/a&gt;, summarizing his thoughts on SharePoint and Yammer integration and the upcoming social future. I agree with Adis; many things are missing at the moment. However, here my thoughts on Yammer vs. SPSocial&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://thorsten-hans.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/contact/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m more than happy to connect. Just drop me a line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Legal Disclosure</title>
      <link>https://thorsten-hans.com/legal-details/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/legal-details/</guid>
      <description>&lt;p&gt;Information in accordance with Section 5 TMG&lt;/p&gt;&#xA;&lt;p&gt;Thorsten Hans&lt;/p&gt;&#xA;&lt;p&gt;Bühlrech 10&lt;/p&gt;&#xA;&lt;p&gt;66620 Nonnweiler&lt;/p&gt;&#xA;&lt;h2 id=&#34;contact-information&#34;&gt;Contact Information&lt;/h2&gt;&#xA;&lt;p&gt;Telephone: 0151 46680872&lt;/p&gt;&#xA;&lt;p&gt;E-Mail: &lt;a href=&#34;mailto:thorsten.hans@gmail.com&#34;&gt;thorsten.hans@gmail.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Internet address: &lt;a href=&#34;https://thorsten-hans.com&#34;&gt;https://thorsten-hans.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;graphics-and-image-sources&#34;&gt;Graphics and Image Sources&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://unsplash.com/&#34;&gt;https://unsplash.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;&#xA;&lt;h3 id=&#34;accountability-for-content&#34;&gt;Accountability for content&lt;/h3&gt;&#xA;&lt;p&gt;The contents of our pages have been created with the utmost care. However, we cannot guarantee the contents&amp;rsquo; accuracy, completeness or topicality. According to statutory provisions, we are furthermore responsible for our own content on these web pages. In this matter, please note that we are not obliged to monitor the transmitted or saved information of third parties, or investigate circumstances pointing to illegal activity. Our obligations to remove or block the use of information under generally applicable laws remain unaffected by this as per §§ 8 to 10 of the Telemedia Act (TMG).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Privacy Policy</title>
      <link>https://thorsten-hans.com/privacy-policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/privacy-policy/</guid>
      <description>&lt;p&gt;We are very delighted that you have shown interest in our enterprise. Data protection is of a particularly high priority for the management of the Thorsten Hans. The use of the Internet pages of the Thorsten Hans is possible without any indication of personal data; however, if a data subject wants to use special enterprise services via our website, processing of personal data could become necessary. If the processing of personal data is necessary and there is no statutory basis for such processing, we generally obtain consent from the data subject.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Search</title>
      <link>https://thorsten-hans.com/search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/search/</guid>
      <description></description>
    </item>
    <item>
      <title>Talks &amp; Publications</title>
      <link>https://thorsten-hans.com/speaking/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://thorsten-hans.com/speaking/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m actively contributing to different technology communities for more than a decade now. My contributions reach from articles for print and online developer magazines over meetups and user-groups to talks and workshops for the biggest international developer conferences.&lt;/p&gt;&#xA;&lt;h2 id=&#34;public-speaking&#34;&gt;Public Speaking&lt;/h2&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://thorsten-hans.com/images/speaking/thorsten-hans-speaking-1.jpg&#34;&gt;&lt;figcaption&gt;&#xA;      &lt;h4&gt;Thorsten Hans on Stage&lt;/h4&gt;&#xA;    &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;With more than 300 public talks on software development related topics, it&amp;rsquo;s tough to keep a list of all sessions and workshops up-to-date. Instead, I&amp;rsquo;d like to share some of my personal highlights. See this unsorted list of conferences, I contributed to:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
