<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>About on Fabian van Steen</title>
    <link>https://fabianvansteen.com/</link>
    <description>Recent content in About on Fabian van Steen</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 12 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://fabianvansteen.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Trying out Omarchy — a .NET developer on Linux</title>
      <link>https://fabianvansteen.com/articles/trying-out-omarchy/</link>
      <pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/trying-out-omarchy/</guid>
      <description>&lt;p&gt;It started with a laptop nobody wanted anymore. A 2017 MacBook Air, Intel, 8 GB of RAM, sitting in my office running an old version of macOS. My son had been using it, and had mostly stopped — because it had become the kind of slow where you think twice before opening a browser tab.&lt;/p&gt;&#xA;&lt;p&gt;So I wiped it and put &lt;a href=&#34;https://omarchy.org/&#34;&gt;Omarchy&lt;/a&gt; on it: &amp;ldquo;Beautiful, fun &amp;amp; agentic Linux by DHH.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The 6 levels of Claude Code — where do you stand?</title>
      <link>https://fabianvansteen.com/articles/the-6-levels-of-claude-code/</link>
      <pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/the-6-levels-of-claude-code/</guid>
      <description>&lt;p&gt;Most people hit a wall with Claude Code not because they&amp;rsquo;re doing something wrong, but because they have no map for what progress looks like. Six levels separate the beginners from the orchestrators — here&amp;rsquo;s how to find yourself on that map.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;level-1--the-prompt-engineer&#34;&gt;Level 1 — The prompt engineer&lt;/h2&gt;&#xA;&lt;p&gt;This used to be a job title. Now it&amp;rsquo;s table stakes.&lt;/p&gt;&#xA;&lt;p&gt;You treat Claude like a vending machine: input a command, collect the output. The result is AI slop — every website the same purple gradient, same icons, same forgettable fonts. That&amp;rsquo;s what happens when you leave the gaps for Claude to fill. It fills them with average.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Securing an Azure Storage Account</title>
      <link>https://fabianvansteen.com/articles/securing-an-azure-storage-account/</link>
      <pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/securing-an-azure-storage-account/</guid>
      <description>&lt;p&gt;A secure Azure Storage Account setup involves applying best practices for access control, networking, encryption, and monitoring. Below is a comprehensive checklist.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-1-identity--access-management&#34;&gt;🔑 1. Identity &amp;amp; Access Management&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use Azure RBAC (Role-Based Access Control):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Assign the least privileged roles to users, groups, and services.&lt;/li&gt;&#xA;&lt;li&gt;Prefer &lt;code&gt;Storage Blob Data Reader/Contributor&lt;/code&gt; over general &lt;code&gt;Storage Account Contributor&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Use Azure AD for Authentication:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable Azure AD authentication for Blob and Queue services.&lt;/li&gt;&#xA;&lt;li&gt;Avoid using account keys where possible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Disable Shared Key Access:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If possible, disable Shared Key Authorization under the &lt;code&gt;Configuration&lt;/code&gt; tab.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Use Shared Access Signatures (SAS) cautiously:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prefer user delegation SAS over account SAS.&lt;/li&gt;&#xA;&lt;li&gt;Limit expiry, permissions, and IP address range.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-2-networking&#34;&gt;🌐 2. Networking&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Restrict access with firewalls and VNets:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable the firewall and configure trusted IP ranges or VNets.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Disable public access:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set &lt;code&gt;AllowBlobPublicAccess = false&lt;/code&gt; at the storage account level.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Use Private Endpoints:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create Azure Private Endpoints to eliminate exposure to the public internet.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-3-encryption&#34;&gt;🔐 3. Encryption&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data-at-Rest Encryption:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enabled by default with Microsoft-managed keys.&lt;/li&gt;&#xA;&lt;li&gt;Optionally use Customer-managed keys (CMK) in Azure Key Vault.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Data-in-Transit Encryption:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enforce HTTPS-only traffic (&lt;code&gt;Secure transfer required&lt;/code&gt; setting).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-4-monitoring--alerts&#34;&gt;📊 4. Monitoring &amp;amp; Alerts&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable Azure Monitor &amp;amp; Storage Diagnostics:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Configure Azure Monitor Logs and metrics.&lt;/li&gt;&#xA;&lt;li&gt;Enable Storage Analytics Logging for Blob, Queue, Table.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Log all access with Azure Activity Logs:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Monitor operations like key changes, firewall updates, etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Enable Defender for Storage:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Detect threats like data exfiltration, malware uploads, unusual access patterns.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-5-data-protection--recovery&#34;&gt;🛡️ 5. Data Protection &amp;amp; Recovery&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable Soft Delete:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Protect against accidental deletions (Blob, File, Container).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Enable Point-in-Time Restore (Blob Storage):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Recover from corruption or accidental deletion.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Replication Options:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Choose Geo-Redundant Storage (GRS) or Zone-Redundant Storage (ZRS) for durability.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;-6-regular-reviews--compliance&#34;&gt;✅ 6. Regular Reviews &amp;amp; Compliance&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rotate keys and secrets regularly.&lt;/li&gt;&#xA;&lt;li&gt;Use Azure Policy to enforce compliance (e.g., disallow public access).&lt;/li&gt;&#xA;&lt;li&gt;Audit access control assignments and review logs routinely.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Azure Key Vault - Best Practices</title>
      <link>https://fabianvansteen.com/articles/azure-key-vault-best-practices/</link>
      <pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/azure-key-vault-best-practices/</guid>
      <description>&lt;p&gt;Azure Key Vault is essential for secure management of secrets, keys, and certificates. Below are key security-focused best practices to design a robust, compliant, and resilient implementation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-use-separate-vaults-per-environment&#34;&gt;1. Use Separate Vaults per Environment&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create dedicated vaults for Development, Testing, and Production.&lt;/li&gt;&#xA;&lt;li&gt;Apply environment-specific access controls.&lt;/li&gt;&#xA;&lt;li&gt;Reduce the blast radius and avoid accidental sharing or overwriting across environments.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2-set-expiration--automate-rotation&#34;&gt;2. Set Expiration &amp;amp; Automate Rotation&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Configure expiration dates for all secrets, keys, and certificates.&lt;/li&gt;&#xA;&lt;li&gt;Automate rotation with Azure Logic Apps or Azure Functions.&lt;/li&gt;&#xA;&lt;li&gt;Use Key Vault references in Azure App Services to consume updated secrets without redeploying code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;3-enable-logging--monitoring&#34;&gt;3. Enable Logging &amp;amp; Monitoring&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Send activity logs to Azure Monitor, Log Analytics, or Storage Accounts.&lt;/li&gt;&#xA;&lt;li&gt;Track who accessed what, when, and from where.&lt;/li&gt;&#xA;&lt;li&gt;Integrate with Azure Sentinel to enable threat detection and automated alerting.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;4-restrict-network-access&#34;&gt;4. Restrict Network Access&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use Private Endpoints to limit access to resources within your Virtual Network.&lt;/li&gt;&#xA;&lt;li&gt;Configure IP firewall rules to allow only trusted sources.&lt;/li&gt;&#xA;&lt;li&gt;Enable only necessary Microsoft trusted services access.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;5-use-azure-rbac-instead-of-access-policies&#34;&gt;5. Use Azure RBAC Instead of Access Policies&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prefer Azure RBAC for fine-grained, manageable access control.&lt;/li&gt;&#xA;&lt;li&gt;Assign roles like &lt;code&gt;Key Vault Secrets User&lt;/code&gt; with least privilege.&lt;/li&gt;&#xA;&lt;li&gt;Avoid using the built-in &lt;code&gt;Contributor&lt;/code&gt; role, as it grants excessive permissions.&lt;/li&gt;&#xA;&lt;li&gt;Create a custom role that excludes sensitive actions (e.g., vault deletion).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;6-enable-soft-delete--purge-protection&#34;&gt;6. Enable Soft Delete &amp;amp; Purge Protection&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Protect secrets, keys, and certificates from accidental or malicious deletion.&lt;/li&gt;&#xA;&lt;li&gt;Enable Soft Delete and Purge Protection to ensure recovery is always possible.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;7-lock-the-key-vault-resource&#34;&gt;7. Lock the Key Vault Resource&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Apply resource locks (e.g., &amp;ldquo;CanNotDelete&amp;rdquo;) to prevent accidental or unauthorized deletion of the vault itself.&lt;/li&gt;&#xA;&lt;li&gt;Especially important in Production environments.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>RSS feeds for your Github releases, tags and activity</title>
      <link>https://fabianvansteen.com/articles/rss-feeds-for-your-github-releases-tags-and-activity/</link>
      <pubDate>Sun, 25 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/rss-feeds-for-your-github-releases-tags-and-activity/</guid>
      <description>&lt;p&gt;I like to be up to date on new releases of the software I am using. Github has a number of ways to track user or project activity.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Repo releases&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/:owner/:repo/releases.atom&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Repo commits&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/:owner/:repo/commits.atom&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Private feed&lt;/strong&gt; (You can find &amp;ldquo;Subscribe to your news feed&amp;rdquo; in dashboard page after login)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/:user.private.atom?token=:secret&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Repo tags&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/:user/:repo/tags.atom&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;User activity&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://github.com/:user.atom&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>How to Flush DNS Cache in MacOS Catalina &amp; Big Sur</title>
      <link>https://fabianvansteen.com/articles/how-to-flush-dns-cache-in-mac-os-catalina-and-big-sur/</link>
      <pubDate>Sat, 24 Oct 2020 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/how-to-flush-dns-cache-in-mac-os-catalina-and-big-sur/</guid>
      <description>&lt;p&gt;Use the following commands to flush your DNS cache in MacOS. The commands are slightly different depending on your version of MacOS. First, make sure you&amp;rsquo;ve opened up your terminal on your computer.&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;sudo dscacheutil -flushcache&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; sudo killall -HUP mDNSResponder&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>How to install homebrew on MacOS</title>
      <link>https://fabianvansteen.com/articles/how-to-install-homebrew-on-mac-os/</link>
      <pubDate>Sat, 29 Jun 2019 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/how-to-install-homebrew-on-mac-os/</guid>
      <description>&lt;h2 id=&#34;what-is-homebrew&#34;&gt;What is HomeBrew&lt;/h2&gt;&#xA;&lt;p&gt;Homebrew is the missing package manager for macOS. You can use Homebrew to install command line packages on a Mac, provided someone has written a formulae, which is a simple Ruby script that walks through the process for installing all the little bits required for a piece of software.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-homebrew&#34;&gt;Installing HomeBrew&lt;/h2&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;/usr/bin/ruby -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the installation has finished, execute the following command to check your HomeBrew version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Renaming the hostname of your Raspberry Pi (Raspbian)</title>
      <link>https://fabianvansteen.com/articles/renaming-the-hostname-of-your-raspberry-pi-raspbian/</link>
      <pubDate>Mon, 05 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/renaming-the-hostname-of-your-raspberry-pi-raspbian/</guid>
      <description>&lt;p&gt;One of the first things you want to do if you&amp;rsquo;ve just installed Raspbian on your Pi is to change the hostname. You can change your hostname by following these steps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;steps&#34;&gt;Steps&lt;/h2&gt;&#xA;&lt;p&gt;You can use the &lt;code&gt;hostnamectl set-hostname [name]&lt;/code&gt; command, but that does not update &lt;code&gt;/etc/hosts&lt;/code&gt; and causes issues with Docker and other networking services. I prefer to update &lt;code&gt;/etc/hostname&lt;/code&gt; and &lt;code&gt;/etc/hosts&lt;/code&gt; manually.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. Change hostname&lt;/strong&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;sudo nano /etc/hostname&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Change &lt;code&gt;raspberrypi&lt;/code&gt; to your desired hostname. Hit &lt;code&gt;CTRL+O&lt;/code&gt; and then &lt;code&gt;ENTER&lt;/code&gt; to save. Hit &lt;code&gt;CTRL+X&lt;/code&gt; to exit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install Docker on your Raspberry Pi</title>
      <link>https://fabianvansteen.com/articles/how-to-install-docker-on-your-raspberry-pi/</link>
      <pubDate>Tue, 27 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://fabianvansteen.com/articles/how-to-install-docker-on-your-raspberry-pi/</guid>
      <description>&lt;h2 id=&#34;what-is-docker&#34;&gt;What is Docker?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.docker.com/&#34;&gt;Docker&lt;/a&gt; is an open-source project for automating the deployment of applications as portable, self-sufficient containers that can run on the cloud or on-premises. Docker works in collaboration with cloud, Linux, and Windows vendors, including Microsoft.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-install-docker&#34;&gt;How to install Docker&lt;/h2&gt;&#xA;&lt;p&gt;With one of the latest releases of Docker, they added official support for Raspbian. You can now easily install Docker on your Raspberry Pi with one simple command.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
