<?xml version="1.0" encoding="utf-8" standalone="yes"?> <?xml-stylesheet href="https://maik.io/pretty-feed-v3.xsl" type="text/xsl"?>

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Hugo on maik.io</title>
    <link>https://maik.io/tags/hugo/</link>
    <description>Recent content in Hugo on maik.io</description>
    <generator>maik.io</generator>
    <language>de-de</language>
    <lastBuildDate>Mon, 16 Mar 2026 09:25:57 +0000</lastBuildDate>
    <atom:link href="https://maik.io/tags/hugo/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Panda Day</title>
      <link>https://maik.io/notes/2026-03-16-panda-day/</link>
      <pubDate>Mon, 16 Mar 2026 09:25:57 +0000</pubDate>
      <guid>https://maik.io/notes/2026-03-16-panda-day/</guid>
      <description>&lt;p&gt;Der eine oder andere hat vermutlich bemerkt, dass ich Hugo als CMS nutze. Hugo bringt im Kern bereits &lt;a href=&#34;https://github.com/bep/goat&#34; target=&#34;_blank&#34; &gt;GoAT&lt;/a&gt; mit, ein ASCII-Tool für Diagramme. Damit lassen sich nicht nur klassische Schaubilder erstellen, sondern auch Pixel- oder Dotgrafiken. Damit habe ich ein wenig experimentiert.&lt;/p&gt;
&lt;p&gt;Happy &lt;a href=&#34;https://www.kuriose-feiertage.de/tag-des-pandas/&#34; target=&#34;_blank&#34; &gt;Panda Day&lt;/a&gt;!&lt;/p&gt;



&lt;div class=&#34;goat svg-container &#34;&gt;
  
    &lt;svg
      xmlns=&#34;http://www.w3.org/2000/svg&#34;
      font-family=&#34;ui-monospace, SFMono-Regular, &#39;SF Mono&#39;,Menlo, Monaco, Consolas, monospace;&#34;
      
        viewBox=&#34;0 0 368 409&#34;
      &gt;
      &lt;g transform=&#39;translate(8,16)&#39;&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;112&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;192&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;48&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;64&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;80&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;96&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;272&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;288&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;64&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;64&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;256&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;272&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;288&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;80&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;256&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;272&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;288&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;96&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;256&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;272&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;112&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;128&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;144&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;160&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;176&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;192&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;208&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;224&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;224&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;224&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;224&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;64&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;192&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;240&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;64&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;80&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;192&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;256&#39; cy=&#39;352&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;32&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;64&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;96&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;112&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;128&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;144&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;160&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;176&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;192&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;320&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;272&#39; cy=&#39;336&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;48&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;240&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;256&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;272&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;288&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;288&#39; cy=&#39;304&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;304&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;304&#39; cy=&#39;224&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;circle cx=&#39;320&#39; cy=&#39;208&#39; r=&#39;6&#39; stroke=&#39;currentColor&#39; fill=&#39;currentColor&#39;&gt;&lt;/circle&gt;
&lt;/g&gt;

      

      &lt;style&gt;
        svg circle[fill=&#34;#fff&#34;] {
          fill: none;
          stroke: var(--primary);
        }
        svg circle[fill=&#34;currentColor&#34;] {
          fill: var(--primary);
          stroke: var(--primary);
        }
      &lt;/style&gt;
    &lt;/svg&gt;
  
&lt;/div&gt;</description>
      <content:encoded>
      <![CDATA[<p>Der eine oder andere hat vermutlich bemerkt, dass ich Hugo als CMS nutze. Hugo bringt im Kern bereits <a href="https://github.com/bep/goat" target="_blank" >GoAT</a> mit, ein ASCII-Tool für Diagramme. Damit lassen sich nicht nur klassische Schaubilder erstellen, sondern auch Pixel- oder Dotgrafiken. Damit habe ich ein wenig experimentiert.</p>
<p>Happy <a href="https://www.kuriose-feiertage.de/tag-des-pandas/" target="_blank" >Panda Day</a>!</p>



<div class="goat svg-container ">
  
    <svg
      xmlns="http://www.w3.org/2000/svg"
      font-family="ui-monospace, SFMono-Regular, 'SF Mono',Menlo, Monaco, Consolas, monospace;"
      
        viewBox="0 0 368 409"
      >
      <g transform='translate(8,16)'>
<circle cx='48' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='48' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='64' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='80' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='96' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='112' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='128' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='144' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='160' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='176' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='192' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='208' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='224' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='224' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='224' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='224' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='240' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='80' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='256' cy='352' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='32' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='64' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='96' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='112' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='128' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='144' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='160' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='176' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='192' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='320' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='272' cy='336' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='48' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='240' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='256' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='272' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='288' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='288' cy='304' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='304' cy='224' r='6' stroke='currentColor' fill='currentColor'></circle>
<circle cx='320' cy='208' r='6' stroke='currentColor' fill='currentColor'></circle>
</g>

      

      <style>
        svg circle[fill="#fff"] {
          fill: none;
          stroke: var(--primary);
        }
        svg circle[fill="currentColor"] {
          fill: var(--primary);
          stroke: var(--primary);
        }
      </style>
    </svg>
  
</div>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Alte Beiträge in Hugo markieren</title>
      <link>https://maik.io/notes/2025-10-21-alte-beitraege-in-hugo-markieren/</link>
      <pubDate>Tue, 21 Oct 2025 15:58:00 +0200</pubDate>
      <guid>https://maik.io/notes/2025-10-21-alte-beitraege-in-hugo-markieren/</guid>
      <description>&lt;p&gt;Ich habe eine kleine Hinweisfunktion eingebaut, die bei Beiträgen erscheint, die älter als ein Jahr sind. Mir war wichtig, dass dieser Hinweis nicht bei reinen Fotobeiträgen auftaucht – Fotos verlieren schließlich selten an Relevanz.
Zuerst habe ich selbst eine funktionierende Version geschrieben, anschließend den Code von einem Sprachmodell noch etwas optimieren lassen. Jetzt läuft bei mir folgende Variante:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* Tags prüfen */&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tagsLower&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;lower&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hasPhoto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tagsLower&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;photo&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/* Relevantes Datum bestimmen und Stichtag berechnen */&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pageDate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;AsTime&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lastmod&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;PublishDate&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;oneYearAgo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;AddDate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;cm&#34;&gt;/*Hinweis nur auf echten Seiten, mit gültigem Datum, älter als 1 Jahr und nicht beim Tag &amp;#34;photo&amp;#34; */&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;IsPage&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hasPhoto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pageDate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Unix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lt&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pageDate&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;oneYearAgo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;alert alert-warning&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Hinweis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Dieser&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Artikel&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ist&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;über&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ein&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Jahr&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Die&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Informationen&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;könnten&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;veraltet&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sein&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded>
      <![CDATA[<p>Ich habe eine kleine Hinweisfunktion eingebaut, die bei Beiträgen erscheint, die älter als ein Jahr sind. Mir war wichtig, dass dieser Hinweis nicht bei reinen Fotobeiträgen auftaucht – Fotos verlieren schließlich selten an Relevanz.
Zuerst habe ich selbst eine funktionierende Version geschrieben, anschließend den Code von einem Sprachmodell noch etwas optimieren lassen. Jetzt läuft bei mir folgende Variante:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="cm">/* Tags prüfen */</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="err">$</span><span class="nx">tags</span> <span class="o">:=</span> <span class="k">default</span> <span class="p">(</span><span class="nx">slice</span><span class="p">)</span> <span class="p">.</span><span class="nx">Params</span><span class="p">.</span><span class="nx">tags</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="err">$</span><span class="nx">tagsLower</span> <span class="o">:=</span> <span class="nx">apply</span> <span class="err">$</span><span class="nx">tags</span> <span class="s">&#34;lower&#34;</span> <span class="s">&#34;.&#34;</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="err">$</span><span class="nx">hasPhoto</span> <span class="o">:=</span> <span class="nx">in</span> <span class="err">$</span><span class="nx">tagsLower</span> <span class="s">&#34;photo&#34;</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="cm">/* Relevantes Datum bestimmen und Stichtag berechnen */</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="err">$</span><span class="nx">pageDate</span> <span class="o">:=</span> <span class="nx">time</span><span class="p">.</span><span class="nf">AsTime</span> <span class="p">(</span><span class="nx">or</span> <span class="p">.</span><span class="nx">Lastmod</span> <span class="p">.</span><span class="nx">PublishDate</span> <span class="p">.</span><span class="nx">Date</span><span class="p">)</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="err">$</span><span class="nx">oneYearAgo</span> <span class="o">:=</span> <span class="p">(</span><span class="nx">now</span><span class="p">).</span><span class="nx">AddDate</span> <span class="o">-</span><span class="mi">1</span> <span class="mi">0</span> <span class="mi">0</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="cm">/*Hinweis nur auf echten Seiten, mit gültigem Datum, älter als 1 Jahr und nicht beim Tag &#34;photo&#34; */</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="k">if</span> <span class="nx">and</span> <span class="p">.</span><span class="nf">IsPage</span> <span class="p">(</span><span class="nx">not</span> <span class="err">$</span><span class="nx">hasPhoto</span><span class="p">)</span> <span class="p">(</span><span class="nf">gt</span> <span class="p">(</span><span class="err">$</span><span class="nx">pageDate</span><span class="p">.</span><span class="nx">Unix</span><span class="p">)</span> <span class="mi">0</span><span class="p">)</span> <span class="p">(</span><span class="nx">lt</span> <span class="err">$</span><span class="nx">pageDate</span> <span class="err">$</span><span class="nx">oneYearAgo</span><span class="p">)</span> <span class="o">-</span><span class="p">}}</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="nx">div</span> <span class="nx">class</span><span class="p">=</span><span class="s">&#34;alert alert-warning&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">Hinweis</span><span class="p">:</span> <span class="nx">Dieser</span> <span class="nx">Artikel</span> <span class="nx">ist</span> <span class="nx">über</span> <span class="nx">ein</span> <span class="nx">Jahr</span> <span class="nx">alt</span><span class="p">.</span> <span class="nx">Die</span> <span class="nx">Informationen</span> <span class="nx">könnten</span> <span class="nx">veraltet</span> <span class="nx">sein</span><span class="p">.</span>
</span></span><span class="line"><span class="cl">  <span class="p">&lt;</span><span class="o">/</span><span class="nx">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">{{</span><span class="o">-</span> <span class="nx">end</span> <span class="o">-</span><span class="p">}}</span>
</span></span></code></pre></div>]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>HugoMods</title>
      <link>https://maik.io/notes/2024-04-22-hugomods/</link>
      <pubDate>Mon, 22 Apr 2024 17:43:00 +0100</pubDate>
      <guid>https://maik.io/notes/2024-04-22-hugomods/</guid>
      <description>&lt;p&gt;Wer das CMS &lt;a href=&#34;https://gohugo.io&#34; target=&#34;_blank&#34; &gt;Hugo&lt;/a&gt; einsetzt, dem sei &lt;a href=&#34;https://hugomods.com/&#34; title=&#34;HugoMods | Hugo Modules and Tools&#34; target=&#34;_blank&#34; &gt;HugoMods&lt;/a&gt; empfohlen. Hier werden Tools und Plugins für das Content-Management-System gebündelt.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Wer das CMS <a href="https://gohugo.io" target="_blank" >Hugo</a> einsetzt, dem sei <a href="https://hugomods.com/" title="HugoMods | Hugo Modules and Tools" target="_blank" >HugoMods</a> empfohlen. Hier werden Tools und Plugins für das Content-Management-System gebündelt.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Externe Umleitung in Hugo</title>
      <link>https://maik.io/notes/2023-12-17-externe-umleitung-in-hugo/</link>
      <pubDate>Sun, 17 Dec 2023 10:55:00 +0200</pubDate>
      <guid>https://maik.io/notes/2023-12-17-externe-umleitung-in-hugo/</guid>
      <description>&lt;p&gt;Als Blogger hatte ich heute den Wunsch, URLs, die auf ein Unterverzeichnis zeigen, auch extern umzuleiten.&lt;/p&gt;
&lt;p&gt;In dem Blogpost »&lt;a href=&#34;https://dannorth.net/hugo-redirects/#the-solution&#34; title=&#34;Using Hugo as a redirect service&#34; target=&#34;_blank&#34; &gt;Using Hugo as a redirect service&lt;/a&gt;« von Daniel Terhorst-North stieß ich auf eine super schlanke Lösung.&lt;/p&gt;
&lt;p&gt;Um dies zu erreichen, muss die folgende Datei im Theme-Ordner angelegt werden: &lt;code&gt;/layouts/redirect/single.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Der Datei muss der folgende Quellcode hinzugefügt werden:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{{- template &amp;#34;_internal/alias.html&amp;#34; (dict &amp;#34;Permalink&amp;#34; .Params.target) -}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nun kann man eine Datei erstellen und die Weiterleitung mit den folgenden vier Zeilen definieren. Dabei bestimmt der Dateiname auch das Verzeichnis der Quell-URL:&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p>Als Blogger hatte ich heute den Wunsch, URLs, die auf ein Unterverzeichnis zeigen, auch extern umzuleiten.</p>
<p>In dem Blogpost »<a href="https://dannorth.net/hugo-redirects/#the-solution" title="Using Hugo as a redirect service" target="_blank" >Using Hugo as a redirect service</a>« von Daniel Terhorst-North stieß ich auf eine super schlanke Lösung.</p>
<p>Um dies zu erreichen, muss die folgende Datei im Theme-Ordner angelegt werden: <code>/layouts/redirect/single.html</code>.</p>
<p>Der Datei muss der folgende Quellcode hinzugefügt werden:</p>
<pre tabindex="0"><code>{{- template &#34;_internal/alias.html&#34; (dict &#34;Permalink&#34; .Params.target) -}}
</code></pre><p>Nun kann man eine Datei erstellen und die Weiterleitung mit den folgenden vier Zeilen definieren. Dabei bestimmt der Dateiname auch das Verzeichnis der Quell-URL:</p>
<pre tabindex="0"><code>---
type: redirect
target: https://google.de
---
</code></pre>]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>
    <item>
      <title>Hugo kostenlos mit GitHub und DigitalOcean</title>
      <link>https://maik.io/notes/2023-11-18-hugo-kostenlos-mit-github-und-digitalocean/</link>
      <pubDate>Sat, 18 Nov 2023 13:53:54 +0100</pubDate>
      <guid>https://maik.io/notes/2023-11-18-hugo-kostenlos-mit-github-und-digitalocean/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://images.unsplash.com/photo-1737737351943-82e01f866e53?crop=entropy&amp;amp;cs=tinysrgb&amp;amp;fit=max&amp;amp;fm=jpg&amp;amp;ixid=M3w2NjYyNTZ8MHwxfGFsbHwxfHx8fHx8Mnx8MTczNzczNzQzM3w&amp;amp;ixlib=rb-4.0.3&amp;amp;q=80&amp;amp;w=1080&#34; alt=&#34;Hugo&#34;  /&gt;
&lt;/p&gt;
&lt;p&gt;Dieses Tutorial beschreibt, wie ein Hugo-Blog mit GitHub als Versionskontrollsystem und DigitalOcean App Platform als Hosting-Dienst konfiguriert wird. Die Anleitung basiert auf macOS, die beschriebenen Schritte können jedoch auch unter Linux ausgeführt werden. Dafür muss Homebrew (über &lt;code&gt;brew&lt;/code&gt;) durch &lt;code&gt;sudo apt-get&lt;/code&gt; ersetzt werden.&lt;/p&gt;
&lt;h3 id=&#34;voraussetzungen&#34;&gt;Voraussetzungen&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;macOS oder Linux:&lt;/strong&gt; Betriebssystem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Homebrew (oder apt-get für Linux):&lt;/strong&gt; Paketmanager. Installieren unter macOS mit:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git:&lt;/strong&gt; Installieren mit:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hugo:&lt;/strong&gt; Installieren mit:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install hugo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub-Konto:&lt;/strong&gt; &lt;a href=&#34;https://github.com/&#34; target=&#34;_blank&#34; &gt;GitHub&lt;/a&gt; für Versionskontrolle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DigitalOcean-Konto:&lt;/strong&gt; &lt;a href=&#34;https://www.digitalocean.com/&#34; target=&#34;_blank&#34; &gt;DigitalOcean&lt;/a&gt; für das Hosting. Es wird ein Konto mit einer Zahlungsmethode benötigt (Kosten entstehen nicht).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;schritt-1-neues-hugo-projekt-erstellen&#34;&gt;Schritt 1: Neues Hugo-Projekt erstellen&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Terminal öffnen und folgenden Befehl ausführen, um ein neues Hugo-Projekt zu erstellen:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hugo new site example.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Hinweis: &lt;code&gt;example.com&lt;/code&gt; ist ein Platzhalter. Hier muss die eigene Domain eingesetzt werden.&lt;/p&gt;</description>
      <content:encoded>
      <![CDATA[<p><img loading="lazy" src="https://images.unsplash.com/photo-1737737351943-82e01f866e53?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3w2NjYyNTZ8MHwxfGFsbHwxfHx8fHx8Mnx8MTczNzczNzQzM3w&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" alt="Hugo"  />
</p>
<p>Dieses Tutorial beschreibt, wie ein Hugo-Blog mit GitHub als Versionskontrollsystem und DigitalOcean App Platform als Hosting-Dienst konfiguriert wird. Die Anleitung basiert auf macOS, die beschriebenen Schritte können jedoch auch unter Linux ausgeführt werden. Dafür muss Homebrew (über <code>brew</code>) durch <code>sudo apt-get</code> ersetzt werden.</p>
<h3 id="voraussetzungen">Voraussetzungen</h3>
<ol>
<li><strong>macOS oder Linux:</strong> Betriebssystem.</li>
<li><strong>Homebrew (oder apt-get für Linux):</strong> Paketmanager. Installieren unter macOS mit:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bin/bash -c <span class="s2">&#34;</span><span class="k">$(</span>curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh<span class="k">)</span><span class="s2">&#34;</span>
</span></span></code></pre></div></li>
<li><strong>Git:</strong> Installieren mit:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install git
</span></span></code></pre></div></li>
<li><strong>Hugo:</strong> Installieren mit:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">brew install hugo
</span></span></code></pre></div></li>
<li><strong>GitHub-Konto:</strong> <a href="https://github.com/" target="_blank" >GitHub</a> für Versionskontrolle.</li>
<li><strong>DigitalOcean-Konto:</strong> <a href="https://www.digitalocean.com/" target="_blank" >DigitalOcean</a> für das Hosting. Es wird ein Konto mit einer Zahlungsmethode benötigt (Kosten entstehen nicht).</li>
</ol>
<h3 id="schritt-1-neues-hugo-projekt-erstellen">Schritt 1: Neues Hugo-Projekt erstellen</h3>
<ol>
<li>Terminal öffnen und folgenden Befehl ausführen, um ein neues Hugo-Projekt zu erstellen:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new site example.com
</span></span></code></pre></div></li>
</ol>
<p>Hinweis: <code>example.com</code> ist ein Platzhalter. Hier muss die eigene Domain eingesetzt werden.</p>
<ol start="2">
<li>Wechsel in das Projektverzeichnis:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> example.com
</span></span></code></pre></div></li>
<li>Das Theme &ldquo;PaperMod&rdquo; hinzufügen:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git init
</span></span><span class="line"><span class="cl">git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;theme = &#34;PaperMod&#34;&#39;</span> &gt;&gt; config.toml
</span></span></code></pre></div></li>
<li>Beispiel-Inhalte generieren:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new posts/welcome.md
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;---
</span></span></span><span class="line"><span class="cl"><span class="s2">title: &#39;Willkommen&#39;
</span></span></span><span class="line"><span class="cl"><span class="s2">date: </span><span class="k">$(</span>date +%Y-%m-%dT%H:%M:%S%z<span class="k">)</span><span class="s2">
</span></span></span><span class="line"><span class="cl"><span class="s2">draft: false
</span></span></span><span class="line"><span class="cl"><span class="s2">---
</span></span></span><span class="line"><span class="cl"><span class="s2">Dies ist der erste Beitrag.&#34;</span> &gt; content/posts/welcome.md
</span></span></code></pre></div></li>
<li>Projekt lokal starten, um die Inhalte zu überprüfen:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo server
</span></span></code></pre></div>Der Blog ist unter <a href="http://localhost:1313" target="_blank" >http://localhost:1313</a> verfügbar.</li>
</ol>
<h3 id="schritt-2-projekt-zu-github-hochladen">Schritt 2: Projekt zu GitHub hochladen</h3>
<ol>
<li>Neues Repository auf GitHub erstellen. Name: <code>example.com</code>.</li>
<li>Terminal öffnen und das Projekt zu GitHub hochladen:
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git remote add origin https://github.com/&lt;dein-benutzername&gt;/example.com.git
</span></span><span class="line"><span class="cl">git branch -M main
</span></span><span class="line"><span class="cl">git add .
</span></span><span class="line"><span class="cl">git commit -m <span class="s2">&#34;Initial commit&#34;</span>
</span></span><span class="line"><span class="cl">git push -u origin main
</span></span></code></pre></div></li>
</ol>
<h3 id="schritt-3-deployment-mit-digitalocean-app-platform">Schritt 3: Deployment mit DigitalOcean App Platform</h3>
<ol>
<li><a href="https://cloud.digitalocean.com/apps" target="_blank" >DigitalOcean App Platform</a> öffnen.</li>
<li>Auf <strong>&ldquo;Create App&rdquo;</strong> klicken und GitHub als Quelle auswählen.</li>
<li>GitHub-Zugriff gewähren und das Repository <code>example.com</code> auswählen.</li>
<li>Folgende Einstellungen konfigurieren:
<ul>
<li><strong>Branch:</strong> <code>main</code></li>
<li><strong>Build Command:</strong> <code>hugo</code></li>
<li><strong>Publish Directory:</strong> <code>public</code></li>
</ul>
</li>
<li>Auf &ldquo;Next&rdquo; klicken und den kostenlosen Plan auswählen.</li>
<li>App bereitstellen, indem auf <strong>&ldquo;Deploy&rdquo;</strong> geklickt wird.</li>
</ol>
<h3 id="schritt-4-domain-konfigurieren">Schritt 4: Domain konfigurieren</h3>
<ol>
<li>Auf DigitalOcean zur App navigieren und <strong>&ldquo;Settings&rdquo;</strong> öffnen.</li>
<li>Unter &ldquo;Domain&rdquo; auf <strong>&ldquo;Add Domain&rdquo;</strong> klicken und <code>example.com</code> eingeben.</li>
<li>DNS-Einträge auf der Domain-Registrar-Seite anpassen:
<ul>
<li>Typ: <code>CNAME</code></li>
<li>Name: <code>@</code></li>
<li>Ziel: Die von DigitalOcean bereitgestellte Adresse.</li>
</ul>
</li>
<li>Die Änderung kann bis zu 24 Stunden dauern.</li>
</ol>
<h3 id="schritt-5-blog-testen">Schritt 5: Blog testen</h3>
<p>Nach Abschluss der Konfiguration ist der Blog unter <code>https://example.com</code> erreichbar.</p>
<h3 id="disclaimer">Disclaimer</h3>
<p>Die beschriebene Konfiguration basiert auf meiner persönlichen Erfahrung und kann je nach individuellen Anforderungen variieren. Es wird empfohlen, die offizielle Dokumentation von Hugo, GitHub und DigitalOcean zu konsultieren, um detaillierte Informationen zu erhalten.
Da DigitalOcean und GitHub weder europäische noch deutsche Anbieter sind, ist es im Hinblick auf die DSGVO wichtig, genau zu prüfen, welche Benutzerdaten gespeichert oder verarbeitet werden. In meinem Fall werden keinerlei Besucherdaten gespeichert oder ausgewertet, weshalb dies keine Einschränkung darstellt.</p>
]]>    
      <![CDATA[<br><br><hr><br><small><p>Vielen Dank fürs Lesen! Wenn du Lust auf noch mehr Gedanken, Updates und ab und zu einen Blick hinter die Kulissen hast, folge mir doch gern auf <a href="https://maik.io/mastodon">Mastodon</a> oder <a href="https://maik.io/instagram">Instagram</a>.</p><p>Hast du Fragen oder Feedback? Schreib mir gern eine <a href="https://maik.io/email">E-Mail</a>.</p></small>]]>
      </content:encoded>  
    </item>      
  </channel>
</rss>