<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>marco.ninja - Blog Feed</title>
    <link>https://marco.ninja/blog/</link>
    <description>Latest posts and notes from marco.ninja</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 07 Mar 2026 04:35:15 +0000</lastBuildDate>
    <atom:link href="https://marco.ninja/blog/feed.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Excalidraw Figures in Hugo</title>
      <link>https://marco.ninja/blog/posts/2026/03/07/excalidraw-figures-in-hugo/</link>
      <pubDate>Sat, 07 Mar 2026 04:35:15 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2026/03/07/excalidraw-figures-in-hugo/</guid>
      <description>&lt;p&gt;I &lt;strong&gt;love drawing&lt;/strong&gt; things, especially in Excalidraw!
I also &lt;strong&gt;need more dark mode&lt;/strong&gt; support in my life.&lt;/p&gt;
&lt;p&gt;In this post I&amp;rsquo;ll go through how I made Excalidraw exports render nicely on my blog in a light or dark mode aware fashion.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Introducing snippethost.gitlab.io</title>
      <link>https://marco.ninja/blog/posts/2026/01/11/introducing-snippethost/</link>
      <pubDate>Sun, 11 Jan 2026 18:39:41 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2026/01/11/introducing-snippethost/</guid>
      <description>&lt;p&gt;It is no secret that I&amp;rsquo;m no big fan of GitHub and it&amp;rsquo;s dominance in the VCS-ecosystem.&lt;/p&gt;
&lt;p&gt;So in an effort of leveling the playing field I&amp;rsquo;m taking it onto myself to build more cool things
for and with my VCS of choice, GitLab!&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Devlog 2026-01-04</title>
      <link>https://marco.ninja/blog/posts/2026/01/04/measuring-container-builds/</link>
      <pubDate>Sun, 04 Jan 2026 18:39:41 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2026/01/04/measuring-container-builds/</guid>
      <description>&lt;p&gt;Over the holidays I&amp;rsquo;ve been diving deep into build systems in general and container builds in particular.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Static Site Generator Fulltext Search</title>
      <link>https://marco.ninja/blog/posts/2025/10/26/static-site-generator-fulltext-search/</link>
      <pubDate>Sun, 26 Oct 2025 16:29:12 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2025/10/26/static-site-generator-fulltext-search/</guid>
      <description>&lt;p&gt;I recently rebuilt my blog from scratch, see the &lt;a href=&#34;#post-footer&#34;&gt;previous post in this series&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One thing I wanted to add was site-wide search without any external dependencies.
Since I have previous experience with a tool called &lt;a href=&#34;https://pagefind.app&#34;&gt;pagefind&lt;/a&gt;, which is perfect for this use case,
I implemented it with that.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Remaking My Blog From Scratch</title>
      <link>https://marco.ninja/blog/posts/2025/10/26/remaking-my-blog-from-scratch/</link>
      <pubDate>Sun, 26 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2025/10/26/remaking-my-blog-from-scratch/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been blogging in one form or another for 5 years now.&lt;/p&gt;
&lt;p&gt;All blogs and other online publishing adventures had one thing in common: I barely knew what I was doing, using components I never learned properly.&lt;/p&gt;
&lt;p&gt;I wanted to change that! And with the benefit of hindsight I will now take you on this adventure with me.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Hugo Environment Variable Magic</title>
      <link>https://marco.ninja/blog/notes/technology/hugo/hugo-env-var-magic/</link>
      <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/hugo/hugo-env-var-magic/</guid>
      <description>&lt;p&gt;You can overwrite hugo configuration values with environment variables!&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Finding PID Everywhere</title>
      <link>https://marco.ninja/blog/notes/technology/linux/finding-pid-everywhere/</link>
      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/finding-pid-everywhere/</guid>
      <description>&lt;p&gt;Usually at least one of those is present on any system&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;top&lt;/li&gt;
&lt;li&gt;htop / another top variant&lt;/li&gt;
&lt;li&gt;ps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But sometimes the usual suspects are not available, especially in minimal containers.&lt;/p&gt;
&lt;p&gt;But there is another, more low level, way that works: &lt;code&gt;/proc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is a virtual filesystem provided by the kernel about running processes.&lt;/p&gt;
&lt;p&gt;So to mirror something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ps aux &lt;span style=&#34;color:#abb2bf&#34;&gt;|&lt;/span&gt;grep sleep
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#d19a66&#34;&gt;5&lt;/span&gt; root      0:00 sleep &lt;span style=&#34;color:#d19a66&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#d19a66&#34;&gt;21&lt;/span&gt; root      0:00 sleep &lt;span style=&#34;color:#d19a66&#34;&gt;10000000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#d19a66&#34;&gt;36&lt;/span&gt; root      0:00 grep sleep
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We could do:&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hacking Comments Into JSON</title>
      <link>https://marco.ninja/blog/notes/technology/json/hacking-comments-into-json/</link>
      <pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/json/hacking-comments-into-json/</guid>
      <description>&lt;p&gt;JSON does not natively support comments, which is OK, but sometimes a comment could really help.&lt;/p&gt;
&lt;p&gt;If the application loading the JSON does not care about additional keys
we can simply add a key with our favorite comment indicator like &lt;code&gt;//&lt;/code&gt; or &lt;code&gt;#&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;&amp;#34;//&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;This setting enables not just A, but somehow also B&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;&amp;#34;enable_feature_a&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;










&lt;div class=&#34;notice&#34; style=&#34;border-color: #2060df;&#34;&gt;
  
  &lt;div&gt;
    
    &lt;i class=&#34;las la-info-circle la-lg&#34;&gt;&lt;/i&gt;
    
    &lt;p&gt;While this works consider using a different file format better suited for configuration.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Replace item in list with Kustomize</title>
      <link>https://marco.ninja/blog/notes/technology/kustomize/kustomize-replace-item-in-list/</link>
      <pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/kustomize/kustomize-replace-item-in-list/</guid>
      <description>&lt;p&gt;Kubernetes resources have quite a lot of lists in them and replacing an item in such lists is quite easy
using kustomize &lt;code&gt;patches&lt;/code&gt; with &lt;code&gt;op: replace&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Replacing a specific list item safely however is not as obvious as the order of items could change,
leading to a technically valid but practically incorrect manifest.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Easy Backlink Check</title>
      <link>https://marco.ninja/blog/notes/technology/seo/easy-backlink-check/</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/seo/easy-backlink-check/</guid>
      <description>&lt;p&gt;There are loads of better ways to do this using Google Search Console / Bing Webmaster Tools / &lt;a href=&#34;https://ahrefs.com&#34;&gt;ahrefs&lt;/a&gt; and similar tools.&lt;/p&gt;
&lt;p&gt;Arguably these might be a bit too much for a small side project or a curious quick check,
so this is how I do it. The same syntax works for both Google and Bing.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Caddy: Custom Domains for SaaS</title>
      <link>https://marco.ninja/blog/notes/technology/caddy/caddy-custom-domains-saas/</link>
      <pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/caddy/caddy-custom-domains-saas/</guid>
      <description>&lt;p&gt;Building custom domains for your SaaS is not always easy, especially when certificates get involved.&lt;/p&gt;
&lt;p&gt;With Caddy it becomes very easy!&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Oh Shit, Git!?!</title>
      <link>https://marco.ninja/blog/notes/technology/git/oh-shit-git/</link>
      <pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/git/oh-shit-git/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Git is hard: screwing up is easy, and figuring out how to fix your mistakes is fucking impossible.
Git documentation has this chicken and egg problem where you can&amp;rsquo;t search for how to get yourself out of a mess,
unless you already know the name of the thing you need to know about in order to fix your problem.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://ohshitgit.com&#34;&gt;Oh Shit, Git!?!&lt;/a&gt; is a collection of these situations, in plain English, and how to resolve them.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Guest Appearance: Nginx Community Chats</title>
      <link>https://marco.ninja/blog/posts/2025/06/12/nginx-community-chats-16/</link>
      <pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2025/06/12/nginx-community-chats-16/</guid>
      <description>&lt;p&gt;I had the pleasure of joining Dave McAllister, Senior Open Source Technologist for NGINX,
on the NGINX Community Chats to talk about &lt;a href=&#34;https://tech-playground.com/playgrounds/nginx&#34;&gt;tech playground&lt;/a&gt;.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Colorize pattern on CLI</title>
      <link>https://marco.ninja/blog/notes/technology/bash/colorize-pattern-on-cli/</link>
      <pubDate>Wed, 07 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/bash/colorize-pattern-on-cli/</guid>
      <description>&lt;p&gt;Colorize a pattern in the given input using a neat regex and colorization hack in grep
(&lt;code&gt;$&lt;/code&gt; matching all lines but not being able to be highlighted).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;color &lt;span style=&#34;color:#54b1c7&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Color highlight the pattern in the incoming stream, writing to stdout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# This effectively matches our PATTERN andy any &amp;#34;$&amp;#34; (line end)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# But only our PATTERN can be highlighted, line end characters aren&amp;#39;t actually there to be highlighted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e5c07b&#34;&gt;local&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;PATTERN&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;[&lt;/span&gt; -z &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$1&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;]&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e5c07b&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Usage: color &amp;lt;pattern&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e5c07b&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Description: Greps input with --color=always -E &amp;#39;PATTERN|\$&amp;#39; &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e5c07b&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Example: echo \&amp;#34;hello world\&amp;#34; | color \&amp;#34;world\&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#d19a66&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  grep --color&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;always &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$PATTERN&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;\|\$&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>kubeswitch: The kubectl for operators</title>
      <link>https://marco.ninja/blog/notes/technology/k8s/kubeswitch/</link>
      <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/k8s/kubeswitch/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/danielfoehrKn/kubeswitch&#34;&gt;kubeswitch (lazy: switch) is the single pane of glass for all of your kubeconfig files. Caters to operators of large scale Kubernetes installations. Designed as a drop-in replacement for kubectx.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m using it for all my cluster-switching needs.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>pip install from git repository</title>
      <link>https://marco.ninja/blog/notes/technology/python/pip-install-from-git-repo/</link>
      <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/python/pip-install-from-git-repo/</guid>
      <description>&lt;p&gt;Install a pip package from a git repo, using a specified git reference:&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>DrawKit</title>
      <link>https://marco.ninja/blog/notes/misc/drawkit/</link>
      <pubDate>Sun, 13 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/drawkit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.drawkit.com&#34;&gt;Hand-drawn 2D &amp;amp; 3D illustrations, icons and animations.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Incredibly high quality illustrations.&lt;/p&gt;
&lt;p&gt;I use them in a bunch of places, especially on landing pages and in presentations
that just need that little &amp;ldquo;extra&amp;rdquo; thing.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Troubleshooting Intermittent DNS Resolution Issues</title>
      <link>https://marco.ninja/blog/notes/technology/dns/troubleshooting-intermittent-dns-resolution-issues/</link>
      <pubDate>Fri, 28 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/dns/troubleshooting-intermittent-dns-resolution-issues/</guid>
      <description>&lt;p&gt;DNS is something so fundamental to most of our systems functioning that it&amp;rsquo;s often overlooked in initial troubleshooting,
it&amp;rsquo;s also incredibly hard to troubleshoot if it&amp;rsquo;s only intermittently failing.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>GitLab Copy &amp; Paste: Added Backticks</title>
      <link>https://marco.ninja/blog/notes/technology/gitlab/gitlab-pasting-ticks/</link>
      <pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/gitlab/gitlab-pasting-ticks/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>Running Multiple Server Processes From One Script</title>
      <link>https://marco.ninja/blog/notes/technology/bash/running-multiple-server-processes-script/</link>
      <pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/bash/running-multiple-server-processes-script/</guid>
      <description>&lt;p&gt;Doing local development on a bunch of interconnected services I often want to start multiple long running server processes.&lt;/p&gt;
&lt;p&gt;This is the basic script I use for that.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>kubectx &amp; kubens</title>
      <link>https://marco.ninja/blog/notes/technology/k8s/kubectx-kubens/</link>
      <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/k8s/kubectx-kubens/</guid>
      <description>&lt;p&gt;When working with multiple Kubernetes clusters and namespaces switching context can be a chore.&lt;/p&gt;
&lt;p&gt;For this I enjoy using &lt;a href=&#34;https://github.com/ahmetb/kubectx&#34;&gt;kubectx and kubens&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;They can be installed using &lt;code&gt;kubectl krew&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl krew install ctx
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kubectl krew install ns
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;










&lt;div class=&#34;notice&#34; style=&#34;border-color: #2060df;&#34;&gt;
  
  &lt;div&gt;
    
    &lt;i class=&#34;las la-info-circle la-lg&#34;&gt;&lt;/i&gt;
    
    I&amp;rsquo;ve since switched to [[kubeswitch]], which works much nicer for me.
  &lt;/div&gt;
&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Simple Redirect View for Django</title>
      <link>https://marco.ninja/blog/notes/technology/django/django-simple-redirect-view/</link>
      <pubDate>Thu, 02 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/django/django-simple-redirect-view/</guid>
      <description>&lt;p&gt;I often find myself replacing an existing MVP based on static html with a Django app,
or just needing to preserve some old URL scheme.&lt;/p&gt;
&lt;p&gt;This is the code I use to do that:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; title=&#34;views.py&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;django.shortcuts&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;redirect&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00b1f7&#34;&gt;redirect_view&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;request&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;redirectable&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;permanent&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;True&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;redirect&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;redirectable&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which can then be used like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; title=&#34;urls.py&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;django.urls&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;views&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;urlpatterns&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#aa89ea&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;old-url/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;views&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;redirect_view&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;redirectable&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;new_view&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#aa89ea&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;some-thing/&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;views&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;redirect_view&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;redirectable&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;some_thing_new&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;permanent&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;False&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;}),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Cleanup After Script Exit</title>
      <link>https://marco.ninja/blog/notes/technology/linux/cleanup-after-script-exit/</link>
      <pubDate>Tue, 03 Sep 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/cleanup-after-script-exit/</guid>
      <description>&lt;p&gt;Many of my scripts work with temporary files, usually relative to the scripts directory&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;,
while at the same time using &lt;code&gt;set -e&lt;/code&gt; to exit as soon as something fails.&lt;/p&gt;
&lt;p&gt;In this scenario the script leaves behind these temporary files by default, which is not desirable.&lt;/p&gt;
&lt;p&gt;We can however do a proper cleanup using the &lt;code&gt;trap&lt;/code&gt; concept.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>iperf Cheatsheet</title>
      <link>https://marco.ninja/blog/notes/technology/iperf/iperf-cheatsheet/</link>
      <pubDate>Tue, 30 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/iperf/iperf-cheatsheet/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>Vault CLI in Containers</title>
      <link>https://marco.ninja/blog/notes/technology/vault/vault-cli-in-containers/</link>
      <pubDate>Thu, 25 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/vault/vault-cli-in-containers/</guid>
      <description>&lt;p&gt;In many CI/CD workflows interfacing with Hashicorp Vault is required.&lt;/p&gt;
&lt;p&gt;However, their CLI (or better called unified binary&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;) is stupidly big with more than 400MB
and they seem to have no interest in making it any smaller&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;This is often a undesired size increase, especially when optimizing for pull and run time in CI/CD.&lt;/p&gt;
&lt;p&gt;This note outlines a solution that brings us down from 400MB+ on disk for &lt;code&gt;vault&lt;/code&gt; to about 300KB using &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Caddy</title>
      <link>https://marco.ninja/blog/notes/technology/caddy/caddy/</link>
      <pubDate>Sat, 13 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/caddy/caddy/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>Caddy: Manual Maintenance Mode</title>
      <link>https://marco.ninja/blog/notes/technology/caddy/caddy-manual-maintenance-mode/</link>
      <pubDate>Sat, 13 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/caddy/caddy-manual-maintenance-mode/</guid>
      <description>&lt;p&gt;Coming from NGINX and others the concept of a maintenance mode that can be manually enabled is something I have used many times before.&lt;/p&gt;
&lt;p&gt;With Caddy it is equally as easy, just using a less obvious syntax.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Find files and folders with spaces</title>
      <link>https://marco.ninja/blog/notes/technology/find/find-files-and-folders-with-spaces/</link>
      <pubDate>Thu, 27 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/find/find-files-and-folders-with-spaces/</guid>
      <description>&lt;p&gt;On Linux/Unix/MacOS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find . &lt;span style=&#34;color:#abb2bf&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;Get-ChildItem&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Path&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Recurse&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Filter&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;* *&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;Format-Table&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;FullName&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>PicoCSS Sticky Footer</title>
      <link>https://marco.ninja/blog/notes/technology/css/picocss-sticky-footer/</link>
      <pubDate>Mon, 10 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/css/picocss-sticky-footer/</guid>
      <description>&lt;p&gt;A sticky footer using [[picocss]]&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;html&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;body&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;height&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#d19a66&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;vh&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;body&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;footer&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;position&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;sticky&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;top&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#d19a66&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;vh&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>HaProxy: Think About DNS Resolution</title>
      <link>https://marco.ninja/blog/notes/technology/haproxy/haproxy-think-about-dns-resolution/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/haproxy/haproxy-think-about-dns-resolution/</guid>
      <description>&lt;p&gt;By default HAProxy resolves all DNS names in it&amp;rsquo;s config on startup and then never again.&lt;/p&gt;
&lt;p&gt;This might cause issues down the road if DNS records, for example the ones for backends, change.&lt;/p&gt;
&lt;p&gt;This section of the documentation is a good starting point as it describes IP address resolution using DNS in HAProy really well:
&lt;a href=&#34;https://docs.haproxy.org/3.0/configuration.html#5.3&#34;&gt;https://docs.haproxy.org/3.0/configuration.html#5.3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Additionally this guide can also be helpful:
&lt;a href=&#34;https://www.haproxy.com/documentation/haproxy-configuration-tutorials/dns-resolution/&#34;&gt;https://www.haproxy.com/documentation/haproxy-configuration-tutorials/dns-resolution/&lt;/a&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Renovate Bot: Limit Manager To Folder (Ignore Paths)</title>
      <link>https://marco.ninja/blog/notes/technology/renovate-bot/renovate-bot-limit-manager/</link>
      <pubDate>Tue, 04 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/renovate-bot/renovate-bot-limit-manager/</guid>
      <description>&lt;p&gt;When using &lt;a href=&#34;https://github.com/renovatebot/renovate&#34;&gt;Renovate&lt;/a&gt; it can sometimes be required
to run a specific manager only on a sub-set of the matching files.&lt;/p&gt;
&lt;p&gt;Naively you might expect this to be achieved by overwriting the &lt;code&gt;fileMatch&lt;/code&gt; property of the manager.
However this is not possible, as &lt;a href=&#34;https://docs.renovatebot.com/configuration-options/#filematch&#34;&gt;this property gets merged together&lt;/a&gt;,
effectively meaning we can only append to it, not replace it.&lt;/p&gt;
&lt;p&gt;What I found working is an approach using either &lt;code&gt;includePaths&lt;/code&gt; or &lt;code&gt;ignorePaths&lt;/code&gt;, depending on the situation.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>JQ Cheatsheet</title>
      <link>https://marco.ninja/blog/notes/technology/jq/jq-cheatsheet/</link>
      <pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/jq/jq-cheatsheet/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>sed: Delimiter Issues</title>
      <link>https://marco.ninja/blog/notes/technology/sed/sed-delimiter-issues/</link>
      <pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/sed/sed-delimiter-issues/</guid>
      <description>&lt;p&gt;When doing variable substitution with sed things break if the value contains the delimiter used by sed.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Interactive Containers Cheatsheet</title>
      <link>https://marco.ninja/blog/notes/technology/containers/interactive-containers-cheatsheet/</link>
      <pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/containers/interactive-containers-cheatsheet/</guid>
      <description>&lt;p&gt;Most of these should work the same with any OCI compliant client.
Tested with &lt;code&gt;podman&lt;/code&gt; and &lt;code&gt;docker&lt;/code&gt;, unless otherwise indicated.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Run container interactively&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;podman run -it IMAGE:TAG SHELL
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# With auto removing the container on exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;podman run -it --rm IMAGE:TAG SHELL
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# With current working dir mounted to container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;podman run -it -v &lt;span style=&#34;color:#98c379&#34;&gt;${&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;PWD&lt;/span&gt;&lt;span style=&#34;color:#98c379&#34;&gt;}&lt;/span&gt;:/tmp/host-dir/ IMAGE:TAG SHELL
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Detaching from the interactive session&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Keybinding: Ctrl+P, then Ctrl+Q&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Attaching to a container&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;podman attach &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;ID OR NAME&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Windows 11: Taskbar</title>
      <link>https://marco.ninja/blog/notes/technology/windows/windows-11-taskbar/</link>
      <pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/windows/windows-11-taskbar/</guid>
      <description>&lt;p&gt;For some reason Microsoft, in their infinite wisdom, decided to no longer support moving the taskbar to other edges of the screen with Windows 11.&lt;/p&gt;
&lt;p&gt;Using a utility like &lt;a href=&#34;https://github.com/valinet/ExplorerPatcher&#34;&gt;ExplorerPatcher&lt;/a&gt; the whole task bar can be reverted to something close to Windows 10,
including moving it to all screen edges.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Bash: Find All Folders Containing File With Name</title>
      <link>https://marco.ninja/blog/notes/technology/bash/bash-find-all-folders-containing-file-with-name/</link>
      <pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/bash/bash-find-all-folders-containing-file-with-name/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;fileName&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;my-file.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find . -type f -name &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$fileName&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; -printf &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;%h\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Managing Multiple Kube Config Files</title>
      <link>https://marco.ninja/blog/notes/technology/k8s/managing-multiple-kube-config-files/</link>
      <pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/k8s/managing-multiple-kube-config-files/</guid>
      <description>&lt;p&gt;This is a simple script that takes multiple kube config files and deeply merges them into one.&lt;/p&gt;











&lt;div class=&#34;notice&#34; style=&#34;border-color: #2060df;&#34;&gt;
  
  &lt;div&gt;
    
    &lt;i class=&#34;las la-info-circle la-lg&#34;&gt;&lt;/i&gt;
    
    I&amp;rsquo;ve since switched to [[kubeswitch]], which works much cleaner than this home-grown script.
  &lt;/div&gt;
&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Working With Dates in Bash and Other Shells</title>
      <link>https://marco.ninja/blog/notes/technology/linux/working-with-dates-in-bash-and-other-shells/</link>
      <pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/working-with-dates-in-bash-and-other-shells/</guid>
      <description>&lt;p&gt;Often times we need the current date (and time) when scripting inside bash or other shells.
For example when creating a backup file or writing to a log.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Wait for Port to Close Using Ansible</title>
      <link>https://marco.ninja/blog/notes/technology/ansible/ansible-wait-for-port-to-close/</link>
      <pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/ansible/ansible-wait-for-port-to-close/</guid>
      <description>&lt;p&gt;Sometimes it is useful to wait for a port to be closed, for example when updating an app that can&amp;rsquo;t always properly be shut down using other Ansible modules.&lt;/p&gt;
&lt;p&gt;This can easily be achieved using the &lt;code&gt;ansible.builtin.wait_for&lt;/code&gt; or &lt;code&gt;ansible.builtin.win_wait_for&lt;/code&gt; module.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>PicoCSS</title>
      <link>https://marco.ninja/blog/notes/technology/css/picocss/</link>
      <pubDate>Sat, 10 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/css/picocss/</guid>
      <description>&lt;p&gt;My preferred minimalistic CSS framework, which is usually enough for small websites and even simple SaaS apps.
It feels like a super power to write almost plain HTML and get something that looks presentable,
supports dark mode and has just enough components to cover most use cases for me.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Navigate to Script Directory</title>
      <link>https://marco.ninja/blog/notes/technology/linux/navigate-to-script-directory/</link>
      <pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/navigate-to-script-directory/</guid>
      <description>&lt;p&gt;Often times when writing scripts I want to reference files in the same directory,
but keep the script portable in case it is part of a git repository being checked out somewhere else
or just the folder getting moved.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>My First Show Hacker News</title>
      <link>https://marco.ninja/blog/posts/2024/01/19/my-first-show-hacker-new/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2024/01/19/my-first-show-hacker-new/</guid>
      <description>&lt;p&gt;A while back I built &lt;a href=&#34;https://tech-playground.com&#34;&gt;tech-playground.com&lt;/a&gt;, which I describe like this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A playground that runs your config on real servers for you,
a bit like CodePen for server tech.&lt;/p&gt;&lt;/blockquote&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Show Size of Elements Using JavaScript</title>
      <link>https://marco.ninja/blog/notes/technology/javascript/show-size-of-elements-using-javascript/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/javascript/show-size-of-elements-using-javascript/</guid>
      <description>&lt;p&gt;I was recently doing a lot of layouting pages to later be printed, so showing how big certain elements are was of help to me.&lt;/p&gt;
&lt;p&gt;This is a JavaScript function that does just that.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Spread Elements Vertically Using CSS</title>
      <link>https://marco.ninja/blog/notes/technology/css/spread-elements-vertically-using-css/</link>
      <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/css/spread-elements-vertically-using-css/</guid>
      <description>&lt;p&gt;Using &lt;code&gt;flex&lt;/code&gt; children can easily be positioned vertically in their parent container.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Debugging CSS Layouts</title>
      <link>https://marco.ninja/blog/notes/technology/css/debugging-css-layouts/</link>
      <pubDate>Wed, 17 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/css/debugging-css-layouts/</guid>
      <description>&lt;p&gt;When debugging issues with CSS layouts it can sometimes be tricky to really understand what is going on.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Simple Copy Button Using JavaScript</title>
      <link>https://marco.ninja/blog/notes/technology/javascript/simple-copy-button/</link>
      <pubDate>Tue, 16 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/javascript/simple-copy-button/</guid>
      <description>&lt;p&gt;I often find myself wanting a simple copy button in my web projects.&lt;/p&gt;
&lt;p&gt;This is the recipe I build them from using &lt;a href=&#34;https://clipboardjs.com&#34;&gt;clipboard.js&lt;/a&gt; and a couple lines of JavaScript.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Generate link in plain text element using JavaScript</title>
      <link>https://marco.ninja/blog/notes/technology/javascript/generate-links-in-plain-text-element/</link>
      <pubDate>Sun, 17 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/javascript/generate-links-in-plain-text-element/</guid>
      <description>&lt;p&gt;Sometimes, when working with externally generated content you might want to make links clickable when rendering it in the client.&lt;/p&gt;
&lt;p&gt;This is a snippet to do just that.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Debugging Container Workloads</title>
      <link>https://marco.ninja/blog/posts/2023/12/04/debugging-container-workloads-helper/</link>
      <pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/12/04/debugging-container-workloads-helper/</guid>
      <description>&lt;p&gt;Debugging container workloads can be a challenge sometimes, especially when running them in k8s,
behind a reverse proxy or in other, possibly complex, traffic flow scenarios.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Register all models with Django admin</title>
      <link>https://marco.ninja/blog/notes/technology/django/django-register-all-models-with-admin/</link>
      <pubDate>Thu, 16 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/django/django-register-all-models-with-admin/</guid>
      <description>&lt;p&gt;Sometimes, mostly when throwing together a quick idea or MVP, it can be useful to just register all models with the admin
and leave proper customization for later.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Add fields to list with Kustomize</title>
      <link>https://marco.ninja/blog/notes/technology/kustomize/kustomize-add-fields-to-list/</link>
      <pubDate>Wed, 18 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/kustomize/kustomize-add-fields-to-list/</guid>
      <description>&lt;p&gt;How to add things to a list using kustomize.
This is useful for example when you need to patch additional environment variables into a pod.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>CLI fuzzy search</title>
      <link>https://marco.ninja/blog/notes/technology/search/cli-fuzzy-search/</link>
      <pubDate>Sun, 08 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/search/cli-fuzzy-search/</guid>
      <description>&lt;p&gt;I often whish to search through large bodies of text, like my knowledge base or source code repositories, from the command line.&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&#34;https://github.com/Magnushhoie/fuz&#34;&gt;fuz&lt;/a&gt; for this and I&amp;rsquo;m quite happy with it.&lt;/p&gt;
&lt;p&gt;I also have it aliased to my knowledge base folder for even easier searching.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;alias&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;search&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;fuz -p /path/to/knowledge-base/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Copy &amp; Paste Is Dangerous</title>
      <link>https://marco.ninja/blog/posts/2023/10/07/copy-paste-is-dangerous/</link>
      <pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/10/07/copy-paste-is-dangerous/</guid>
      <description>&lt;p&gt;Copy &amp;amp; paste from untrusted sources on the internet into the terminal is a &lt;strong&gt;really bad idea&lt;/strong&gt;!
Early in my career I did it too and still often see others doing it.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Render Plain HTML with Hugo</title>
      <link>https://marco.ninja/blog/notes/technology/hugo/hugo-render-plain-html/</link>
      <pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/hugo/hugo-render-plain-html/</guid>
      <description>&lt;p&gt;Hugo is my favorite tool for publishing markdown to the internet,
but sometimes I want to do something a little bit more advanced with my posts.&lt;/p&gt;
&lt;p&gt;With this shortcode I can always just fall back to plain old HTML.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hugo Details Shortcode</title>
      <link>https://marco.ninja/blog/notes/technology/hugo/hugo-details-shortcode/</link>
      <pubDate>Fri, 06 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/hugo/hugo-details-shortcode/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details&#34;&gt;HTML details element&lt;/a&gt;
is a nice way to create natively expandable content with wide browser support.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Ansible and cowsay</title>
      <link>https://marco.ninja/blog/notes/technology/ansible/ansible-cowsay/</link>
      <pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/ansible/ansible-cowsay/</guid>
      <description>&lt;p&gt;Cowsay is one of those packages you just end up installing randomly on just about any client over time.&lt;/p&gt;
&lt;p&gt;And if your using ansible you may be in for a little surprise:&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Django: CSRF exempt view</title>
      <link>https://marco.ninja/blog/notes/technology/django/django-csrf-exempt-view/</link>
      <pubDate>Sun, 17 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/django/django-csrf-exempt-view/</guid>
      <description>&lt;p&gt;Django&amp;rsquo;s &lt;a href=&#34;https://docs.djangoproject.com/en/4.2/ref/csrf/&#34;&gt;CSRF protection&lt;/a&gt; is usually a great thing,
but when building (API) endpoints meant to be accessed by scripts/third parties it gets in the way of that.&lt;/p&gt;
&lt;p&gt;This is how to disable it:&lt;/p&gt;
&lt;h2 id=&#34;for-a-class-based-view&#34;&gt;For a class based view&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;django.utils.decorators&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;method_decorator&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;django.views.decorators.csrf&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;csrf_exempt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;@method_decorator&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;csrf_exempt&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#98c379&#34;&gt;&amp;#39;dispatch&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;MyView&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;View&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;for-a-function-based-view&#34;&gt;For a function based view&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;django.views.decorators.csrf&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;csrf_exempt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;@csrf_exempt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00b1f7&#34;&gt;my_view&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;request&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>My Publishing Pipeline</title>
      <link>https://marco.ninja/blog/posts/2023/08/25/my-publishing-pipeline/</link>
      <pubDate>Fri, 25 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/08/25/my-publishing-pipeline/</guid>
      <description>&lt;p&gt;I write an extensive personal knowledge base using markdown, code-server and a variety of other tools.
Originally, in 2021, I wanted to have something like &lt;a href=&#34;https://obsidian.md/publish&#34;&gt;Obsidian Publish&lt;/a&gt; but self-hosted, so I created it.&lt;/p&gt;
&lt;p&gt;Over time my knowledge base evolved more into a second brain, tracking not only my technical notes and journal, but also things like recipes and hikes.
With this my publishing pipeline, and the script at it&amp;rsquo;s core, extended in a multitude of ways.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>The (MVP) Making of PodHistory</title>
      <link>https://marco.ninja/blog/posts/2023/08/06/the-making-of-podhistory/</link>
      <pubDate>Sun, 06 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/08/06/the-making-of-podhistory/</guid>
      <description>&lt;p&gt;In this post I share my process for building the MVP for &lt;a href=&#34;https://podhistory.com&#34;&gt;PodHistory&lt;/a&gt;,
from idea to launched product and what my next steps will be.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Helm: Join two lists</title>
      <link>https://marco.ninja/blog/notes/technology/helm/helm-join-lists/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/helm/helm-join-lists/</guid>
      <description>&lt;p&gt;Since early 2019 the &lt;code&gt;sprig&lt;/code&gt; library used by &lt;code&gt;helm&lt;/code&gt; provides a &lt;a href=&#34;https://helm.sh/docs/chart_template_guide/function_list/#concat&#34;&gt;&lt;code&gt;concat&lt;/code&gt;&lt;/a&gt; function that does exactly this.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Simple Self Organization</title>
      <link>https://marco.ninja/blog/posts/2023/06/18/simple-self-organization/</link>
      <pubDate>Sun, 18 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/06/18/simple-self-organization/</guid>
      <description>&lt;p&gt;This is a guide to a simple self organization/task management system I built for myself over the years.&lt;/p&gt;
&lt;p&gt;From time to time I showed it to someone and they got some benefits from it, most adapted it to better fit their needs down the line,
which is exactly what you should do with any kind of personal task management in my opinion.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>HTMX</title>
      <link>https://marco.ninja/blog/notes/technology/htmx/htmx/</link>
      <pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/htmx/htmx/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://htmx.org/&#34;&gt;Go check out their website, it&amp;rsquo;s incredibly good at explaining itself.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To me, a backend heavy developer, HTMX is the frontend framework I like to use because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It does not feel like a JavaScript framework at all, but more like an extension of the HTTP/HTML model&lt;/li&gt;
&lt;li&gt;It allows me to write interfaces that feel responsive and modern to users while still doing all the heavy lifting in my backend with the tools I&amp;rsquo;m used to&lt;/li&gt;
&lt;li&gt;It works with my mental model, which is heavily based on the request-response cycle&lt;/li&gt;
&lt;/ul&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Handling signals with Python</title>
      <link>https://marco.ninja/blog/notes/technology/python/python-handling-signals/</link>
      <pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/python/python-handling-signals/</guid>
      <description>&lt;p&gt;When building a Python script that is long running or has to manage some state on termination it is helpful to handle a couple of signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SIGINT&lt;/code&gt;: The signal sent when pressing Ctrl+C&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SIGTERM&lt;/code&gt; and &lt;code&gt;SIGQUIT&lt;/code&gt;: Meant to terminate the process, sent by &lt;code&gt;kill&lt;/code&gt; and process managers like systemd or supervisord&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Handling them is possible with Pythons &lt;code&gt;signals&lt;/code&gt; library:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;signals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#ca72ff&#34;&gt;SignalHandler&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#aa89ea&#34;&gt;stop&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00b1f7&#34;&gt;__init__&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Ctrl+C&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;SIGINT&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;exit_gracefully&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Supervisor/process manager signals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;SIGTERM&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;exit_gracefully&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;signal&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;SIGQUIT&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;exit_gracefully&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#00b1f7&#34;&gt;exit_gracefully&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;args&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e5c07b&#34;&gt;self&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;stop&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;example-1-simple-loop&#34;&gt;Example 1: Simple loop&lt;/h2&gt;
&lt;p&gt;The simplest example is using the &lt;code&gt;SignalHandler&lt;/code&gt; as the condition on the loop
and have code to stop gracefully below the loop.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hack Things Together</title>
      <link>https://marco.ninja/blog/posts/2023/04/27/hack-things-together/</link>
      <pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/04/27/hack-things-together/</guid>
      <description>&lt;p&gt;Sometimes you have to do a specific task and you are fully capable of doing it manually,
however those tasks are also great to flex your muscles and hack something together.&lt;/p&gt;
&lt;p&gt;They can be an excellent tool to sharpen your skills with the tools you use regularly,
and improve your quick prototyping skills.&lt;/p&gt;
&lt;p&gt;In addition, with a couple of iterations, again sharpening an important skill, you could afterwards create a more general purpose tool from a hacky script.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>My home office setup: 2023 edition</title>
      <link>https://marco.ninja/blog/notes/misc/my-home-office-setup-2023/</link>
      <pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/my-home-office-setup-2023/</guid>
      <description>&lt;p&gt;Since I spend more than 8 hours here most days I created a nice setup for myself.
Thankfully I have a whole room just for my home office, so I take full advantage of that.&lt;/p&gt;
&lt;p&gt;Besides my &lt;a href=&#34;#main-desk&#34;&gt;main desk&lt;/a&gt; I have a &lt;a href=&#34;#secondary-desk&#34;&gt;secondary desk&lt;/a&gt;,
a couch, a couple of sideboards, a wall mounted whiteboard and a couple of shelves to display all the techy and nerdy things.&lt;/p&gt;
&lt;h2 id=&#34;main-desk&#34;&gt;Main desk&lt;/h2&gt;
&lt;p&gt;My main desk is a custom build based on a &lt;a href=&#34;https://amzn.to/3LjRY2X&#34;&gt;FlexiSpot height adjustable electric frame&lt;/a&gt;.
The tabletop is a 180x80x2.5cm pressed wood panel in a dark gray concrete look.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Enable system extensions on Apple silicon Mac</title>
      <link>https://marco.ninja/blog/notes/technology/macos/enable-system-extensions-apple-silicon/</link>
      <pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/macos/enable-system-extensions-apple-silicon/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Think before you enable this, it could be a security risk&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shutdown Mac&lt;/li&gt;
&lt;li&gt;Press and hold the power button until the Recovery Mode menu appears&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Options&lt;/code&gt;, then click &lt;code&gt;Continue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;From the &lt;code&gt;Utilities&lt;/code&gt; menu select &lt;code&gt;Startup Security Utility&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select your startup disk and click &lt;code&gt;Security Policy&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Choose &lt;code&gt;Reduced Security&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check the option &lt;code&gt;Allow user management of kernel extensions from identified developers&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>DigitalOcean CLI Cheat Sheet</title>
      <link>https://marco.ninja/blog/notes/technology/digitalocean/doctl-cheatsheet/</link>
      <pubDate>Sat, 15 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/digitalocean/doctl-cheatsheet/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>My Thoughts on AI in Blogging</title>
      <link>https://marco.ninja/blog/posts/2023/04/04/thoughts-on-ai-in-blogging/</link>
      <pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/04/04/thoughts-on-ai-in-blogging/</guid>
      <description>&lt;p&gt;Given the recent rise in text-based language models, sometimes called AI tools, I wanted to share my thoughts and experiences in using them,
especially in the context of blogging.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>My hiking kit: 2023 edition</title>
      <link>https://marco.ninja/blog/notes/misc/my-hiking-kit-2023/</link>
      <pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/my-hiking-kit-2023/</guid>
      <description>&lt;p&gt;These days I enjoy hiking quite a lot.
To make it easier to just &amp;ldquo;pick up the pack and go&amp;rdquo; I created two basic packs that are optimized for my needs
and the environment I&amp;rsquo;m usually hiking in, the &lt;a href=&#34;https://en.wikipedia.org/wiki/Swabian_Jura&#34;&gt;Swabian Alps&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;basics&#34;&gt;Basics&lt;/h2&gt;
&lt;p&gt;I have some basics I duplicated and carry in both my packs, these are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pen &amp;amp; paper&lt;/li&gt;
&lt;li&gt;Multitool&lt;/li&gt;
&lt;li&gt;Mini first aid kit in a ziploc bag
&lt;ul&gt;
&lt;li&gt;Paracetamol&lt;/li&gt;
&lt;li&gt;Band aids&lt;/li&gt;
&lt;li&gt;Gel sanitizer&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Foam pad&lt;/li&gt;
&lt;li&gt;Waterproof poncho&lt;/li&gt;
&lt;li&gt;A bit of cash, usually around 20-30€ these days&lt;/li&gt;
&lt;li&gt;A piece of paper with my and my emergency contacts information&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://amzn.to/3KpMtPS&#34;&gt;Fisherman&amp;rsquo;s Friend&lt;/a&gt; for a fresh feeling and honestly because my parents had them when we were hiking&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prepared-packs&#34;&gt;Prepared packs&lt;/h2&gt;
&lt;h3 id=&#34;small-pack&#34;&gt;Small pack&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m currently using a &lt;a href=&#34;https://amzn.to/3nBxqtn&#34;&gt;Terra Peak Flex 20l&lt;/a&gt; in red for my smaller backpack.
It&amp;rsquo;s a nice size for shorter hikes and fits me well.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>What to Do With Your Own Server</title>
      <link>https://marco.ninja/blog/posts/2023/03/19/what-to-do-with-your-own-server/</link>
      <pubDate>Sun, 19 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/03/19/what-to-do-with-your-own-server/</guid>
      <description>&lt;p&gt;Now that we have talked about the benefits of running your own server
and how to run your own server let&amp;rsquo;s take a look at some things you could run on your own personal server
and some things you should better not.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>How to Run Your Own Server</title>
      <link>https://marco.ninja/blog/posts/2023/03/18/how-to-run-your-own-server/</link>
      <pubDate>Sat, 18 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/03/18/how-to-run-your-own-server/</guid>
      <description>&lt;p&gt;There are many ways to run your own server, from setting up a Raspberry Pi on your desk to renting a physical server at a provider.&lt;/p&gt;
&lt;p&gt;In this post, we will focus on setting up a virtual server with DigitalOcean, which is one of the easiest ways to get started.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Benefits of Running Your Own Server</title>
      <link>https://marco.ninja/blog/posts/2023/03/17/benefits-of-running-your-own-server/</link>
      <pubDate>Fri, 17 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/03/17/benefits-of-running-your-own-server/</guid>
      <description>&lt;p&gt;In the world of technology, we are moving further and further away from operating directly on servers,
but there are still significant benefits to be gained from running a personal server.&lt;/p&gt;
&lt;p&gt;I have been running some kind of personal server for many years now and I strongly believe anyone working in technology can benefit greatly from doing so.
Here&amp;rsquo;s why:&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>The (MVP) Making of Honeypot Login</title>
      <link>https://marco.ninja/blog/posts/2023/03/12/the-making-of-honeypot-login/</link>
      <pubDate>Sun, 12 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2023/03/12/the-making-of-honeypot-login/</guid>
      <description>&lt;p&gt;In this post I will go over the MVP building phase of &lt;a href=&#34;https://honeypot-login.de&#34;&gt;Honeypot Login&lt;/a&gt;,
from idea to launched product and what my next steps will be.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>1Password CLI Cheatsheet</title>
      <link>https://marco.ninja/blog/notes/technology/1password-cli-cheatsheet/</link>
      <pubDate>Wed, 01 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/1password-cli-cheatsheet/</guid>
      <description>&lt;p&gt;The 1Password CLI &lt;code&gt;op&lt;/code&gt; works either in connection with a client app, like on the Mac,
or standalone, useful on a server.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Login&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;eval&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;$(&lt;/span&gt;op signin&lt;span style=&#34;color:#76a9f9&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Get favorites&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;op item list --vault &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Private&amp;#34;&lt;/span&gt; --favorite
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Get a specific item&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;op item get &amp;lt;ID&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# !! Important: Sign out at the end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;op signout
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;some-helper-functions&#34;&gt;Some helper functions&lt;/h2&gt;
&lt;p&gt;Helpers to more easily work with the &lt;code&gt;op&lt;/code&gt; cli.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1login&lt;span style=&#34;color:#54b1c7&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e5c07b&#34;&gt;eval&lt;/span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;$(&lt;/span&gt;op signin&lt;span style=&#34;color:#76a9f9&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;alias&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;1signout&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;op signout&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1search&lt;span style=&#34;color:#54b1c7&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dcaeea&#34;&gt;term&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;[&lt;/span&gt; -n &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$2&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#dcaeea&#34;&gt;vault&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$2&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#dcaeea&#34;&gt;vault&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Private&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e5c07b&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Searching for &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$term&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#39; in vaut &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$vault&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    op item list --vault &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$vault&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; --long &lt;span style=&#34;color:#abb2bf&#34;&gt;|&lt;/span&gt; grep &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$term&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; --ignore-case
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;1get&lt;span style=&#34;color:#54b1c7&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    op item get &lt;span style=&#34;color:#dcaeea&#34;&gt;$*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Being a good code reviewee</title>
      <link>https://marco.ninja/blog/notes/technology/being-a-good-code-reviewee/</link>
      <pubDate>Fri, 13 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/being-a-good-code-reviewee/</guid>
      <description>&lt;p&gt;Things I do to be a good code reviewee.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>yamllint error: &#34;invalid config: ignore should contain file patterns&#34;</title>
      <link>https://marco.ninja/blog/notes/technology/yamllint/yamllint-ignore-should-contain-file-patterns/</link>
      <pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/yamllint/yamllint-ignore-should-contain-file-patterns/</guid>
      <description>&lt;p&gt;Setting up a new repository for YAML linting today I was running in a bit of an issue with &lt;a href=&#34;https://github.com/adrienverge/yamllint&#34;&gt;yamllint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was using a YAML list to specify ingores, as mentioned in the documentation:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;ignore&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;*.dont-lint-me.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;/bin/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;!/bin/*.lint-me-anyway.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This however did not work with the above mentioned error message.
After &lt;strong&gt;a lot&lt;/strong&gt; of debugging I found that they released a new version recently which introduced this feature.&lt;/p&gt;
&lt;p&gt;My solution was to update my locally build container image to the latest version, as of writing &lt;code&gt;1.29.0&lt;/code&gt;, in which this feature is introduced.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hy-Fit App by Tenswall no longer working</title>
      <link>https://marco.ninja/blog/notes/misc/hy-fit-app-not-working/</link>
      <pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/hy-fit-app-not-working/</guid>
      <description>&lt;p&gt;This is somewhere between a rant about the app and backing services no longer working, a collection of information I could find out about it
and a possible search-result for others facing the same issues and not really finding anything online just like me.&lt;/p&gt;
&lt;h2 id=&#34;update-march-2023&#34;&gt;Update: March 2023&lt;/h2&gt;
&lt;p&gt;The company seems to no longer exist.&lt;/p&gt;
&lt;p&gt;I have switched to the eufy smart scales, which are made by Anker, a reputable manufacturer.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>ArgoCD Python Client</title>
      <link>https://marco.ninja/blog/notes/technology/argocd/argocd-python-client/</link>
      <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/argocd/argocd-python-client/</guid>
      <description>&lt;p&gt;A simple Python client to interact with ArgoCD.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>WSL2 &amp; Keychain</title>
      <link>https://marco.ninja/blog/notes/technology/windows/wsl-keychain/</link>
      <pubDate>Thu, 08 Dec 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/windows/wsl-keychain/</guid>
      <description>&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;
&lt;p&gt;If you use ssh-agent with an encrypted ssh key it does not persist when you open a new terminal window.&lt;/p&gt;
&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;keychain&lt;/code&gt; instead.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install keychain
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Add to your shells rc file, eg. &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;# Repeat this line for all keys you want to unlock and use this way&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/usr/bin/keychain -q --nogui &lt;span style=&#34;color:#dcaeea&#34;&gt;$HOME&lt;/span&gt;/.ssh/id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;source&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$HOME&lt;/span&gt;/.keychain/wsl-sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Unlock your keys on shell startup and enjoy&lt;/li&gt;
&lt;/ol&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>My Tools</title>
      <link>https://marco.ninja/blog/notes/misc/tools/</link>
      <pubDate>Fri, 25 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/tools/</guid>
      <description>&lt;p&gt;Tools I use and recommend.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://try.carrd.co/r2pmz8s5&#34;&gt;carrd.co&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Extremely simple and affordable website publishing, I use it for landing pages and quick MVPs&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://m.do.co/c/540e180fe892&#34;&gt;DigitalOcean&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My first choice for personal servers and simple MVP deployments with their App Platform&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://gitlab.com&#34;&gt;GitLab.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My go-to git-server and allrounder CI/CD, both on premise in the enterprise and in the cloud for my own projects&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://eu.pythonanywhere.com/?affiliate_id=00007ea7&#34;&gt;PythonAnywhere&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They provide a great service, best described as a PHP-webspace, but for Python&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Self-Hosted Notifications</title>
      <link>https://marco.ninja/blog/posts/2022/11/01/self-hosted-notifications/</link>
      <pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/11/01/self-hosted-notifications/</guid>
      <description>&lt;p&gt;Running any kind of personal infrastructure sometimes requires your attention based on certain events or failure states,
no matter how much you automate tasks.&lt;/p&gt;
&lt;p&gt;Over the years I have used E-Mail, Telegram bots and a variety of other tools for this purpose.
However all of them have the drawback that they mix with other kinds of information and are not easilly usable in scripts.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Audible book export</title>
      <link>https://marco.ninja/blog/notes/misc/audible-book-export/</link>
      <pubDate>Mon, 24 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/audible-book-export/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>A list of interesting things</title>
      <link>https://marco.ninja/blog/notes/misc/interesting-things/</link>
      <pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/interesting-things/</guid>
      <description>&lt;p&gt;This is a list of interesting blog posts, talks and such things that I found over the years.&lt;/p&gt;
&lt;p&gt;Some of them may teach you something relevant, some may just further your general understanding of tech.
From personal experience they can lead you down the rabbit hole really fast, enjoy with care!&lt;/p&gt;
&lt;h2 id=&#34;talks&#34;&gt;Talks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/3QEoJRjxnxQ?t=534&#34;&gt;Why web tech is like this&lt;/a&gt; by Steve Sanderson&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=lfZU98rtnLE&#34;&gt;Learning from Disaster&lt;/a&gt; by Ian Hughes&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Av3QP940L2c&#34;&gt;Failure is Always an Option&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3LtQWxhqjqI&#34;&gt;Architecture: The Stuff That&amp;rsquo;s Hard to Change&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=YPYks7lBKSY&#34;&gt;Computational Creativity&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=1jg1HqZKeKU&#34;&gt;How I built Rockstar: Parsing esoteric languages with .NET&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Vs1DWYrw2Ps&#34;&gt;Fractals, Factories and Fast Food&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=001SxQCEuv8&#34;&gt;The cost of code&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=6avJHaC3C2U&#34;&gt;The Art of Code&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=8JOD1AQGqEg&#34;&gt;The Web That Never Was&lt;/a&gt; by Dylan Beattie&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=y4GB_NDU43Q&#34;&gt;The (Fictional) Day Google Forgot To Check Passwords&lt;/a&gt; by Tom Scott&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/playlist?list=PL96C35uN7xGLLeET0dOWaKHkAlPsrkcha&#34;&gt;The Basics (Playlist)&lt;/a&gt; by Tom Scott&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;blog-posts&#34;&gt;Blog posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.lkhrs.com/blog/2022/04/easier-static-site-publishing/&#34;&gt;How to make static site publishing easier&lt;/a&gt; by Luke Harris&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://spookylukey.github.io/django-views-the-right-way/&#34;&gt;Django Views - The Right Way&lt;/a&gt; by Luke Plant&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell&#34;&gt;The yaml document from hell&lt;/a&gt; by Ruud van Asseldonk&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://adamdrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html&#34;&gt;Command-line Tools can be 235x Faster than your Hadoop Cluster&lt;/a&gt; by Adam Drake&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lucvandonkersgoed.com/2023/07/26/a-failed-attempt-at-monetizing-technical-writing/&#34;&gt;A failed attempt at monetizing technical writing&lt;/a&gt; by Luc van Donkersgoed&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/RedditEng/comments/12hjkei/sre_a_day_in_the_life_over_the_years/&#34;&gt;SRE: A Day In The Life, Over The Years&lt;/a&gt; by By Anthony Sandoval of Reddit Engineering&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/RedditEng/comments/11xx5o0/you_broke_reddit_the_piday_outage/&#34;&gt;You Broke Reddit: The Pi-Day Outage&lt;/a&gt; by Jayme Howard of Reddit Engineering&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codefresh.io/blog/kubernetes-antipatterns-1/&#34;&gt;Kubernetes Deployment Antipatterns – part 1&lt;/a&gt; by Kostis Kapelonis&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codefresh.io/blog/how-to-model-your-gitops-environments-and-promote-releases-between-them/&#34;&gt;How to Model Your Gitops Environments and Promote Releases between Them&lt;/a&gt; by Kostis Kapelonis&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.stilldrinking.org/programming-sucks&#34;&gt;Programming Sucks&lt;/a&gt; by Peter Welch&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nickcraver.com/blog/2019/08/06/stack-overflow-how-we-do-app-caching/&#34;&gt;Stack Overflow: How We Do App Caching - 2019 Edition&lt;/a&gt; by Nick Craver&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;guides--books&#34;&gt;Guides &amp;amp; Books&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://spookylukey.github.io/django-views-the-right-way/&#34;&gt;Django Views - The Right Way&lt;/a&gt; by Luke Plant&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;other-things&#34;&gt;Other things&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lukeplant.me.uk/development-standards/&#34;&gt;Development Standards&lt;/a&gt; by Luke Plant&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neal.fun/password-game/&#34;&gt;The Password Game&lt;/a&gt; by Neal Agarwal&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ibiblio.org/harris/500milemail.html&#34;&gt;The case of the 500-mile email&lt;/a&gt; by Trey Harris&lt;/li&gt;
&lt;/ul&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Git: Add only changed files</title>
      <link>https://marco.ninja/blog/notes/technology/git/add-only-changed/</link>
      <pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/git/add-only-changed/</guid>
      <description>&lt;p&gt;Sometimes you may want to commit only the files you have changed and not any newly created files,
this can easily be achieved by this command: &lt;code&gt;git commit -a&lt;/code&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Post Mortems</title>
      <link>https://marco.ninja/blog/posts/2022/08/22/post-mortem-process/</link>
      <pubDate>Mon, 22 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/08/22/post-mortem-process/</guid>
      <description>&lt;p&gt;Incidents happen, and we can and should always learn from them,
to be better prepared for the next time things go wrong.&lt;/p&gt;
&lt;p&gt;A great tool to do that is the post-mortem, it is a process designed to recap the incident, learn from mistakes
and improve the system as a result.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Publish new post checklist</title>
      <link>https://marco.ninja/blog/notes/misc/publish-new-post-checklist/</link>
      <pubDate>Sun, 21 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/misc/publish-new-post-checklist/</guid>
      <description>&lt;p&gt;This is my checklist for publishing a new post on my blog:&lt;/p&gt;
&lt;h2 id=&#34;preparation&#34;&gt;Preparation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Finalize the posts name and sluggify it&lt;/li&gt;
&lt;li&gt;Pick a image if fitting&lt;/li&gt;
&lt;li&gt;Create a new post with &lt;code&gt;hugo new content/posts/&amp;lt;slug of post&amp;gt;.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Move the draft from my current writing tool to this new file&lt;/li&gt;
&lt;li&gt;Fill in the generated front matter template&lt;/li&gt;
&lt;li&gt;If the post is ~1.000+ words enable the TOC&lt;/li&gt;
&lt;li&gt;Run spell-check in VSCode and fix things&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;proofing&#34;&gt;Proofing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Run local hugo server &lt;code&gt;hugo server -bind=0.0.0.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Wait at least an hour&lt;/li&gt;
&lt;li&gt;Open the locally served page on the iPad, grab a cup of tea and read it&lt;/li&gt;
&lt;li&gt;Make last changes and typo fixes as needed&lt;/li&gt;
&lt;li&gt;Place a `&lt;/li&gt;
&lt;/ul&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>GitLab: User owned projects report</title>
      <link>https://marco.ninja/blog/notes/technology/gitlab/gitlab-user-owned-projects-report/</link>
      <pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/gitlab/gitlab-user-owned-projects-report/</guid>
      <description>&lt;p&gt;Export a CSV formatted report of projects in user-namespace on a GitLab instance.&lt;/p&gt;
&lt;p&gt;This is especially useful if you think about &lt;a href=&#34;https://gitlab.com/gitlab-org/gitlab-foss/-/issues/36209&#34;&gt;limiting or disabling this feature&lt;/a&gt;.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Monoliths &amp; Microservices</title>
      <link>https://marco.ninja/blog/posts/2022/07/18/monoliths-and-microservices/</link>
      <pubDate>Mon, 18 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/07/18/monoliths-and-microservices/</guid>
      <description>&lt;p&gt;Ever since diving into the software development world I was troubled by a duality:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On the one hand I have built and operated many services described as monolithic with relative ease,
on the other hand I&amp;rsquo;m always told I, and others, should build microservices because they are better in a variety of ways.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With this post I&amp;rsquo;m going to compare both software architectures by looking at the key benefits often associated with microservices
and additional considerations I think are important.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Simple git changelog</title>
      <link>https://marco.ninja/blog/notes/technology/git/simple-git-changelog/</link>
      <pubDate>Fri, 08 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/git/simple-git-changelog/</guid>
      <description>&lt;p&gt;A simple changelog system on top of git commit messages.&lt;/p&gt;
&lt;p&gt;The main idea is to generate &amp;ldquo;release notes&amp;rdquo; from a diff in commits before a release.
It can easily be run manually or as part of a merge/pull CI pipeline.&lt;/p&gt;
&lt;p&gt;In this case it looks for commit messages starting with one of these &lt;code&gt;[ADD]&lt;/code&gt;, &lt;code&gt;[REMOVE]&lt;/code&gt;, &lt;code&gt;[INFO]&lt;/code&gt;
and just outputs those, but those patters can be adjusted to fit any existing commit schema.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>The WSL Onion</title>
      <link>https://marco.ninja/blog/posts/2022/04/06/the-wsl-onion/</link>
      <pubDate>Wed, 06 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/04/06/the-wsl-onion/</guid>
      <description>&lt;p&gt;The other day I was playing around in WSL with a colleague of mine and we did this:&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Windows Subsystem for Linux 2: Debian &amp; Podman</title>
      <link>https://marco.ninja/blog/posts/2022/04/04/wsl-debian-podman/</link>
      <pubDate>Mon, 04 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/04/04/wsl-debian-podman/</guid>
      <description>&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; Docker itself can&amp;rsquo;t be run in WSL2 as it requires the docker daemon, usually run though systemd.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; Podman works just fine and can easily be installed,
although we will need to configure some things to make it work properly.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Going Part Time</title>
      <link>https://marco.ninja/blog/posts/2022/04/03/going-part-time/</link>
      <pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/04/03/going-part-time/</guid>
      <description>&lt;p&gt;Starting on the first of March 2022 I no longer work full-time in my day job.&lt;/p&gt;
&lt;p&gt;That sentence has been about a year in the making and makes me both happy and a bit scared about the future.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Simple HTTP Status Monitor Using Curl</title>
      <link>https://marco.ninja/blog/posts/2022/03/16/curl-status-monitor/</link>
      <pubDate>Wed, 16 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2022/03/16/curl-status-monitor/</guid>
      <description>&lt;p&gt;Using some output redirection and the &lt;code&gt;--write-out&lt;/code&gt; parameter we can produce a script that simply outputs the status code of a curl request.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>yamllint: Ignore exisiting errors</title>
      <link>https://marco.ninja/blog/notes/technology/yamllint/yamllint-ignore-existing-errors/</link>
      <pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/yamllint/yamllint-ignore-existing-errors/</guid>
      <description>&lt;p&gt;When adding yamllint to an existing project it can be hard to fix all the errors at once.&lt;/p&gt;
&lt;p&gt;I wrote a simple script to create a rules block that simply ignores all rules that currently trigger for a file.
This works by generating a &lt;a href=&#34;https://yamllint.readthedocs.io/en/latest/configuration.html#ignoring-paths&#34;&gt;rules block ignoring paths&lt;/a&gt;.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Local User Management Polyfill</title>
      <link>https://marco.ninja/blog/notes/technology/powershell/local-user-management-polyfill/</link>
      <pubDate>Thu, 13 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/powershell/local-user-management-polyfill/</guid>
      <description>&lt;p&gt;Older Versions of Windows 10 and all Windows Server 2012 systems have no local user management commandlets.&lt;/p&gt;
&lt;p&gt;This is a working polyfill to allow scripts using local user management to run on old systems.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/doctorscripto/LocalAccount&#34;&gt;Source code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.powershellgallery.com/packages/localaccount/&#34;&gt;PSGallery package&lt;/a&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Local S3 with MinIO in Django</title>
      <link>https://marco.ninja/blog/notes/technology/django/django-local-s3/</link>
      <pubDate>Sat, 06 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/django/django-local-s3/</guid>
      <description>&lt;p&gt;In production I would consider it best practice to use a S3 solution for serving assets. Namely static files and user-generated media.&lt;/p&gt;
&lt;p&gt;This describes my setup on how to do this locally too.&lt;/p&gt;
&lt;p&gt;The main benefit for me is that there is less of a difference between environments and I can test S3 specific features in my app.&lt;/p&gt;
&lt;h2 id=&#34;setup&#34;&gt;Setup&lt;/h2&gt;
&lt;p&gt;I will assume a already working Django project and MacOS with [[brew]] installed,
but brew specific parts are easilly replicated on different systems using their native package managers.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hidden WSL Fileshare</title>
      <link>https://marco.ninja/blog/notes/technology/windows/wsl-hidden-fileshare/</link>
      <pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/windows/wsl-hidden-fileshare/</guid>
      <description>&lt;p&gt;WSL file systems get exposed as a hidden share network share:
&lt;code&gt;\\wsl$\&amp;lt;WSL Name&amp;gt;\&amp;lt;path\to\file&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For example, my Debian home folder is at: &lt;code&gt;\\wsl$\Debian\home\kamner&lt;/code&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Windows Terminal: Open New WSL Tab In Linux Home Folder</title>
      <link>https://marco.ninja/blog/notes/technology/windows/terminal-wsl-open-in-home-folder/</link>
      <pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/windows/terminal-wsl-open-in-home-folder/</guid>
      <description>&lt;p&gt;The path you are in when opening a new WSL tab is determined by &lt;code&gt;startingDirectory&lt;/code&gt;.
This parameter needs to be a valid Windows path, which isn&amp;rsquo;t great if we want to end up in &lt;code&gt;/home/kamner&lt;/code&gt; inside WSL.&lt;/p&gt;
&lt;p&gt;The nice thing about WSL is that it will resolve windows paths into their equivalent WSL/linux path if possible.&lt;/p&gt;
&lt;p&gt;For example, &lt;code&gt;C:\Scripts&lt;/code&gt; would resolve to &lt;code&gt;/mnt/c/Scripts&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Using this and the neat trick that the WSL filesystem is exposed as a a hidden fileshare ([[technology/windows/wsl-hidden-fileshare]])
we can get to where we want.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Resolve .local Through Nameserver With Netplan</title>
      <link>https://marco.ninja/blog/notes/technology/linux/netplan-resolve-local/</link>
      <pubDate>Fri, 13 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/netplan-resolve-local/</guid>
      <description>&lt;p&gt;When using netplan it is easy to force .local DNS requests to go to you nameservers instead of being only resolved locally (the default and standard).&lt;/p&gt;
&lt;p&gt;This also works with all other strange .WHATEVER domains you may have lying around in your organization.&lt;/p&gt;
&lt;p&gt;Snippet from netplan configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;nameservers&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#76a9f9&#34;&gt;addresses&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          - &lt;span style=&#34;color:#98c379&#34;&gt;X&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          - &lt;span style=&#34;color:#e5c07b&#34;&gt;Y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#76a9f9&#34;&gt;search&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          - &lt;span style=&#34;color:#98c379&#34;&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          - &lt;span style=&#34;color:#98c379&#34;&gt;myotherstupiddomain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>MongoDB Logrotate</title>
      <link>https://marco.ninja/blog/notes/technology/mongodb/mongodb-logrotate/</link>
      <pubDate>Thu, 12 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/mongodb/mongodb-logrotate/</guid>
      <description>&lt;p&gt;MongoDB does not rotate it&amp;rsquo;s log on it&amp;rsquo;s own.&lt;/p&gt;
&lt;p&gt;To get it to ratet we will use &lt;code&gt;logrotate&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;First, we need to configure some things in &lt;code&gt;mongod.conf&lt;/code&gt; to get the desired behaviour when we utilize logrotate.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;systemLog&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;destination&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;/var/log/mongodb/mongod.log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;logAppend&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#76a9f9&#34;&gt;logRotate&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;reopen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Afterwards, we can create a logroatet configuration going in &lt;code&gt;/etc/logrotate.d/mongodb&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/var/log/mongodb/mongod.log
{
 rotate 5 # Keep the last 5 rotated logs, so 6 files including the currently active
 size 10M # Rotate once the log reaches 10MB in size, depending on your envrionment you could instead use daily, weekly, monthly, etc
 missingok # It&amp;#39;s ok if the log file does not exist
 create 0600 mongodb mongodb # Permissions and ownership for the roatetd logs
 delaycompress # Don&amp;#39;t compress on first rotation, so we have the current log and log.1 uncompressed
 compress  # Compress everything else
 sharedscripts # Run this script only once and not for every matching file
 postrotate # Script to run after rotating
 /bin/kill -SIGUSR1 $(systemctl show --property MainPID --value mongod.service)
 endscript # End of script
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;postrotate&lt;/code&gt; script simply finds the PID of mongod.service: &lt;code&gt;systemctl show --property MainPID --value mongod.service&lt;/code&gt;
and sends it a &lt;code&gt;SIGUSR1&lt;/code&gt; which is the signal MongoDB expects if you wish to rotate the log.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Show all active user cron jobs on a system</title>
      <link>https://marco.ninja/blog/notes/technology/linux/show-active-user-cronjobs/</link>
      <pubDate>Wed, 11 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/show-active-user-cronjobs/</guid>
      <description>&lt;h2 id=&#34;debianubuntu&#34;&gt;Debian/Ubuntu&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep -vH &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt; /var/spool/cron/crontabs/*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;redhatcentosrocky&#34;&gt;RedHat/Centos/Rocky&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep -vH &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt; /var/spool/cron/*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Customize Freshervice User Portal</title>
      <link>https://marco.ninja/blog/notes/technology/freshservice/customize-userportal/</link>
      <pubDate>Tue, 10 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/freshservice/customize-userportal/</guid>
      <description>&lt;p&gt;It is possible to customize almost all of the user portal but you better know what you are doing.
Otherwise you may end up like me, spending way more time than you ever should on customizing this damn portal.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s hope this one helps you, otherwise feel free to reach out to me on Twitter.&lt;/p&gt;
&lt;h2 id=&#34;page-header&#34;&gt;Page Header&lt;/h2&gt;
&lt;p&gt;Place a variation of the below at
&lt;code&gt;Admin &amp;gt; General Settings &amp;gt; Helpdesk Rebranding &amp;gt; Requester Portal Branding &amp;gt; Customize Portal &amp;gt; Layout And Pages &amp;gt; Portal Pages &amp;gt; General Pages &amp;gt; Portal Home&lt;/code&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>DNS Resolution Everywhere</title>
      <link>https://marco.ninja/blog/notes/technology/linux/dns-resolution-everywhere/</link>
      <pubDate>Tue, 10 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/dns-resolution-everywhere/</guid>
      <description>&lt;p&gt;Usually at least one of those is present on any system&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dig&lt;/li&gt;
&lt;li&gt;nslookup&lt;/li&gt;
&lt;li&gt;host&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But sometimes the usual suspects don&amp;rsquo;t work, especially in container-land.
After trying them you may try some more involved/unknown things:&lt;/p&gt;
&lt;h2 id=&#34;getent&#34;&gt;getent&lt;/h2&gt;
&lt;p&gt;Part of &lt;code&gt;glibc&lt;/code&gt;, this will probably work on nearly every system.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent hosts example.org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or, if you specifically want to query A or AAAA records.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent ahostsv4 example.org
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;getent ahostsv6 example.org
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;using-python2-or-python3&#34;&gt;Using Python2 Or Python3&lt;/h2&gt;
&lt;p&gt;Given this depends on glibc it is more of a alternative then another real solution.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Publish Parts of Obsidian to My Personal Site</title>
      <link>https://marco.ninja/blog/posts/2021/08/09/publish-obsidian-to-personal-site/</link>
      <pubDate>Mon, 09 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/08/09/publish-obsidian-to-personal-site/</guid>
      <description>&lt;p&gt;The idea at the start was simple.
Do something like &lt;a href=&#34;https://obsidian.md/publish&#34;&gt;Obsidian Publish &lt;/a&gt;, so read frontmatter and if it contains &lt;code&gt;published: True&lt;/code&gt; put it up on a website to view.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Publish Parts Of Obsidian To My Personal Site</title>
      <link>https://marco.ninja/blog/notes/technology/obsidian/publish-obsidian-to-personal-site/</link>
      <pubDate>Mon, 09 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/obsidian/publish-obsidian-to-personal-site/</guid>
      <description>&lt;p&gt;The idea at the start was simple.
Do something like &lt;a href=&#34;https://obsidian.md/publish&#34;&gt;Obsidian Publish &lt;/a&gt;, so read frontmatter and if it contains &lt;code&gt;published: True&lt;/code&gt; put it up on a website to view.&lt;/p&gt;











&lt;div class=&#34;notice&#34; style=&#34;border-color: #2060df;&#34;&gt;
  
  &lt;div&gt;
    
    &lt;i class=&#34;las la-info-circle la-lg&#34;&gt;&lt;/i&gt;
    
    I have since rewritten and updated this tool: &lt;a href=&#34;https://marco.ninja/blog/posts/2023/08/25/my-publishing-pipeline/&#34;&gt;New version&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&#34;the-basics&#34;&gt;The Basics&lt;/h2&gt;
&lt;p&gt;I started with taking a look at different static site generators but after a bit of testing I ended up back at Hugo, which I already use for &lt;a href=&#34;https://ps1.guru&#34;&gt;ps1.guru&lt;/a&gt; and a few other projects.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>curl: Modify DNS Resolution</title>
      <link>https://marco.ninja/blog/notes/technology/curl/curl-modify-dns-resolution/</link>
      <pubDate>Sun, 08 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/curl/curl-modify-dns-resolution/</guid>
      <description>&lt;p&gt;You can intercept normal name resolution in curl with the &lt;code&gt;--resolve&lt;/code&gt; parameter allowing you to do things like talk to a specific site of a DNS load-balanced setup
or talk to a new deployment not yet made productive.&lt;/p&gt;
&lt;p&gt;You can specify the resolve option multiple times so you can even catch redirects and move them to where you want as well.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s important to note that this intercept does only work on the ports you specify in the entries.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>How SELinux screws with scripts when run over VMware Tools</title>
      <link>https://marco.ninja/blog/notes/technology/linux/selinux-vmware-tools/</link>
      <pubDate>Sun, 08 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/selinux-vmware-tools/</guid>
      <description>&lt;p&gt;SELinux by default prohibits certain things from working through VMware tools (Ansible connection or plain API).&lt;/p&gt;
&lt;p&gt;This can be solved two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disabling SELinux: &lt;strong&gt;BAD&lt;/strong&gt;, but easy&lt;/li&gt;
&lt;li&gt;Writing a custom SELinux policy: complicated but more &lt;strong&gt;secure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: Adding/Changing this policy through a VMware tools connection is thankfully possible&lt;/p&gt;
&lt;h2 id=&#34;example-policy&#34;&gt;Example policy&lt;/h2&gt;
&lt;p&gt;This policy is the base for a VMware tools policy and allows entering the rpm context (yum).&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-te&#34; data-lang=&#34;te&#34;&gt;module custom-vmtools 1.0;

require {
        type rpm_script_t;
        type vmtools_unconfined_t;
        class process transition;
}

#============= vmtools_unconfined_t ==============

allow vmtools_unconfined_t rpm_script_t:process transition
&lt;/code&gt;&lt;/pre&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Replace Line In YAML While Keeping Indentation Using Ansible</title>
      <link>https://marco.ninja/blog/notes/technology/ansible/replace-line-in-yaml/</link>
      <pubDate>Sun, 08 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/ansible/replace-line-in-yaml/</guid>
      <description>&lt;p&gt;In theory Ansible should be declarative and have full control over the systems we touch with it.&lt;/p&gt;
&lt;p&gt;In practice, this is unfortunately not always the case.&lt;/p&gt;
&lt;p&gt;This combination of tasks loads a given yaml file from the remote host, &lt;code&gt;combine&lt;/code&gt;s a &amp;ldquo;overwrite dict&amp;rdquo; onto it, and writes the file back to disk.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#76a9f9&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;Load yaml file contents as fact&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;ansible.builtin.slurp&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;/etc/some-file.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;register&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;yaml_file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#76a9f9&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;Parse yaml file contents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;ansible.builtin.set_fact&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;yaml_file_content&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;{{ yaml_file.content | b64decode | from_yaml }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#76a9f9&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;Create the keys/values that should be overwritten&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;ansible.builtin.set_fact&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;yaml_file_content_overwrite&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#76a9f9&#34;&gt;some&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#76a9f9&#34;&gt;key&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Overwrite value&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#76a9f9&#34;&gt;another&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Also overwritten&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#76a9f9&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;Write yaml file with changed values&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#76a9f9&#34;&gt;ansible.builtin.copy&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;content&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;{{ yaml_file_content | combine(yaml_file_content_overwrite, recursive=true) | to_yaml }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#76a9f9&#34;&gt;dest&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#98c379&#34;&gt;/etc/some-file.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;










&lt;div class=&#34;notice&#34; style=&#34;border-color: #2060df;&#34;&gt;
  
  &lt;div&gt;
    
    &lt;i class=&#34;las la-info-circle la-lg&#34;&gt;&lt;/i&gt;
    
    I like keeping my learning public. The below is my very old and naive solution I did based on regex.
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;With this nifty task we can replace the value of a key (given as &lt;code&gt;yaml_key&lt;/code&gt;) to a new value (given as &lt;code&gt;new_value&lt;/code&gt;) while preserving it&amp;rsquo;s indentation.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Looping Dates macOS</title>
      <link>https://marco.ninja/blog/notes/technology/linux/looping-dates-macos/</link>
      <pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/linux/looping-dates-macos/</guid>
      <description>&lt;p&gt;&lt;code&gt;date&lt;/code&gt; on MacOS does not support &lt;code&gt;--date&lt;/code&gt;, so a workaround is needed.
Converting Date to unix epoch, adding one day in epoch and converting back.&lt;/p&gt;
&lt;h2 id=&#34;the-scripty-way&#34;&gt;The Scripty Way&lt;/h2&gt;
&lt;p&gt;Taken from &lt;a href=&#34;http://www.glatter-gotz.com/blog/2011/02/19/looping-through-dates-in-a-bash-script-on-osx/&#34;&gt;a blog post&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;#!/bin/zsh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8a93a5;font-style:italic&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;start&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$year&lt;/span&gt;-01-01
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;end&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$year&lt;/span&gt;-12-31
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;currentDateTs&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;$(&lt;/span&gt;date -j -f &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$start&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;+%s&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;endDateTs&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;$(&lt;/span&gt;date -j -f &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$end&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;+%s&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;offset&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#d19a66&#34;&gt;86400&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;[&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$currentDateTs&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; -le &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$endDateTs&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#54b1c7&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dcaeea&#34;&gt;date&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;$(&lt;/span&gt;date -j -f &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$currentDateTs&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;+%Y-%m-%d&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e5c07b&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$date&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#dcaeea&#34;&gt;currentDateTs&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;$((&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$currentDateTs&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$offset&lt;/span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;the-brew-way&#34;&gt;The Brew Way&lt;/h2&gt;
&lt;p&gt;As I found out long after writing the above you can simply &lt;code&gt;brew install coreutils&lt;/code&gt; and get a date command with the &lt;code&gt;--date&lt;/code&gt; option.
The only thing to note there is this: &lt;code&gt;Commands also provided by macOS have been installed with the prefix &amp;quot;g&amp;quot;.&lt;/code&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>GitLab Merge Request From the CLI</title>
      <link>https://marco.ninja/blog/posts/2021/05/06/gitlab-mr-from-cli/</link>
      <pubDate>Thu, 06 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/05/06/gitlab-mr-from-cli/</guid>
      <description>&lt;p&gt;You want to push a branch to GitLab and automatically create a Merge Request (MR) for it.&lt;/p&gt;
&lt;p&gt;There are effectively three scenarios this can cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a MR in draft state with a custom title&lt;/li&gt;
&lt;li&gt;Create a MR&lt;/li&gt;
&lt;li&gt;Create a MR and automatically merge if CI/CD pipeline succeeds&lt;/li&gt;
&lt;/ul&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Download Full Website Copy</title>
      <link>https://marco.ninja/blog/notes/technology/curl/download-full-website/</link>
      <pubDate>Thu, 01 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/curl/download-full-website/</guid>
      <description>&lt;p&gt;Sometimes it&amp;rsquo;s nice to download a best effort version of a website,
for example before completely redesigning it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;domain&lt;/span&gt;&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;WEB.SITE
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget &lt;span style=&#34;color:#dcaeea&#34;&gt;$domain&lt;/span&gt; --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names&lt;span style=&#34;color:#54b1c7&#34;&gt;=&lt;/span&gt;windows --domains &lt;span style=&#34;color:#dcaeea&#34;&gt;$domain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Linked: Powershell PSDefaultParameterValues</title>
      <link>https://marco.ninja/blog/posts/2021/03/27/powershell-psdefaultparametervalues/</link>
      <pubDate>Sat, 27 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/03/27/powershell-psdefaultparametervalues/</guid>
      <description>&lt;p&gt;I published a post about how to work with parameter defaults in PowerShell over on the ScriptRunner blog.&lt;/p&gt;
&lt;p&gt;Read now: &lt;a href=&#34;https://www.scriptrunner.com/en/blog/powershell-psdefaultparametervalues/&#34;&gt;English&lt;/a&gt;
or &lt;a href=&#34;https://www.scriptrunner.com/de/blog/powershell-psdefaultparametervalues/&#34;&gt;Deutsch&lt;/a&gt;&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>The Null-Coalescing Operator</title>
      <link>https://marco.ninja/blog/posts/2021/03/22/powershell-null-coalescing-operator/</link>
      <pubDate>Mon, 22 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/03/22/powershell-null-coalescing-operator/</guid>
      <description>&lt;p&gt;Today we take a closer look at the null-coalescing operator and how it can help us in writing smarter, more concise scripts.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Renovate Bot</title>
      <link>https://marco.ninja/blog/notes/technology/renovate-bot/renovate-bot/</link>
      <pubDate>Fri, 12 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/renovate-bot/renovate-bot/</guid>
      <description>&lt;p&gt;My tool of choice for doing dependency maintenance/update type of stuff for both [[infrastructure-as-code]] and [[software-projects]]&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Gumlab</title>
      <link>https://marco.ninja/blog/posts/2021/01/04/gumlab/</link>
      <pubDate>Mon, 04 Jan 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/01/04/gumlab/</guid>
      <description>&lt;p&gt;As part of my goal to write a book I began looking at how to build a following and where to sell the book once it&amp;rsquo;s finished.&lt;/p&gt;
&lt;p&gt;On this journey I found &lt;a href=&#34;https://gumroad.com/signup?referrer=professorlogout&#34;&gt;Gumroad&lt;/a&gt;, a great place to sell digital products.&lt;/p&gt;
&lt;p&gt;Given my idea to sell a comprehensive library of code snippets besides the actual book I took a look at existing integrations between it and GitLab.com,
my preferred git host.&lt;/p&gt;
&lt;p&gt;Unfortunately I could not find any ready made solution, but given the great APIs from Gumroad and GitLab I set out to build one.
The result is &lt;a href=&#34;https://gumroad.com/l/gumlab/&#34;&gt;GumLab&lt;/a&gt;, a easy way to sell access to GiLab projects through Gumroad.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Delete Your Old VMware Snapshots</title>
      <link>https://marco.ninja/blog/posts/2021/01/01/delete-your-old-snapshots/</link>
      <pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2021/01/01/delete-your-old-snapshots/</guid>
      <description>&lt;p&gt;For the love of Pete, please delete your old snapshots regularly!&lt;/p&gt;
&lt;p&gt;Old snapshots have caused incidents and even outages more than once in my career
and it is really easy to preemptively look for them and get them removed before anything happens.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>How to Find With PowerShell</title>
      <link>https://marco.ninja/blog/posts/2020/12/31/powershell-find/</link>
      <pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/12/31/powershell-find/</guid>
      <description>&lt;p&gt;Finding files, do I even need to describe how important this is?&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Looking Back at 2020, Four Months of Blogging</title>
      <link>https://marco.ninja/blog/posts/2020/12/22/2020-review/</link>
      <pubDate>Tue, 22 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/12/22/2020-review/</guid>
      <description>&lt;p&gt;The year is coming to an end, with all its ups and downs 2020 surely was challenging to say the least.
I wanted to take this time to openly reflect on my first couple months of blogging and what the future holds for ps1.guru&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Affiliate Links</title>
      <link>https://marco.ninja/blog/posts/2020/12/17/affiliate-links/</link>
      <pubDate>Thu, 17 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/12/17/affiliate-links/</guid>
      <description>&lt;p&gt;Lets talk about affiliate links for a moment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; I will use affiliate links where it is possible for me, which isn&amp;rsquo;t often to be honest.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Super-Charged Cmdlet Aliases</title>
      <link>https://marco.ninja/blog/posts/2020/12/02/powershell-cmdlet-aliases/</link>
      <pubDate>Wed, 02 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/12/02/powershell-cmdlet-aliases/</guid>
      <description>&lt;p&gt;I recently wrote a post about
&lt;a href=&#34;https://www.scriptrunner.com/en/blog/powershell-aliasing/&#34;&gt;PowerShell Aliasing&lt;/a&gt; for the folks over at ScriptRunner.&lt;/p&gt;
&lt;p&gt;The one issue I had while researching for this post was this:&lt;/p&gt;
&lt;p&gt;You can not create a alias for a function
and overwrite one of it&amp;rsquo;s parameters at the same time while keeping nice features like tab-complete.&lt;/p&gt;
&lt;p&gt;For a concrete example of this visit please look at the original post.&lt;/p&gt;
&lt;p&gt;At the end of the post I asked if anyone had a solution to this problem - and the internet delivered!&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Linked: Powershell Aliasing</title>
      <link>https://marco.ninja/blog/posts/2020/12/02/powershell-aliasing/</link>
      <pubDate>Wed, 02 Dec 2020 00:00:00 +0100</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/12/02/powershell-aliasing/</guid>
      <description>&lt;p&gt;I published a post about aliasing with PowerShell over on the ScriptRunner blog.&lt;/p&gt;
&lt;p&gt;Read now: &lt;a href=&#34;https://www.scriptrunner.com/en/blog/powershell-aliasing/&#34;&gt;English&lt;/a&gt; or &lt;a href=&#34;https://www.scriptrunner.com/de/blog/powershell-aliasing/&#34;&gt;Deutsch&lt;/a&gt;&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Powershell 7</title>
      <link>https://marco.ninja/blog/posts/2020/11/28/powershell7-windows/</link>
      <pubDate>Sat, 28 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/11/28/powershell7-windows/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Wait a minute! Don&amp;rsquo;t I already have PowerShell?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes. However you may want to continue reading because things are never as simple as they appear.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Collections And Randomization</title>
      <link>https://marco.ninja/blog/posts/2020/11/18/powershell-randomize-collections/</link>
      <pubDate>Wed, 18 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/11/18/powershell-randomize-collections/</guid>
      <description>&lt;p&gt;Randomizing a collection is useful in a variety of situations and in most languages it is fairly straight forward.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>How To Grep With PowerShell</title>
      <link>https://marco.ninja/blog/posts/2020/09/30/powershell-grep/</link>
      <pubDate>Wed, 30 Sep 2020 12:15:00 +0200</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/09/30/powershell-grep/</guid>
      <description>&lt;p&gt;Filtering data, from log or config files to data returned by an api,
is an important operation to remove noise from it and make further analysis possible.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>How to Tail With PowerShell</title>
      <link>https://marco.ninja/blog/posts/2020/09/21/powershell-tail/</link>
      <pubDate>Mon, 21 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/09/21/powershell-tail/</guid>
      <description>&lt;p&gt;Printing the last or first, few lines of a file is a common operation in day to day operations.
On Linux most people will, without thinking twice, use &lt;code&gt;tail&lt;/code&gt; and it&amp;rsquo;s counterpart &lt;code&gt;head&lt;/code&gt; to achieve this.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Bash Utilities in Powershell</title>
      <link>https://marco.ninja/blog/posts/2020/09/20/bash-utilities-in-powershell/</link>
      <pubDate>Sun, 20 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/09/20/bash-utilities-in-powershell/</guid>
      <description>&lt;p&gt;Whats the first thing coming to mind when seeing a command line?&lt;/p&gt;
&lt;p&gt;For most people it is Linux, be it Ubuntu, Debian or RedHat.
And it is completely understandable. A big part of our industry has a background in Linux and sees it as the superior system for quick scripts and the like.&lt;/p&gt;</description><category>Posts</category>
    </item>
    
    <item>
      <title>Vmware Tools Copy Files</title>
      <link>https://marco.ninja/blog/notes/technology/powershell/vmware-tools-copy-files/</link>
      <pubDate>Thu, 17 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/powershell/vmware-tools-copy-files/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://vdc-repo.vmware.com/vmwb-repository/dcr-public/a3c2ccf5-a478-4d1f-8f03-ef63cf7d5fa5/f694d3d3-14d4-430f-95e8-013bc5e347db/doc/Copy-VMGuestFile.html&#34;&gt;Docs&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;copy-to-guest&#34;&gt;Copy To Guest&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$vm&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;Get-VM&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Name&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;TEST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;Get-Item&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;X:\yourfile.txt&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;Copy-VMGuestFile&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Destination&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;c:\temp&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-VM&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$vm&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-LocalToGuest&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-GuestUser&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Administrator&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-GuestPassword&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Pa$&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$w0rd&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;copy-from-guest&#34;&gt;Copy From Guest&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$vm&lt;/span&gt; &lt;span style=&#34;color:#abb2bf&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e5c07b&#34;&gt;Get-VM&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Name&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;TEST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e5c07b&#34;&gt;Copy-VMGuestFile&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Source&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;c:&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;yourfile&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#cebc3a&#34;&gt;txt&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-Destination&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;c:&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#aa89ea&#34;&gt;temp&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;\&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-VM&lt;/span&gt; &lt;span style=&#34;color:#dcaeea&#34;&gt;$vm&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-GuestToLocal&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-GuestUser&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Administrator&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#aa89ea&#34;&gt;-GuestPassword&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Pa$&lt;/span&gt;&lt;span style=&#34;color:#dcaeea&#34;&gt;$w0rd&lt;/span&gt;&lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hello World</title>
      <link>https://marco.ninja/blog/posts/2020/09/13/hello-world/</link>
      <pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/posts/2020/09/13/hello-world/</guid>
      <description></description><category>Posts</category>
    </item>
    
    <item>
      <title>Ansible VMware Connection Plugin &amp; Become</title>
      <link>https://marco.ninja/blog/notes/technology/ansible/ansible-vmware-connection-and-become/</link>
      <pubDate>Thu, 02 Jul 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/ansible/ansible-vmware-connection-and-become/</guid>
      <description>&lt;p&gt;When using VMware as the connection plugin to connect to remote hosts you commonly set two facts for username and password:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;ansible_vmware_tools_user&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;mkamner&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#76a9f9&#34;&gt;ansible_vmare_tools_password&lt;/span&gt;&lt;span style=&#34;color:#abb2bf&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#63c381&#34;&gt;&amp;#34;Super Secret PW&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will work just fine for windows and with many tasks on linux.&lt;/p&gt;
&lt;p&gt;However, if you want to use &lt;code&gt;become: true&lt;/code&gt; on linux it will fail with the strangest error messages.&lt;/p&gt;
&lt;p&gt;For example: &lt;code&gt;apt&lt;/code&gt; will fail, because it can&amp;rsquo;t acquire the lock file&lt;/p&gt;
&lt;p&gt;The solution is rather simple, &lt;code&gt;become&lt;/code&gt; does not honor the VMware facts set, instead it wants two different facts set:&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>IANA To openSSL Ciphers</title>
      <link>https://marco.ninja/blog/notes/technology/openssl/map-iana-to-openssl-ciphers/</link>
      <pubDate>Sat, 07 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/openssl/map-iana-to-openssl-ciphers/</guid>
      <description>&lt;p&gt;Handy table to map IANA IDs of ciphers to their openSSL IDs used in web server configurations,
for example [[nginx]] &lt;code&gt;ssl_ciphers&lt;/code&gt; or &lt;code&gt;proxy_ssl_ciphers&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://testssl.sh/openssl-iana.mapping.html&#34;&gt;https://testssl.sh/openssl-iana.mapping.html&lt;/a&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Ansible</title>
      <link>https://marco.ninja/blog/notes/technology/ansible/ansible/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/ansible/ansible/</guid>
      <description>&lt;p&gt;Need to automate a VM?
you need Ansible!&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>ArgoCD</title>
      <link>https://marco.ninja/blog/notes/technology/argocd/argocd/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/argocd/argocd/</guid>
      <description></description><category>Notes</category>
    </item>
    
    <item>
      <title>Django</title>
      <link>https://marco.ninja/blog/notes/technology/django/django/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/django/django/</guid>
      <description>&lt;p&gt;My preferred framework for building web apps&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>GitLab</title>
      <link>https://marco.ninja/blog/notes/technology/gitlab/gitlab/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/gitlab/gitlab/</guid>
      <description>&lt;p&gt;My preferred git server and CI/CD system, either gitlab.com or self-hosted.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Helm</title>
      <link>https://marco.ninja/blog/notes/technology/helm/helm/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/helm/helm/</guid>
      <description>&lt;p&gt;A good way to pull in external dependencies into Kubernetes
For writing my own manifests I prefer to use Kustomize.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Hugo</title>
      <link>https://marco.ninja/blog/notes/technology/hugo/hugo/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/hugo/hugo/</guid>
      <description>&lt;p&gt;My static site generator of choice, used to build &lt;a href=&#34;https://blog.marco.ninja&#34;&gt;my blog&lt;/a&gt; among other things.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>JQ</title>
      <link>https://marco.ninja/blog/notes/technology/jq/jq/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/jq/jq/</guid>
      <description>&lt;p&gt;A incredibly powerful tool for manipulating the heaps of JSON files and responses I interact with daily.&lt;/p&gt;
&lt;p&gt;A lot of times I also use &lt;code&gt;ijq&lt;/code&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; instead, which is a interactive version of &lt;code&gt;jq&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://sr.ht/~gpanders/ijq/&#34;&gt;https://sr.ht/~gpanders/ijq/&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Kubernetes</title>
      <link>https://marco.ninja/blog/notes/technology/k8s/k8s/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/k8s/k8s/</guid>
      <description>&lt;p&gt;I have run and am still running loads of Kubernetes clusters, mostly on-premise.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Kustomize</title>
      <link>https://marco.ninja/blog/notes/technology/kustomize/kustomize/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/kustomize/kustomize/</guid>
      <description>&lt;p&gt;My prefered tool for writing and provisioning home-built manifests to [[kubernetes]]&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>MacOS</title>
      <link>https://marco.ninja/blog/notes/technology/macos/macos/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/macos/macos/</guid>
      <description>&lt;p&gt;My operating system of choice on the client, usually on a MacBook Pro.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>PowerShell</title>
      <link>https://marco.ninja/blog/notes/technology/powershell/powershell/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/powershell/powershell/</guid>
      <description>&lt;p&gt;PowerShell holds a special place in my heart as it was the first ever tool I dived into deeply and used to automate my daily work.&lt;/p&gt;
&lt;p&gt;To this day it runs a bunch of fundamental automations in my life.&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>Python</title>
      <link>https://marco.ninja/blog/notes/technology/python/python/</link>
      <pubDate>Wed, 01 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/python/python/</guid>
      <description>&lt;p&gt;These days Python is my language of choice for both simple scripts and more complex backend applications, usually in combination with [[django]]&lt;/p&gt;</description><category>Notes</category>
    </item>
    
    <item>
      <title>vCenter Cert Bundle</title>
      <link>https://marco.ninja/blog/notes/technology/vmware/vcenter-cert-bundle/</link>
      <pubDate>Mon, 13 May 2019 00:00:00 +0000</pubDate>
      
      <guid>https://marco.ninja/blog/notes/technology/vmware/vcenter-cert-bundle/</guid>
      <description>&lt;p&gt;Errors connecting to vCenter or any ESXi server in the cluster without certificate errors?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get CA cert from the vCenter: &lt;code&gt;wget https://{{ YOUR VCENTER }}/certs/download.zip --no-check-certificate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install where required&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://kb.vmware.com/s/article/2108294&#34;&gt;VMware KB&lt;/a&gt;&lt;/p&gt;</description><category>Notes</category>
    </item>
    
  </channel>
</rss>
