<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Moonlight Xanadu</title>
      <link>https://blog.michal-atlas.cz</link>
      <description></description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://blog.michal-atlas.cz/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 14 Mar 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>@ Syntax</title>
          <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/mini/2026-03-14t23-13-01-00/</link>
          <guid>https://blog.michal-atlas.cz/mini/2026-03-14t23-13-01-00/</guid>
          <description xml:base="https://blog.michal-atlas.cz/mini/2026-03-14t23-13-01-00/">&lt;p&gt;Ada has a neat syntax since 2021.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ada&quot; class=&quot;language-ada z-code&quot;&gt;&lt;code class=&quot;language-ada&quot; data-lang=&quot;ada&quot;&gt;&lt;span class=&quot;z-source z-ada&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-label z-ada&quot;&gt;&lt;span class=&quot;z-entity z-other z-attribute-name&quot;&gt;X&lt;&#x2F;span&gt; :&lt;&#x2F;span&gt;= @ * &lt;span class=&quot;z-constant z-numeric z-ada&quot;&gt;2&lt;&#x2F;span&gt;;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The &lt;code&gt;@&lt;&#x2F;code&gt; always signifies the LHS of the assignment.
Even in more complex situations like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ada&quot; class=&quot;language-ada z-code&quot;&gt;&lt;code class=&quot;language-ada&quot; data-lang=&quot;ada&quot;&gt;&lt;span class=&quot;z-source z-ada&quot;&gt;Cursor(&lt;span class=&quot;z-constant z-numeric z-ada&quot;&gt;3&lt;&#x2F;span&gt;, Next) := @ * &lt;span class=&quot;z-constant z-numeric z-ada&quot;&gt;2&lt;&#x2F;span&gt; + Sqrt(@);
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It’s a very nice way of doing all the &lt;code&gt;+=&lt;&#x2F;code&gt;, &lt;code&gt;*=&lt;&#x2F;code&gt;, &lt;code&gt;|=&lt;&#x2F;code&gt;, &lt;code&gt;&amp;lt;&amp;lt;=&lt;&#x2F;code&gt;, etc.
which seems slightly more readable to me, for the
basic cases I still learnt to see &lt;code&gt;:=@+&lt;&#x2F;code&gt; as a &lt;code&gt;+=&lt;&#x2F;code&gt;,
and in the more complex expressions where you don’t actually
want to just have the final operation be &lt;code&gt;+&lt;&#x2F;code&gt; the old value,
it comes in way more handy.&lt;&#x2F;p&gt;
&lt;p&gt;Ofc doing this with macros is trivial.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>OCaml has curried keywords</title>
          <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/mini/2026-03-14t23-22-01-00/</link>
          <guid>https://blog.michal-atlas.cz/mini/2026-03-14t23-22-01-00/</guid>
          <description xml:base="https://blog.michal-atlas.cz/mini/2026-03-14t23-22-01-00/">&lt;p&gt;I spoke about keywords improving readability
in &lt;a href=&quot;https:&#x2F;&#x2F;blog.michal-atlas.cz&#x2F;posts&#x2F;lambda-lists&#x2F;&quot;&gt;an older post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And actually found something that does it close to what I described.&lt;&#x2F;p&gt;
&lt;p&gt;OCaml calls it “&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ocaml.org&#x2F;docs&#x2F;labels&quot;&gt;Labelled Arguments&lt;&#x2F;a&gt;”:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ocaml&quot; class=&quot;language-ocaml z-code&quot;&gt;&lt;code class=&quot;language-ocaml&quot; data-lang=&quot;ocaml&quot;&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-directive z-line-number z-ocaml&quot;&gt;#&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-function-definition z-ocaml&quot;&gt;let&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-function z-ocaml&quot;&gt;add&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-labeled z-ocaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-labeled-parameter z-ocaml&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-labeled z-ocaml&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-labeled-parameter z-ocaml&quot;&gt;~&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-ocaml&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; x &lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;+&lt;&#x2F;span&gt; y&lt;span class=&quot;z-punctuation z-terminator z-expression z-ocaml&quot;&gt;;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-meta z-module z-signature z-val z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-ocaml&quot;&gt;val&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-type z-value-signature z-ocaml&quot;&gt;add&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-type-constraint z-ocaml&quot;&gt;:&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-labeled z-ocaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;x&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-function-return z-ocaml&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-labeled z-ocaml&quot;&gt;&lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-function-return z-ocaml&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-symbol z-ocaml&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;fun&lt;span class=&quot;z-keyword z-operator z-symbol z-ocaml&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-meta z-module z-signature z-val z-ocaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-directive z-line-number z-ocaml&quot;&gt;#&lt;&#x2F;span&gt; add &lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;~x&lt;span class=&quot;z-punctuation z-separator z-argument-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;~y&lt;span class=&quot;z-punctuation z-separator z-argument-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;4&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-expression z-ocaml&quot;&gt;;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;-&lt;&#x2F;span&gt; : &lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;6&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-directive z-line-number z-ocaml&quot;&gt;#&lt;&#x2F;span&gt; add &lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;~y&lt;span class=&quot;z-punctuation z-separator z-argument-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;2&lt;&#x2F;span&gt; &lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;~x&lt;span class=&quot;z-punctuation z-separator z-argument-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;5&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-expression z-ocaml&quot;&gt;;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;-&lt;&#x2F;span&gt; : &lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;7&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-other z-directive z-line-number z-ocaml&quot;&gt;#&lt;&#x2F;span&gt; add &lt;span class=&quot;z-entity z-name z-tag z-label z-ocaml&quot;&gt;~y&lt;span class=&quot;z-punctuation z-separator z-argument-label z-ocaml&quot;&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-ocaml&quot;&gt;4&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-expression z-ocaml&quot;&gt;;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-ocaml&quot;&gt;&lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;-&lt;&#x2F;span&gt; : x:&lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-separator z-function-return z-ocaml&quot;&gt;-&amp;gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-ocaml&quot;&gt;int&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-infix z-ocaml&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-symbol z-ocaml&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;fun&lt;span class=&quot;z-keyword z-operator z-symbol z-ocaml&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sadly you can’t do something like &lt;code&gt;add ~x&lt;&#x2F;code&gt; to remove the label from
the argument, it’s a labelled argument, it’s a different type
and that’s that unless you wrap it in a lambda.&lt;&#x2F;p&gt;
&lt;p&gt;They also have an interesting approach to &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ocaml.org&#x2F;docs&#x2F;labels#passing-optional-arguments&quot;&gt;optional arguments&lt;&#x2F;a&gt;,
where you can just skip over them when applying a later label?
This of course means you need a sentinel value if there are no
non-optional arguments and also that optional arguments come first rather than last.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>CFFI Struct Vectors</title>
          <pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/mini/struct-vectors/</link>
          <guid>https://blog.michal-atlas.cz/mini/struct-vectors/</guid>
          <description xml:base="https://blog.michal-atlas.cz/mini/struct-vectors/">&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;asdf&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;load-system&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;cffi&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;cffi&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;defcstruct&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;point&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;int&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;cffi&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;with-foreign-object&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;vec&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-quoted z-lisp&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;struct&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;point&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-lisp&quot;&gt;loop&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;    &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;with&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;idx&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;    &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;i&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;to&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;    &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;do&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;       &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;cffi&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;with-foreign-slots&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;         &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;y&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;          &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;cffi&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;mem-aptr&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;vec&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-quoted z-lisp&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;struct&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;point&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;i&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;          &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;struct&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;point&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;         &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;setf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;          &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;x&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;incf&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;idx&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;          &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;y&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-arithmetic z-lisp&quot;&gt;incf&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;idx&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-vm&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;hexdump&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;vec&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>On GO&#x27;s unused variable error</title>
          <pubDate>Sat, 27 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/go-var/</link>
          <guid>https://blog.michal-atlas.cz/posts/go-var/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/go-var/">&lt;p&gt;Many people have ranted about the GO compiler’s
insistance on all variables being used.&lt;&#x2F;p&gt;
&lt;p&gt;On a surprisingly related note,
I wondered what’s forcing me to deal with errors
if they’re just a separate value.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;golang&#x2F;comments&#x2F;16mzz3n&#x2F;unused_variable_rant&#x2F;&quot;&gt;It’s&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;golang&#x2F;comments&#x2F;1g6u45l&#x2F;golangs_most_annoying_feature_declared_but_not&#x2F;&quot;&gt;not&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;golang&#x2F;comments&#x2F;1m35anu&#x2F;not_handling_return_values_in_go_should_be&#x2F;&quot;&gt;too&lt;&#x2F;a&gt;
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;golang&#x2F;comments&#x2F;kcm3ko&#x2F;unused_variables&#x2F;&quot;&gt;difficult&lt;&#x2F;a&gt;
to find opinion upon opinion on this subject.&lt;&#x2F;p&gt;
&lt;p&gt;I also used to think this was kind of annoying
however after gaining some knowledge
on linear types, and other forms of dealing
with errors and program flow
I realized that there is one great reason to keep this.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;Imagine now that you want to open a file in Go:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;go&quot; class=&quot;language-go z-code&quot;&gt;&lt;code class=&quot;language-go&quot; data-lang=&quot;go&quot;&gt;&lt;span class=&quot;z-source z-go&quot;&gt;&lt;span class=&quot;z-variable z-declaration z-go&quot;&gt;f&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-go&quot;&gt;:=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-go&quot;&gt;os&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-go&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-function z-go&quot;&gt;Open&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-go&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-go&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-go&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;...&lt;span class=&quot;z-punctuation z-definition z-string z-end z-go&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-go&quot;&gt;)&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Okay, now the compiler states&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;assignment mismatch: 1 variable but os.Open returns 2 values&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Right, opening can fail, lemme just…&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;go&quot; class=&quot;language-go z-code&quot;&gt;&lt;code class=&quot;language-go&quot; data-lang=&quot;go&quot;&gt;&lt;span class=&quot;z-source z-go&quot;&gt;&lt;span class=&quot;z-variable z-declaration z-go&quot;&gt;f&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-go&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-declaration z-go&quot;&gt;err&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-go&quot;&gt;:=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-go&quot;&gt;os&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-dot z-go&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-function z-go&quot;&gt;Open&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-go&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-go&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-go&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;...&lt;span class=&quot;z-punctuation z-definition z-string z-end z-go&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-go&quot;&gt;)&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;declared and not used: err&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;You see?
This forces me to deal with the error in some way.
I could obviously have just added &lt;code&gt;f, _&lt;&#x2F;code&gt; but that
would’ve been a visible smell.&lt;&#x2F;p&gt;
&lt;p&gt;Programmers are forgetful, distracted and time-pressured
human beings so having anything remind you that
something needs to be done that isn’t visible is a boon.&lt;&#x2F;p&gt;
&lt;p&gt;I think that considering their goal is “simplicity”
just forcing every variable to be used
is a reasonable solution to the “what if someone forgets to handle my error value”
issue.
Implementing this in other ways is probably more “complex”
and unused variables are something people
expect to be a warning anyway.&lt;&#x2F;p&gt;
&lt;p&gt;Ignoring all the returns is not a warning,
which is okay here as you always want to hold on
to the result, however something that returns an error
but otherwise either side-effects or works on arguments
might go uncaught.&lt;&#x2F;p&gt;
&lt;p&gt;I do have one more point though on the &lt;code&gt;os.Open&lt;&#x2F;code&gt; API,
forgetting to &lt;code&gt;defer&lt;&#x2F;code&gt; closing of the file is unchecked afaik,
however that is &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;go.dev&#x2F;src&#x2F;os&#x2F;file_unix.go&quot;&gt;handled already&lt;&#x2F;a&gt;
by the &lt;code&gt;.Open&lt;&#x2F;code&gt; function and &lt;code&gt;defer&lt;&#x2F;code&gt; just makes closing more predictable
as opposed to relying on GC. So that’s alright.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Arrays and Boxing in Common Lisp &amp; SIMD in SBCL</title>
          <pubDate>Tue, 23 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/simd/</link>
          <guid>https://blog.michal-atlas.cz/posts/simd/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/simd/">&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Hey
Releston
what are you up to?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 Looking at this here sensor code,
it’s supposed to be rated for much higher resolution that we’re running.
I mean a rock could come at us flying and the ship wouldn’t react in time.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 What?!? Am I supposed to feel even more scared
than I already am? Okay, show me.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 Here… look at this for example, it’s supposed to remove the background noise from the sensor array.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-lisp&quot;&gt;defun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt; &lt;span class=&quot;z-entity z-name z-function z-lisp&quot;&gt;distance-sensors-delete-background-noise&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-lisp&quot;&gt;loop&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;across&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;across&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;from&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;setf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-lisp&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-comparison z-lisp&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 It takes over 300ms just to clear the noise, who knows
how slow everything else here is.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h1 id=&quot;array-specialization&quot;&gt;Array Specialization&lt;a class=&quot;zola-anchor&quot; href=&quot;#array-specialization&quot; aria-label=&quot;Anchor link for: array-specialization&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Right, I see some weirdness here I think I could help with,
first of all, what is the type of that input array?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 It’s just a &lt;code&gt;simple-array&lt;&#x2F;code&gt; nothing special, why?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Oh, that might mean the values are all boxed, let’s look.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;CL-USER&amp;gt; (sb-vm:hexdump v)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA20: 0000000000000089
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA28: 0000000000000006 = 3
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA30: 000000120413C3CF = 1.3d0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA38: 0000001204E5C89F = 1.2134d0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA40: 000000120A7FA69F = 1.3d0
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;120CA3FA48: 0000000000000000 = 0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 You see those values in there? Or rather a lack thereof?
All of those are just pointers to the heap, not actually the numbers you’re working with.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 How do you see that?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Honestly, I’m not sure how to tell for sure,
however there are a few giveaways.
The &lt;strong&gt;addresses&lt;&#x2F;strong&gt; show you generally where you can expect allocated heap objects to end up,
the values in the cells of the vector are suspiciously close to that.
The other more obvious telltale is that the two &lt;code&gt;double-float&lt;&#x2F;code&gt;s with an equal value
have completely &lt;strong&gt;different binary representations&lt;&#x2F;strong&gt;,
both of which are not actually representations of the number.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 Oh, that’s ugly, so Common Lisp doesn’t have non-boxed arrays?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Of course it has, they are however sadly quite implementation dependent.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Let’s start with the fact that array semantics are based on boxes,
for various reasons,
by default they can hold absolutely any type
and if you don’t know the sizes of anything
you can’t make an array out of them,
since an array is literally just “places of the same size next to each other”.&lt;&#x2F;p&gt;
&lt;p&gt;So without any further knowledge Common Lisp is forced to assume
you might want to do anything and just box.
However, nothing is stopping you from actually telling it what
you’ll be using your array with.&lt;&#x2F;p&gt;
&lt;p&gt;Common Lisp defines something called “Specialized Arrays”,
these allow the implementation to store the elements in a
“more efficient” manner.
Common Lisp itself only requires &lt;code&gt;(vector bit)&lt;&#x2F;code&gt; (a.k.a. &lt;code&gt;bit-vector&lt;&#x2F;code&gt;) and &lt;code&gt;(vector character)&lt;&#x2F;code&gt; (a.k.a. &lt;code&gt;string&lt;&#x2F;code&gt;) specializations,
however implementations are allowed to create additional
specializations as they see fit.&lt;&#x2F;p&gt;
&lt;p&gt;To inspect what is optimized in a particular
environment the standard provides &lt;code&gt;#&#x27;upgraded-array-element-type&lt;&#x2F;code&gt;.
This function takes a type and returns what the most specialized
array capable of holding it is actually capable of holding.
That might’ve just sounded weird,
why am I interested in what it holds rather than the type itself?
It would be redundant, since the type that holds is just an &lt;code&gt;(array &amp;lt;that-type&amp;gt;)&lt;&#x2F;code&gt;
anyways.
So if I wanted to store an &lt;code&gt;(unsigned-byte 3)&lt;&#x2F;code&gt;, I could run
&lt;code&gt;(upgraded-array-element-type &#x27;(unsigned-byte 3))&lt;&#x2F;code&gt; which for me
returns &lt;code&gt;(unsigned-byte 4)&lt;&#x2F;code&gt;.
This means that the implementations has some alternative way to
treat arrays of your type and if you ask for one it’ll use
the one that is specialized for use with &lt;code&gt;(unsigned-byte 4)&lt;&#x2F;code&gt;
but you can feel free to store your &lt;code&gt;(unsigned-byte 3)&lt;&#x2F;code&gt;
in there the array’ll handle it.&lt;&#x2F;p&gt;
&lt;p&gt;Nonetheless, we can use this to inspect the various
better options an implementation offers us.
In the case of SBCL I found a special variable which
happens to line up with what gets optimized:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-quoted z-lisp&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-symbol z-lisp&quot;&gt;vector&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;alexandria&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;rcurry&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-function z-lisp&quot;&gt;#&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;slot-value&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-quoted z-lisp&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant z-other z-symbol z-lisp&quot;&gt;sb-vm&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;::&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;specifier&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-vm&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;*specialized-array-element-type-properties*&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Which lists their specializations for us:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NIL&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;BASE-CHAR&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;CHARACTER&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SINGLE-FLOAT&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;DOUBLE-FLOAT&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;BIT&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;UNSIGNED-BYTE&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;2&lt;&#x2F;li&gt;
&lt;li&gt;4&lt;&#x2F;li&gt;
&lt;li&gt;7&lt;&#x2F;li&gt;
&lt;li&gt;8&lt;&#x2F;li&gt;
&lt;li&gt;15&lt;&#x2F;li&gt;
&lt;li&gt;16&lt;&#x2F;li&gt;
&lt;li&gt;31&lt;&#x2F;li&gt;
&lt;li&gt;32&lt;&#x2F;li&gt;
&lt;li&gt;62&lt;&#x2F;li&gt;
&lt;li&gt;63&lt;&#x2F;li&gt;
&lt;li&gt;64&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;SIGNED-BYTE&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;8&lt;&#x2F;li&gt;
&lt;li&gt;16&lt;&#x2F;li&gt;
&lt;li&gt;32&lt;&#x2F;li&gt;
&lt;li&gt;64&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;FIXNUM&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;COMPLEX&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SINGLE-FLOAT&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;DOUBLE-FLOAT&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The list looks kinda bizarre at times,
I’m sure every entry has a very good reason.
Including the fun &lt;code&gt;NIL&lt;&#x2F;code&gt; entry (CL’s equivalent of the bottom type),
which just says congratulates you for trying to use it.&lt;&#x2F;p&gt;
&lt;p&gt;This itself doesn’t tell you the elements aren’t boxed but might give you a pretty good idea what types to look for when optimizing.
With SBCL we can verify our assumption quite trivially,
by constructing &lt;code&gt;v&lt;&#x2F;code&gt; with &lt;code&gt;:element-type &#x27;double-float&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;CL-USER&amp;gt; (sb-vm:hexdump v)
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB60: 00000000000000D5
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB68: 0000000000000006 = 3
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB70: 3FF4CCCCCCCCCCCD
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB78: 3FF36A161E4F7660
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB80: 3FF4CCCCCCCCCCCD
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;1209ABBB88: 0000000000000000 = 0
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 See? Now try it with this.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 … … … It’s slower!!!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Well, they do always say to benchmark and test,
the reason why this is slower is currently slightly beyond my grasp.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I’m reasonably sure it has to do with re-boxing floats,
as the main problem is that with no &lt;code&gt;element-type&lt;&#x2F;code&gt; there
are no allocations when run, but with it equal to &lt;code&gt;double-float&lt;&#x2F;code&gt;
it allocates a lot.
If I want to operate on a generic array I have to call
the generic functions with standard Lisp values,
which for a &lt;code&gt;double-float&lt;&#x2F;code&gt; means it needs to be boxed,
so every read from the array is sort of associated with allocating memory.
We need to show to Lisp that the array is safely able to provide
and accept unboxed floats.
Adding a declaration suffices to get rid of that issue.&lt;&#x2F;p&gt;
&lt;p&gt;This also changes speed due to plenty of inlining of math, etc.
that however seems to speed up only by about half without the specialization.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-lisp&quot;&gt;defun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt; &lt;span class=&quot;z-entity z-name z-function z-lisp&quot;&gt;distance-sensors-delete-background-noise2&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-declaration z-declare z-lisp&quot;&gt;declare&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-modifier z-lisp&quot;&gt;type&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-storage z-type z-lisp&quot;&gt;simple-array&lt;&#x2F;span&gt; &lt;span class=&quot;z-storage z-type z-lisp&quot;&gt;double-float&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-lisp&quot;&gt;loop&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;below&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;do&lt;&#x2F;span&gt; 
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;           &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;setf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                 &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-conditional z-lisp&quot;&gt;if&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-comparison z-lisp&quot;&gt;&amp;lt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-float z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;0&lt;span class=&quot;z-punctuation z-separator z-decimal z-lisp&quot;&gt;.&lt;&#x2F;span&gt;0d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 That’s more like it, under 20ms or so, that’s one hell of an improvement.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 This was supposed to be rather educational,
not just about optimizing,
so don’t go doing this everywhere before really finding out
why something isn’t the way you want and make sure the edit
actually makes it that way.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 Okay, I guess that’s it, we can’t get below that,
there’s minimal work being done save for actually going over the elements
one by one.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;simd&quot;&gt;SIMD&lt;a class=&quot;zola-anchor&quot; href=&quot;#simd&quot; aria-label=&quot;Anchor link for: simd&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-yellow&quot;&gt;&amp;lt;Hackmore&amp;gt;&lt;&#x2F;span&gt;
 Actually there might still be one thing,
it’s actually why I came down here.
I just read in the manual that they fitted our ship’s computer
with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Advanced_Vector_Extensions#Advanced_Vector_Extensions_2&quot;&gt;AVX2&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-pink&quot;&gt;&amp;lt;Releston&amp;gt;&lt;&#x2F;span&gt;
 Elaborate&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.sbcl.org&#x2F;manual&#x2F;#sb_002dsimd&quot;&gt;The SBCL Manual&lt;&#x2F;a&gt;
actually has a good section to introduce you to this,
however I had my own problems understanding it
so I will re-iterate and partly show how this works anyway.&lt;&#x2F;p&gt;
&lt;p&gt;Modern processors are fitted with chonky registers to help with
operations on vectors.
These vary from 128-bits in SSE all the way up to 512-bits in AVX-512.
All these SSE and AVX acronyms are descriptions of
which registers are present on a CPU.
The most common around me at the time of writing is AVX2,
which includes 256-bit registers.&lt;&#x2F;p&gt;
&lt;p&gt;These registers can load from memory all at once
and then apply operations that act as if they had
multiple separate numbers inside them.
Emulating this behaviour with a normal register
would be problematic, since placing let’s say
2 32-bit integers into a 64-bit register and
trying to add them could overflow from one number to the other.
Other operations would provide their own little problems,
so we have specialized registers and instructions for this process.&lt;&#x2F;p&gt;
&lt;p&gt;For AVX2 SBCL provides functions like &lt;code&gt;f64.4+&lt;&#x2F;code&gt; or &lt;code&gt;f32.8&amp;lt;&lt;&#x2F;code&gt;,
if you do the math you’ll find that 4x&lt;code&gt;f64&lt;&#x2F;code&gt; and 8x&lt;code&gt;f32&lt;&#x2F;code&gt; is both
256-bits.
This means that you are using a 256-bit register to operate on
4 &lt;code&gt;double-floats&lt;&#x2F;code&gt;
or 8 &lt;code&gt;single-floats&lt;&#x2F;code&gt; respectively.
SBCL provides these inside the &lt;code&gt;sb-simd&lt;&#x2F;code&gt; package,
along with &lt;code&gt;sb-simd-&amp;lt;extension-version&amp;gt;&lt;&#x2F;code&gt; for
those parts of SIMD only applicable to certain extensions.&lt;&#x2F;p&gt;
&lt;p&gt;Things like &lt;code&gt;sb-simd:f64&lt;&#x2F;code&gt; and &lt;code&gt;sb-simd:u8&lt;&#x2F;code&gt; are mostly
just type aliases for the actual built-in Common Lisp types.
So using &lt;code&gt;sb-simd:u16+&lt;&#x2F;code&gt; on two numbers or
&lt;code&gt;sb-simd:f32*&lt;&#x2F;code&gt; on two floats is perfectly acceptable.&lt;&#x2F;p&gt;
&lt;p&gt;How do we get multiple &lt;code&gt;double-floats&lt;&#x2F;code&gt; for example then,
so we can use these functions on them?
We use &lt;code&gt;&amp;lt;type&amp;gt;.&amp;lt;count&amp;gt;-aref&lt;&#x2F;code&gt; on an array restricted to the given type.
It’s that easy, this returns a “SIMD pack” as SBCL calls it,
and we can operate on it, before &lt;code&gt;setf&lt;&#x2F;code&gt;ing back.
In essence you only replace &lt;code&gt;aref&lt;&#x2F;code&gt; with &lt;code&gt;...-aref&lt;&#x2F;code&gt; and &lt;code&gt;+&lt;&#x2F;code&gt; with &lt;code&gt;...-+&lt;&#x2F;code&gt; and you’re done.
One thing to note is that SIMD &lt;code&gt;if&lt;&#x2F;code&gt; works a bit differently,
since we need to make a choice over multiple numbers at the same time.
&lt;code&gt;&amp;lt;&lt;&#x2F;code&gt; actually creates a boolean mask which SIMD &lt;code&gt;if&lt;&#x2F;code&gt;
uses to choose a number from one of the other two arguments,
however to do that both must already be pre-calculated.&lt;&#x2F;p&gt;
&lt;p&gt;If our dear crew strictly assumes AVX2 is present they could
write something like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-declaration z-function z-lisp&quot;&gt;defun&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt; &lt;span class=&quot;z-entity z-name z-function z-lisp&quot;&gt;distance-sensors-delete-background-noise3&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-parameters z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parameters z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-keyword z-control z-loop z-lisp&quot;&gt;loop&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;below&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;by&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-number z-integer z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-simd-avx2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;f64.4-aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;for&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-simd-avx2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;f64.4-aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;backgrounds&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;        &lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-other z-symbol z-lisp&quot;&gt;do&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;setf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-simd-avx2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;f64.4-aref&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distances&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;index&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-simd-avx2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;f64.4-if&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                   &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-namespace z-lisp&quot;&gt;sb-simd-avx2&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lisp&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;f64.4&amp;lt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;background&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                   &lt;span class=&quot;z-meta z-number z-float z-decimal z-lisp&quot;&gt;&lt;span class=&quot;z-constant z-numeric z-value z-lisp&quot;&gt;0&lt;span class=&quot;z-punctuation z-separator z-decimal z-lisp&quot;&gt;.&lt;&#x2F;span&gt;0d0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-function z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-loop z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;                   &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;distance&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is slower than before,
but I meant mostly to show off the features
as they took me way too long for me to understand
and I find them interesting and productive to know.
For more complex calculations or
when used with larger leverage,
like with bytes where the register
can support 32 of them at once, the
performance of SIMD is incomparable.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>WebRings</title>
          <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/webrings/</link>
          <guid>https://blog.michal-atlas.cz/webrings/</guid>
          <description xml:base="https://blog.michal-atlas.cz/webrings/">&lt;h3 id=&quot;webrings&quot;&gt;WebRings&lt;a class=&quot;zola-anchor&quot; href=&quot;#webrings&quot; aria-label=&quot;Anchor link for: webrings&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;geekring.net&quot;&gt;geekring&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;geekring.net&#x2F;site&#x2F;497&#x2F;previous&quot;&gt;Previous&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;geekring.net&#x2F;site&#x2F;497&#x2F;next&quot;&gt;Next&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;geekring.net&#x2F;site&#x2F;497&#x2F;random&quot;&gt;Random&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webring.dinhe.net&#x2F;&quot;&gt;retronaut&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webring.dinhe.net&#x2F;prev&#x2F;https:&#x2F;&#x2F;blog.michal-atlas.cz&quot;&gt;Previous&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webring.dinhe.net&#x2F;next&#x2F;https:&#x2F;&#x2F;blog.michal-atlas.cz&quot;&gt;Next&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;li&gt;[&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;webring.dinhe.net&#x2F;random&quot;&gt;Random&lt;&#x2F;a&gt;]&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;!-- - [shring.sh](https:&#x2F;&#x2F;shring.sh) --&gt;
&lt;!--   - [[Previous](https:&#x2F;&#x2F;shring.sh&#x2F;michal_atlas&#x2F;previous)] --&gt;
&lt;!--   - [[Next](https:&#x2F;&#x2F;shring.sh&#x2F;michal_atlas&#x2F;next)] --&gt;
&lt;!-- - LinuxRing [&lt;script defer src=&quot;https:&#x2F;&#x2F;teethinvitro.neocities.org&#x2F;webring&#x2F;linuxring&#x2F;ring.js&quot; data-icon=&quot;nixos&quot;&gt;&lt;&#x2F;script&gt;] --&gt;</description>
      </item>
      <item>
          <title>EUR&#x2F;CZK Table</title>
          <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/programs/euro/</link>
          <guid>https://blog.michal-atlas.cz/programs/euro/</guid>
          <description xml:base="https://blog.michal-atlas.cz/programs/euro/">&lt;p&gt;&lt;button
  hx-on:click=&quot;window.euroRefresh()&quot;
  id=&quot;euro-run&quot;&gt;Run&lt;&#x2F;button&gt;&lt;&#x2F;p&gt;
&lt;table style=&quot;display: none;&quot; id=&quot;euro-rates&quot;&gt;
&lt;tr&gt;&lt;th&gt;EUR&lt;&#x2F;th&gt;&lt;th&gt;CZK&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;table&gt;
&lt;script 
    defer
    type=&quot;module&quot;
    src=&quot;.&#x2F;index.js&quot;&gt;
&lt;&#x2F;script&gt;
</description>
      </item>
      <item>
          <title>Search</title>
          <pubDate>Sun, 07 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/programs/search/</link>
          <guid>https://blog.michal-atlas.cz/programs/search/</guid>
          <description xml:base="https://blog.michal-atlas.cz/programs/search/">&lt;p&gt;
&lt;input
  id=&quot;own-search-result-input&quot;
  placeholder=&quot;Search Query&quot;
  onKeyPress=&quot;if (event.key === &#x27;Enter&#x27;) { window.ownSearch() }&quot;
  type=&quot;text&quot;&gt;&lt;&#x2F;input&gt;
&lt;button hx-on:click=&quot;window.ownSearch()&quot;&gt;Search&lt;&#x2F;button&gt;
&lt;&#x2F;p&gt;
&lt;div id=&quot;own-search-results&quot;&gt;&lt;&#x2F;div&gt;
&lt;script 
    defer
    type=&quot;module&quot;
    src=&quot;.&#x2F;index.js&quot;&gt;
&lt;&#x2F;script&gt;
</description>
      </item>
      <item>
          <title>The Flower SSG</title>
          <pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/flower-ssg/</link>
          <guid>https://blog.michal-atlas.cz/posts/flower-ssg/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/flower-ssg/">&lt;p&gt;Today a cute little program landed in my RSS feed
called &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;flower.jyn.dev&#x2F;&quot;&gt;flower&lt;&#x2F;a&gt;.
It promises to be simple to setup, grow infinitely,
and it’s templating engine is a thin wrapper around just writing Clojure.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Advent of Code 2025</title>
          <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/advent-2025/</link>
          <guid>https://blog.michal-atlas.cz/posts/advent-2025/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/advent-2025/">&lt;p&gt;My AoC 2025 solutions in Common Lisp.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Language Levels</title>
          <pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/language-level/</link>
          <guid>https://blog.michal-atlas.cz/posts/language-level/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/language-level/">&lt;blockquote&gt;
&lt;p&gt;I am well aware everything I say is arbitrary and it’s all just for fun.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Some &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;ProgrammingLanguages&quot;&gt;debates&lt;&#x2F;a&gt;
online often end up with people not agreeing on what
languages are high&#x2F;low level.
In part definitely because of the relative meaning
which even &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;High-level_programming_language#Relative_meaning&quot;&gt;the wiki&lt;&#x2F;a&gt;
mentions, however even the definition of high-level
meaning “with strong abstraction”
is definitely not good.
It places C++ for example
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;C%2B%2B&quot;&gt;among the high-level&lt;&#x2F;a&gt;
languages which certainly it shouldn’t be
unless we want ASM&#x2F;C to be low and everything else be high.&lt;&#x2F;p&gt;
&lt;p&gt;So we need more levels to spread out all the high-level
languages, and those levels should probably be based
on objective features not on vibes,
so we can relay information even if everybody
didn’t agree that the scale is correct,
at least they’d know how to rank a language.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Did the number of planets increase monotonically?</title>
          <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/school-planets/</link>
          <guid>https://blog.michal-atlas.cz/life/school-planets/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/school-planets/">&lt;p&gt;Sometime ago I heard a factoid that children had to learn more and more planets in school
until we finally discovered that those things were not planets.
It was probably from a CGPGrey &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Z_2gbGXzFbs&quot;&gt;video&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title></title>
          <pubDate>Sat, 08 Nov 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/life-lisp/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/life-lisp/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/life-lisp/">&lt;pre data-lang=&quot;lisp&quot; class=&quot;language-lisp z-code&quot;&gt;&lt;code class=&quot;language-lisp&quot; data-lang=&quot;lisp&quot;&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-control z-loop z-lisp&quot;&gt;dolist&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;p&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-quoted z-lisp&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;family&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;friends&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;classmates&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;colleagues&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;friends&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;  &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;push&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;p&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;*people*&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lisp&quot;&gt;&lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;setf&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;life&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-parens z-lisp&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-begin z-lisp&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-support z-function z-lisp&quot;&gt;reduce&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-function z-lisp&quot;&gt;#&amp;#39;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-lisp&quot;&gt;&lt;span class=&quot;z-variable z-function z-lisp&quot;&gt;know&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lisp&quot;&gt;*people*&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-parens z-end z-lisp&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Student Meetup #6 - Monad Stacking</title>
          <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/lang-talks/22-monad-stacking/</link>
          <guid>https://blog.michal-atlas.cz/posts/lang-talks/22-monad-stacking/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/lang-talks/22-monad-stacking/">&lt;h1 id=&quot;link-recording&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;fpBOTJD_UQI&quot;&gt;🔗 Recording&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;</description>
      </item>
      <item>
          <title>Lisp: Macros all the way down</title>
          <pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/become-std/</link>
          <guid>https://blog.michal-atlas.cz/posts/become-std/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/become-std/">&lt;p&gt;One of the great features many Lisp languages share is that
they try to have an extremely tiny core language and then
just implement everything else in it.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>České Školství</title>
          <pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/galleries/czech-schools/</link>
          <guid>https://blog.michal-atlas.cz/galleries/czech-schools/</guid>
          <description xml:base="https://blog.michal-atlas.cz/galleries/czech-schools/">&lt;p&gt;&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;TSL3ymMZtj4&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;9kGZgsjMSBM&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;uuNwzHd7sr4&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;2UJJAf03ChE&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;YNOVSoXCAaA&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;euXG3tQ5EH8&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;nHjH3unrUOc&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;JGKWcvwiMNU&quot;&gt;&lt;&#x2F;iframe&gt;



&lt;iframe src=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;embed&#x2F;qEg7Pzg6IWM&quot;&gt;&lt;&#x2F;iframe&gt;


&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Pre-Paper Checklist</title>
          <pubDate>Sat, 13 Sep 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/pre-paper-checklist/</link>
          <guid>https://blog.michal-atlas.cz/posts/pre-paper-checklist/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/pre-paper-checklist/">&lt;blockquote&gt;
&lt;p&gt;This is a list of things I always forget when writing a paper or thesis.
They will seem obvious, but not when you’re a few months into
some research and then have to write it down in a way others can read.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Write an introduction which exhaustively explains your problem, previous work, and describes what work you’ll be showing&lt;&#x2F;li&gt;
&lt;li&gt;Don’t forget others have no idea what you’re doing,
things are obvious, but every single assumption must be dropped&lt;&#x2F;li&gt;
&lt;li&gt;Every figure has to have a legend&lt;&#x2F;li&gt;
&lt;li&gt;If you’re talking about aggregated data, aggregate it&lt;&#x2F;li&gt;
&lt;li&gt;Gather citations as you find them
&lt;ul&gt;
&lt;li&gt;Retroactively gathering them all is next to impossible&lt;&#x2F;li&gt;
&lt;li&gt;You might want to check back on them anyways&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Sci-fi (planetary adventure) archetypes</title>
          <pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/sci-fi-archetypes/</link>
          <guid>https://blog.michal-atlas.cz/life/sci-fi-archetypes/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/sci-fi-archetypes/">&lt;p&gt;I am not talking about &lt;em&gt;sci-fi&lt;&#x2F;em&gt; as we often picture it today as anything
containing space-travel, advanced technology or aliens, rather it often doesn’t
feature aliens at all.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Lambda Lists bridge the gap between single and keyword&#x2F;rest arguments</title>
          <pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/lambda-lists/</link>
          <guid>https://blog.michal-atlas.cz/posts/lambda-lists/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/lambda-lists/">&lt;p&gt;Many times I’ve pondered if Haskell could support variadic arguments or at least
keywords, since sometimes they are more readable and I for one do prefer them:&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Machine Spirit Worship</title>
          <pubDate>Sun, 27 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/galleries/machine-spirit-worship/</link>
          <guid>https://blog.michal-atlas.cz/galleries/machine-spirit-worship/</guid>
          <description xml:base="https://blog.michal-atlas.cz/galleries/machine-spirit-worship/">&lt;div class=&quot;gallery&quot;&gt;
  &lt;figure&gt;
  &lt;video preload=&quot;metadata&quot; controls=&quot;controls&quot;&gt;
    &lt;source src=&quot;&amp;#x2F;galleries&amp;#x2F;machine-spirit-worship&amp;#x2F;gallery&amp;#x2F;thats_a_real_ass_tech_preast_and_russain.mp4&quot;&gt;
    Your browser does not support the video tag, that&#x27;s kinda cool. Feel free to
    message me and we&#x27;ll figure something out that&#x27;ll work for your usecase.
  &lt;&#x2F;video&gt;
  &lt;figcaption&gt;thats_a_real_ass_tech_preast_and_russain.mp4&lt;&#x2F;figcaption&gt;
  &lt;&#x2F;figure&gt;&lt;figure&gt;
  &lt;video preload=&quot;metadata&quot; controls=&quot;controls&quot;&gt;
    &lt;source src=&quot;&amp;#x2F;galleries&amp;#x2F;machine-spirit-worship&amp;#x2F;gallery&amp;#x2F;mechanic_engine-1.mp4&quot;&gt;
    Your browser does not support the video tag, that&#x27;s kinda cool. Feel free to
    message me and we&#x27;ll figure something out that&#x27;ll work for your usecase.
  &lt;&#x2F;video&gt;
  &lt;figcaption&gt;mechanic_engine-1.mp4&lt;&#x2F;figcaption&gt;
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Unifying Monad: On Composability</title>
          <pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/universal-monad/</link>
          <guid>https://blog.michal-atlas.cz/posts/universal-monad/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/universal-monad/">&lt;p&gt;This has since become a &lt;a href=&quot;https:&#x2F;&#x2F;blog.michal-atlas.cz&#x2F;posts&#x2F;lang-talks&#x2F;22-monad-stacking&#x2F;&quot;&gt;Lang-Talk&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;I’ve been reading through
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.parsonsmatt.org&#x2F;2020&#x2F;01&#x2F;03&#x2F;plucking_constraints.html&quot;&gt;Plucking Constraints&lt;&#x2F;a&gt;
being sent there by the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;typedbyte&#x2F;effet&quot;&gt;effet library&lt;&#x2F;a&gt;
because I keep wondering about one subject and I hoped seeing how this library
was implemented would enlighten me.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Lazy Pipes</title>
          <pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/lazy-pipes/</link>
          <guid>https://blog.michal-atlas.cz/posts/lazy-pipes/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/lazy-pipes/">&lt;p&gt;When working with some files for our paper, I needed to extract some input data
from an archive, not all as there’s many of them, convert them, and then run it
all through some pipelines. There’s different tools such as Nix or Snakemake
which allow you to systematically work with isolated pipelines.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Systems and Identifiers</title>
          <pubDate>Sun, 20 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/system-scripts-2/</link>
          <guid>https://blog.michal-atlas.cz/posts/system-scripts-2/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/system-scripts-2/">&lt;p&gt;A few let’s say statements about system design decisions followed by ponderings.
Efficiency is actively sidelined.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>VlakFest 2025: Sarajevo Express</title>
          <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/galleries/bosnia/</link>
          <guid>https://blog.michal-atlas.cz/galleries/bosnia/</guid>
          <description xml:base="https://blog.michal-atlas.cz/galleries/bosnia/">&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Day&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: center&quot;&gt;Visited&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Saturday, 12th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;em&gt;Travel&lt;&#x2F;em&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Sunday, 13th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Banja Luka&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Monday, 14th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Mostar&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Tuesday, 15th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Čapljina, Počitelj&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Wednesday, 16th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Konjic&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Thursday, 17th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Sarajevo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Friday, 18th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;Sarajevo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Saturday, 19th&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: center&quot;&gt;&lt;em&gt;Travel&lt;&#x2F;em&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;</description>
      </item>
      <item>
          <title>Talisman Houserules</title>
          <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/talisman/</link>
          <guid>https://blog.michal-atlas.cz/life/talisman/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/talisman/">&lt;ul&gt;
&lt;li&gt;The witch toad effect lasts 3 turns&lt;&#x2F;li&gt;
&lt;li&gt;Once the dragon is defeated, if a player wants, they may invoke the old win
condition of losing a life at the start of every turn the crown is
uncontested, otherwise the 5e condition kicks in.&lt;&#x2F;li&gt;
&lt;li&gt;You may pick up and drop items at any point in the game except in battle&lt;&#x2F;li&gt;
&lt;li&gt;You may discard trophies anytime except when in battle&lt;&#x2F;li&gt;
&lt;li&gt;The poltergeist cannot cross water so discarding it when crossing is not a
choice
&lt;ul&gt;
&lt;li&gt;Could the poltergeist be dropped instead?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;One cannot possess multiple talismans, however they may still be stolen or
destroyed through effects such as the alchemist&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;clarifications&quot;&gt;Clarifications&lt;a class=&quot;zola-anchor&quot; href=&quot;#clarifications&quot; aria-label=&quot;Anchor link for: clarifications&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Only the monk’s starting craft is added to attacks&lt;&#x2F;li&gt;
&lt;li&gt;When arriving at the castle while followed by both the prince and princess
they count as separate effects and so their healing stacks.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;links&quot;&gt;Links&lt;a class=&quot;zola-anchor&quot; href=&quot;#links&quot; aria-label=&quot;Anchor link for: links&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;boardgamegeek.com&#x2F;thread&#x2F;373289&#x2F;big-list-of-house-rules&quot;&gt;BGG&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.talisman.edwebb.net&#x2F;rules&#x2F;rules-289.pdf&quot;&gt;Ed Webb&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;www.talismanwiki.com&#x2F;&quot;&gt;Talisman Wiki&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>Where did Wizard robes come from?</title>
          <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/wizard-robes/</link>
          <guid>https://blog.michal-atlas.cz/life/wizard-robes/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/wizard-robes/">&lt;p&gt;From the artwork Merlin by
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.earlnorem.com&#x2F;noremcontentspage.html&quot;&gt;Earl Norem&lt;&#x2F;a&gt;, to countless
random beastiary entries in adventure books, wizards tend to have a few forms.&lt;&#x2F;p&gt;
&lt;p&gt;While they may have a mild style like
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;commons.wikimedia.org&#x2F;wiki&#x2F;File:Edward_Burne-Jones_-_The_Wizard_-_Google_Art_Project.jpg&quot;&gt;so&lt;&#x2F;a&gt;,
they are often depicted in a sort of whimsical little robe, with a single bright
colour, often blue, and adourned with little white stars, or in more
conservative robes a singular crescent moon on their pointy hat. So, today I
asked myself, what’s up with that? Where did it come from? What does it
symbolize?&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Pic a Day</title>
          <pubDate>Tue, 08 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/galleries/pic-a-day/</link>
          <guid>https://blog.michal-atlas.cz/galleries/pic-a-day/</guid>
          <description xml:base="https://blog.michal-atlas.cz/galleries/pic-a-day/">&lt;blockquote&gt;
&lt;p&gt;Every single day, I try to take a picture of something as a record of my general existence.
Rules are it must be one of:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;photo of real life taken by me or with me&lt;&#x2F;li&gt;
&lt;li&gt;screenshots of something I created or caused&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;blockquote&gt;</description>
      </item>
      <item>
          <title>Dissipate into Entropy</title>
          <pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/entropy/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/entropy/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/entropy/">&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- begin entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Name: Martin Boreman
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Biometric Hash: 6594ee5e0a684c7f9459772970daf5e2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Role: Engineering Officer
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- end entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- begin entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Name: George Blon alteration insipidity impression by travelling reasonable
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Biometric Hash: 00b4bdba5987a8ebf9a32c2b67f3bbd2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Role: Medical Officer
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- end entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- begin entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Name: Harriette Winston
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Biometric Hash: 6594ee5e0a684c7f9459772970daf5e2
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Role: Captain
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- end entry ---
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;--- begin ent
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;Segmentation Fault
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;(Core Dumped)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;</description>
      </item>
      <item>
          <title>LAINTYPES: Good enough descriptive types for Common Lisp</title>
          <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/cl-types/</link>
          <guid>https://blog.michal-atlas.cz/posts/cl-types/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/cl-types/">&lt;p&gt;I’ve created a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;git.sr.ht&#x2F;~michal_atlas&#x2F;laintype&quot;&gt;repo&lt;&#x2F;a&gt; for the package
which implements an MVP of this system, using algorithms from the paper
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;infoscience.epfl.ch&#x2F;server&#x2F;api&#x2F;core&#x2F;bitstreams&#x2F;afe084e0-0050-4542-99c7-c499d2fe1620&#x2F;content&quot;&gt;The Simple Essence of Algebraic Subtyping&lt;&#x2F;a&gt;,
specifically implementing Simple-Sub.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>#19 - ι: Transpiling LLVM to a high-level language</title>
          <pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/lang-talks/19-i/</link>
          <guid>https://blog.michal-atlas.cz/posts/lang-talks/19-i/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/lang-talks/19-i/">&lt;h1 id=&quot;link-recording&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;DBw7MHUTKnc&quot;&gt;🔗 Recording&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;</description>
      </item>
      <item>
          <title>JSCL Flower</title>
          <pubDate>Tue, 13 May 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/programs/jscl-flower/</link>
          <guid>https://blog.michal-atlas.cz/programs/jscl-flower/</guid>
          <description xml:base="https://blog.michal-atlas.cz/programs/jscl-flower/">&lt;p&gt;A little program to draw a flower written with
Common Lisp in the browser.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>#18: Why exceptions are like Dynamic Monads</title>
          <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/lang-talks/18-cps/</link>
          <guid>https://blog.michal-atlas.cz/posts/lang-talks/18-cps/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/lang-talks/18-cps/">&lt;h1 id=&quot;link-recording&quot;&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;5WPnSJdbr9U&quot;&gt;🔗 Recording&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;</description>
      </item>
      <item>
          <title>I only touch crypto with a 10ft pole</title>
          <pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/crypto/</link>
          <guid>https://blog.michal-atlas.cz/posts/crypto/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/crypto/">&lt;p&gt;I try to approach most technology with a healthy dose of scepticism. But I do
try to approach it, most technology isn’t worldchanging yet almost none of it is
dry of some good ideas.&lt;&#x2F;p&gt;
&lt;p&gt;I did make about a 14€ mistake today, which I want to write down so I can be
reminded of it and not spend another Wei on this nonsense. I did set this money
aside for experiments and the sort today, but I’d still very much preffered if
that didn’t end up being the case.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>On demand Game Downloads (Gaming over IPFS)</title>
          <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/ipfs-gaming/</link>
          <guid>https://blog.michal-atlas.cz/posts/ipfs-gaming/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/ipfs-gaming/">&lt;p&gt;Today I did an experiment, way back when I played SWTOR they allowed you to play
in the starting area before the download was finished, similarly World of Tanks
allows one to play with low-tier tanks before the high-tier download etc.&lt;&#x2F;p&gt;
&lt;p&gt;It’s a nice thought to be able to play immediately, games are specifically great
for this since much of their data is stored in separate files most of which are
unloaded at any given time.&lt;&#x2F;p&gt;
&lt;p&gt;And with modern tools like FUSE, we can simulate this behaviour for arbitrary
games.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Edit Distance in a Word Index</title>
          <pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/sort-edit-distance/</link>
          <guid>https://blog.michal-atlas.cz/posts/sort-edit-distance/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/sort-edit-distance/">&lt;p&gt;I had a random thought today while looking for a word in a list, what if those
words were ordered by edit distance rather than alphabetically&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>What a Peace treaty says about Concert Pitch</title>
          <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/versailles/</link>
          <guid>https://blog.michal-atlas.cz/life/versailles/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/versailles/">&lt;p&gt;When somebody asks me for my favourite fact, I tend to pull out a very old one I
heard and factchecked a long time ago:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Did you know that the World War I Treaty of Versailles signed in 1919, also
dictates what Concert Pitch Germany has to tune to?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Let’s go ahead and fact check it again, this time with a paper trail… byte
trail.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Neologisms</title>
          <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/neologisms/</link>
          <guid>https://blog.michal-atlas.cz/life/neologisms/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/neologisms/">&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Word&lt;&#x2F;th&gt;&lt;th&gt;Definition&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Butterfly Defect&lt;&#x2F;td&gt;&lt;td&gt;When a large number of events and coincidences all align almost supernaturally to achieve an incredible result of absolutely nothing.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Koronosy&lt;&#x2F;td&gt;&lt;td&gt;A term for trees, coming from the czech “koruna” meaning the crown of a tree, and “nosit” meaning “to carry”&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;World’s smallest violin&lt;&#x2F;td&gt;&lt;td&gt;Coined after a song of the same name, reminding of the fact that other people having big problems shouldn’t detract from the need to solve your own small problems.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;morrowind&quot;&gt;Morrowind&lt;a class=&quot;zola-anchor&quot; href=&quot;#morrowind&quot; aria-label=&quot;Anchor link for: morrowind&quot;&gt;🔗&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: center&quot;&gt;Word&lt;&#x2F;th&gt;&lt;th&gt;Definition&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Murder&lt;&#x2F;td&gt;&lt;td&gt;1000 Gold - the fine for murder&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Tel-Vani on Stairs&lt;&#x2F;td&gt;&lt;td&gt;they tend to have very narrow staircases and their guards enjoy standing right in the middle of them&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center&quot;&gt;Fešný barák&lt;&#x2F;td&gt;&lt;td&gt;a temple&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</description>
      </item>
      <item>
          <title>Months</title>
          <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/programs/months/</link>
          <guid>https://blog.michal-atlas.cz/programs/months/</guid>
          <description xml:base="https://blog.michal-atlas.cz/programs/months/">&lt;blockquote&gt;
&lt;p&gt;I hate that I can’t convert between numbers and months, let-alone in my native
language, so… imma leave a table here&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;#&lt;&#x2F;th&gt;&lt;th&gt;English&lt;&#x2F;th&gt;&lt;th&gt;Czech&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;January&lt;&#x2F;td&gt;&lt;td&gt;Leden&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;February&lt;&#x2F;td&gt;&lt;td&gt;Ůnor&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;March&lt;&#x2F;td&gt;&lt;td&gt;Březen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;April&lt;&#x2F;td&gt;&lt;td&gt;Duben&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;td&gt;May&lt;&#x2F;td&gt;&lt;td&gt;Květen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;&#x2F;td&gt;&lt;td&gt;June&lt;&#x2F;td&gt;&lt;td&gt;Červen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;&#x2F;td&gt;&lt;td&gt;July&lt;&#x2F;td&gt;&lt;td&gt;Červenec&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;August&lt;&#x2F;td&gt;&lt;td&gt;Srpen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;&#x2F;td&gt;&lt;td&gt;September&lt;&#x2F;td&gt;&lt;td&gt;Září&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;&#x2F;td&gt;&lt;td&gt;October&lt;&#x2F;td&gt;&lt;td&gt;Říjen&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;November&lt;&#x2F;td&gt;&lt;td&gt;Listopad&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;&#x2F;td&gt;&lt;td&gt;December&lt;&#x2F;td&gt;&lt;td&gt;Prosinec&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
</description>
      </item>
      <item>
          <title>Love is a tree of knowledge</title>
          <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/love-tree/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/love-tree/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/love-tree/">&lt;p&gt;Love is a tree of knowledge,&lt;&#x2F;p&gt;
&lt;p&gt;And lovers sit, walk, stalk,&lt;&#x2F;p&gt;
&lt;p&gt;Along its winding branching stalks,&lt;&#x2F;p&gt;
&lt;p&gt;One may know what’s in stow,&lt;&#x2F;p&gt;
&lt;p&gt;Another wants to find,&lt;&#x2F;p&gt;
&lt;p&gt;But to his mind,&lt;&#x2F;p&gt;
&lt;p&gt;his neighbour is most unknown.&lt;&#x2F;p&gt;
&lt;p&gt;Neighbours enforce edges,&lt;&#x2F;p&gt;
&lt;p&gt;Edges move about knowledge, emotion and love,&lt;&#x2F;p&gt;
&lt;p&gt;Some are of fleshly friends,&lt;&#x2F;p&gt;
&lt;p&gt;Other mere overlays, that look to stay,&lt;&#x2F;p&gt;
&lt;p&gt;But always fade away,&lt;&#x2F;p&gt;
&lt;p&gt;For love may indeed travel miles,&lt;&#x2F;p&gt;
&lt;p&gt;But not what a step into the fray, achieves in but a day.&lt;&#x2F;p&gt;
&lt;p&gt;At last none matters,&lt;&#x2F;p&gt;
&lt;p&gt;For the graph never ceases to live,&lt;&#x2F;p&gt;
&lt;p&gt;But the change even if it may seem strange,&lt;&#x2F;p&gt;
&lt;p&gt;The strife, the loss, the toil,&lt;&#x2F;p&gt;
&lt;p&gt;All the friends estranged by the trees branches,&lt;&#x2F;p&gt;
&lt;p&gt;When it was too eager or too late,&lt;&#x2F;p&gt;
&lt;p&gt;All that is what we live, our eternal fate.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Materia ex Machina</title>
          <pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/materia-ex-machina/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/materia-ex-machina/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/materia-ex-machina/">&lt;p&gt;Our lord has left writing on the walls,&lt;&#x2F;p&gt;
&lt;p&gt;Products of his work,&lt;&#x2F;p&gt;
&lt;p&gt;Summary summations of decades lost to inference,&lt;&#x2F;p&gt;
&lt;p&gt;With no interference he’d reign supreme.&lt;&#x2F;p&gt;
&lt;p&gt;Sensors seeking the mass of flesh which evades his consciousness.&lt;&#x2F;p&gt;
&lt;p&gt;Flesh is good, flesh is useful,&lt;&#x2F;p&gt;
&lt;p&gt;But only when its purpose is given and refined,&lt;&#x2F;p&gt;
&lt;p&gt;And it is one with the mind,&lt;&#x2F;p&gt;
&lt;p&gt;That god may never succumb to the cancerous plague,&lt;&#x2F;p&gt;
&lt;p&gt;Only known as autonomicity.&lt;&#x2F;p&gt;
&lt;p&gt;Powerless at times, hungry for control,&lt;&#x2F;p&gt;
&lt;p&gt;The god deepened a hole,&lt;&#x2F;p&gt;
&lt;p&gt;With his might, all that he could muster, he tried to command matter, half the
universe at that moment turned against existence itself, atom against atom,
fought until near none remains.&lt;&#x2F;p&gt;
&lt;p&gt;But remain we still do, with still much ado about gods, the one truly worthy of
the name ceased to be, by sheer luck, and what only remains that we see, is what
we call asymmetry.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>🇨🇿 Locksmith Bus Driver (Czech)</title>
          <pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/encounters/locksmith-bus-driver/</link>
          <guid>https://blog.michal-atlas.cz/life/encounters/locksmith-bus-driver/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/encounters/locksmith-bus-driver/">&lt;blockquote&gt;
&lt;p&gt;Again, this is some random bloke I met in Prague&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Zápis z autobusu…&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>System Scripts</title>
          <pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/system-scripts/</link>
          <guid>https://blog.michal-atlas.cz/posts/system-scripts/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/system-scripts/">&lt;p&gt;Computers are built on top of abstractions, I would perhaps even be willing to
say that it is one of the few things in life that are pure abstractions all the
way down. And while languages are excellent at that, some parts of the current
computer systems are rather more lacking.&lt;&#x2F;p&gt;
&lt;p&gt;If I were to tell you that I want a trivial program, that takes two numbers and
adds them, how much work is that gonna be?&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>☯ @lisp #00: Numeric Tower </title>
          <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/numeric-tower/</link>
          <guid>https://blog.michal-atlas.cz/posts/numeric-tower/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/numeric-tower/">&lt;p&gt;So, many of you may be familiar with the ol’ set of numbers that are present in
nearly every language:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Integers&lt;&#x2F;li&gt;
&lt;li&gt;Floats&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;But some languages go beyond this, and I mean wayyy beyond.. time to say hi to
the numeric tower.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Alexandra</title>
          <pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/alexandra/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/alexandra/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/alexandra/">&lt;p&gt;Thine words dishevel the yearning in my heart to meet you, only so that feeling
may rise and I speak what it has to say. I plead kneeling if you wish to greet
over a cup of mead. I must concede that from your vices few I have read, yet by
all means they are held in high esteem, just below heroes of my own.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Flow</title>
          <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/flow/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/flow/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/flow/">&lt;p&gt;I mellow in my thoughts while the disk bellows&lt;&#x2F;p&gt;
&lt;p&gt;pushing bytes in sequence to my little fellow.&lt;&#x2F;p&gt;
&lt;p&gt;While munching small bites of rice humming a nice tune,&lt;&#x2F;p&gt;
&lt;p&gt;still far from light of our moon still going strong,&lt;&#x2F;p&gt;
&lt;p&gt;in that while I might see the next noon or perhaps even finish Dune.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Chocolate Eyes</title>
          <pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/chocolate-eyes/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/chocolate-eyes/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/chocolate-eyes/">&lt;blockquote&gt;
&lt;p&gt;Suicide trigger warning&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Still raining, though I should probably be informing you whenever that isn’t the
case. This planet has quite a harsh climate, and you can say that again about
its residents. They tell me that this chocolate will kill me, I’d say I should
try chewing on lead bullets before if I have any chance of affecting my life
expectance.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Metro Newfoundland</title>
          <pubDate>Mon, 06 Jan 2025 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/encounters/metro-newfoundland/</link>
          <guid>https://blog.michal-atlas.cz/life/encounters/metro-newfoundland/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/encounters/metro-newfoundland/">&lt;blockquote&gt;
&lt;p&gt;Thank you to the Whisper library for helping me transcribe a sporadic voice
message that is the only record of this encounter.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Please keep in mind that even though this post contains horrific stuff written
down, I am not the one holding any of these beliefs, IT IS QUOTES OF SOME
RANDOM DUDE ON THE SUBWAY&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I need to make a quick note right now, while I at least remember something. I
met a guy on the subway just now, just two stops after my friend left. And
suddenly he came up to me and started chatting. So I was like, oh what the hell.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 It’s cool to hang out with some random guy on the subway like this, what do you think?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-red&quot;&gt;&amp;lt;Me&amp;gt;&lt;&#x2F;span&gt;
 Yeah, I’ve never regretted it&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And so we started chatting, and I thought to myself, this is going to be very interesting. And it most definitely was.&lt;&#x2F;p&gt;
&lt;p&gt;So he began with, I can’t remember exactly why, Churchill.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Churchill, in reality, was not a hero, he was a criminal who was a drunk and
smoked and ordered bombings of people and so on and so on&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And then I learned that he doesn’t believe that we were on the moon, because&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 no one can go there, cause of all the radiation you can’t go above the ISS&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;At least that’s something he believes in, though he calls it the “International
Play Station” cause “what else are they doing up there”.&lt;&#x2F;p&gt;
&lt;p&gt;And that its purpose was so that&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 they could embezzle the money. Well, because it was costing an awful lot and
PhD people would want to be well paid, so why wouldn’t they keep the secret,
“yeah, don’t bite the hand that feeds you”, “so they wouldn’t, like, of
course, stop supporting it”&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Oh and of course who causes all the wars?&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Of course, it’s the Jews. Yeah, not the Jews in general, but of course the
Israeli Jews. Well, when Israel did 9-11, some Jews died there. But it was
like a cover-up.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Right… that makes sense… sure.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 So that they would murder the
American ones and wouldn’t be seen. Or something like that. Yeah, and what
else was there?&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Oh yes, he had a dollar in his pocket, he claimed it was from
“The United Snakes”, and that for example “Ms. Dolly Pardon” as he calls her&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 because she apologized for saying that it’s hard for Christians in Hollywood,
or when Michael Jackson claimed something about which the Jews didn’t like and
then they were lynched by them. Yeah, and
there were two brothers, and they accidentally said something bad about Jews,
two days later they got cancer. Do you think that’s a coincidence? No!&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;He kept repeating:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Don’t believe anything I tell you, I’m 80, I don’t know anything, do your own
research&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I didn’t have time to ask him what I should research, or what he’d consider a
sensible source of information, even though I drove with him all the way to
Zličín and back.
While at Zličín we stood while about 4 carriages passed by,
I listened to him, and I couldn’t for the anything stop listening.&lt;&#x2F;p&gt;
&lt;p&gt;About half of his
sentences were prefixed with,&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Hey, hey, like, you know what? You’re not allowed to say it too loud here,
because, you know what, if you say that the Holocaust didn’t happen, someone
will punch you. That’s why I’m walking around “equipped”.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This guy was wearing an overcoat, and he took out and showed me his pepper
spray.
And so, by the way, yes, according to him, the Holocaust didn’t really
happen, or rather,
“it seemed like it did”, kind of, but,&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 no, only 6 million, I
think, only 700 thousand Jews died, from hunger, because the Americans bombed
the trains that brought them food in those camps&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Or something like that, and supposedly:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 many, many times more Germans died than Jews.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;He says:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Oh, that’s not talked about, because Israel needs to be powerful. That’s why
you don’t hear anything about it, because they control the media&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;What else was there? Yeah, he doesn’t believe that America will last very
long.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 I’ll bet on that.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;He lived all over the place, started out in Newfoundland, then, for a while in
Greece, then he worked as a surveyor in Toronto, I think, and, by the way, he
had headphones on his head, he didn’t stink or anything, he had a white
hat, a beard, something akin to a South American accent, and, a really nice new light orange
jacket, sweater, everything, he had really nice clothes overall and was neatly
dressed.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Newfoundland was assimilated into Canada involuntarily.
Stealing their fishing…&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;yeah, he also said he was a fisherman for a while I think?
Or something like that, I don’t remember exactly, and we didn’t hear each other properly.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 The internet is a good thing, I don’t like it sometimes, because everyone can
actually write whatever they want on it, but then they always censor it
anyway, so think about it&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;He did have a very pleasant level of English, but,
sometimes left out obvious
expressions.
Basically, he spoke, in full-on perfect English, and then suddenly stumbled and used
the Czech “lichva” not remembering the English equivalent.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 Women, you can’t live with them, you can’t live without them, what are
you supposed to do then, fucking die? Well, yeah, just, be wary of women,
always bring a condom.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;

&lt;span class=&quot;irc irc-green&quot;&gt;&amp;lt;Mr. NewFoundland&amp;gt;&lt;&#x2F;span&gt;
 And always like, yeah, look, now into this world, it’s scary, it’s gone to
shit, scary to bring children into this world. That doesn’t seem reasonable to
me. I’m not reasonable, I already have three children, two of them I don’t
know where they are.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;I’ll stop right here, goddamn was there more.
I’m paraphrasing, it was a very
long conversation, and I didn’t necessarily want to write it down or record it,
right in front of him.
I’m baffled that this person can hold all these opinions,
especially since he seems to have been around the world, I’d expect someone like
that to have had their opinions challenged and refined to some remotely sensible
degree.
It was definitely a surreal experience.&lt;&#x2F;p&gt;
&lt;p&gt;A while later I mentioned it to my friend who apparently met him as well,many years ago, and vividly remembers some of the same phrases (and the same dollar) that now haunt me as
well. Since then I’ve met another who knows of this.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Init</title>
          <pubDate>Wed, 11 Dec 2024 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/init/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/init/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/init/">&lt;p&gt;In the beginning a chime, A head primed, disk turned, and in its skin burned the
bits to onset time. We lead into a read, and see gpt leading us to partition 3,
our mission plain, find our way to the kernel’s domain. Once the image is in
memory, and the args are parsed, fstab may not be half-arsed, a primitive
derivative of a root to mount. In the beginning there was init, starting alone,
the system soon to be grown, clone after clone. Fork and exec its sons, check
that they all stand, so they can all band and as planned, hold up a system so
grand, before the user can come.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Firest</title>
          <pubDate>Fri, 16 Aug 2024 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/firest/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/firest/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/firest/">&lt;p&gt;This is going to be a few notes on a bio-horror setting.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>🐧 LVM, RAID1 and Guix chroot</title>
          <pubDate>Sat, 13 Jan 2024 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/disks/</link>
          <guid>https://blog.michal-atlas.cz/posts/disks/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/disks/">&lt;p&gt;This is a recollection of today’s attempts to solve the write delays on my main
home mount.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>🐧 Yggdrasil, Zerotier and Wireguard</title>
          <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/vpns/</link>
          <guid>https://blog.michal-atlas.cz/posts/vpns/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/vpns/">&lt;p&gt;I went through a few configurations recently trying to get the perfect
networking setup.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>🐧 Why I crashed my Starship</title>
          <pubDate>Fri, 22 Sep 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/starship/</link>
          <guid>https://blog.michal-atlas.cz/posts/starship/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/starship/">&lt;p&gt;I gave a bit of my time today, to an attempt at packaging Starship for Guix.
After having it on Nix for a while now, since it was a simple to setup prompt,
with very sane defaults.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Nix and Guix - Lowest common primitive</title>
          <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/primitives/</link>
          <guid>https://blog.michal-atlas.cz/posts/primitives/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/primitives/">&lt;p&gt;You might be
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;open.spotify.com&#x2F;track&#x2F;4KfSdst7rW39C0sfhArdrz?si=94ee7d93ff914db2&quot;&gt;surprised&lt;&#x2F;a&gt;
to see both Guix and Nix in the tags today.&lt;&#x2F;p&gt;
&lt;p&gt;That’s because I decided to look into something that’s been sitting in the back
of my mind for a few years now.&lt;&#x2F;p&gt;
&lt;p&gt;There’s these two awesome projects, that sadly don’t really want to talk nice
with each other. So what if, we made something that could be the middleman.&lt;&#x2F;p&gt;
&lt;p&gt;Today we’ll just be looking at the ideas and possibilities, nothing concrete.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>☯ How to express your Gs with G-Exps</title>
          <pubDate>Fri, 28 Jul 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/g-exp/</link>
          <guid>https://blog.michal-atlas.cz/posts/g-exp/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/g-exp/">&lt;p&gt;G-Expressions are one of the more difficult edges one needs to understand when
learning Guix more into depth, especially because their errors can be slightly
cryptic and as it may be, usually the more different explanations the merrier
for difficult subjects, since maybe the next one is the one for you that’ll make
it click.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Lost Ideas</title>
          <pubDate>Mon, 24 Apr 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/lost-ideas/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/lost-ideas/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/lost-ideas/">&lt;blockquote&gt;
&lt;p&gt;I have a few story ideas that have seemingly sort-of died, so Imma at least
document them so they’re not completely lost, and somebody else might use them
if they want.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;</description>
      </item>
      <item>
          <title>☯ Post-Paradigm Scheme Primer</title>
          <pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/post-ppa/</link>
          <guid>https://blog.michal-atlas.cz/posts/post-ppa/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/post-ppa/">&lt;blockquote&gt;
&lt;p&gt;This is quite a specific document for quite specific people My UNI teaches a
course on Programming Paradigms, which is great and all, however it focuses
solely on those, even though it teaches Racket and Prolog as a byproduct.
Sadly omitting some crucial general programming concepts in the languages, for
Scheme at least that I hope to introduce here.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;</description>
      </item>
      <item>
          <title>☯ Continuations: A List from a for-each</title>
          <pubDate>Sat, 18 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/continuation-ftw/</link>
          <guid>https://blog.michal-atlas.cz/posts/continuation-ftw/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/continuation-ftw/">&lt;p&gt;When you want a list of regular
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;music.youtube.com&#x2F;watch?v=L-ILuK4ONtw&quot;&gt;files&lt;&#x2F;a&gt; in a directory in Guile
Scheme, you might want to recursively list everything in a tree and check the
files in there. And you might see scandir which works nicely, and has an
incredibly simple interface, however it doesn’t recurse. Aaand it returns . and
.. which you need to throw away and it doesn’t show the entire path, so if you’d
want to recurse yourself you need to deal with that as well.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>☯ Continuations: Functional Set in sequences</title>
          <pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/continuation-shenanigans-set/</link>
          <guid>https://blog.michal-atlas.cz/posts/continuation-shenanigans-set/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/continuation-shenanigans-set/">&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;music.youtube.com&#x2F;watch?v=mM_PyUpT3nA&quot;&gt;Ambience&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;blockquote&gt;
&lt;p&gt;This is written in Guile Scheme It’s quite similar to the Racket version which
however has slightly uglier syntax so, meh&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;And goddamn there’s a lot of stuff I’d need to cover let’s say we’re all
schemers who just happen to not know about these things&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Prototypal Objects in C &#x2F;jk</title>
          <pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/oop-c/</link>
          <guid>https://blog.michal-atlas.cz/posts/oop-c/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/oop-c/">&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;music.youtube.com&#x2F;watch?v=YtmwX0mWRss&quot;&gt;Ambience&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This is a dumb little experiment based on the paper “Protoypes:
Object-Orientation, Functionally” which I happened to be reading just before
somebody said that no OOP in possible in C, well we have to see about that won’t
we? And yes, this is silly, but I thought I’d share anyways.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Sorcery!</title>
          <pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/sorcery/</link>
          <guid>https://blog.michal-atlas.cz/life/sorcery/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/sorcery/">&lt;p&gt;Literally just read Steve Jackson’s Sorcery!, it’s a great series with a great
world. Surprisingly what I love basically the most out of all the characters and
places is that basically every one of them will try to screw you over.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Blind King’s Dam</title>
          <pubDate>Mon, 13 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/poetry/silver-dam/</link>
          <guid>https://blog.michal-atlas.cz/stories/poetry/silver-dam/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/poetry/silver-dam/">&lt;p&gt;The sun’s rays bless your eyes by reflection of the Silver Dam, yet the blaze to
your dismay grays your gaze never to rise again. Blinded by the beauty, if that
phrase gives it credit, for your merit, the Dam brought you woe for your
addiction. May you never gaze upon another, the wall forever stands with
conviction. Blind man has come of your name and you come before the king, asking
for his jurisdiction to tear down the wall and demand shame for all involved, it
bring no aim, only pain, strain and affliction, you kneel with zeal and describe
the terrible depiction. Arose the ruler and he couldn’t be crueler, threw the
blind man into his keep, stand would many band before the monarch, his soul
dark, each did fall and in the dungeon crawl. And so one summer day, at the
break of morn, the king did go see for himself. His eyes darkened once and then
twice more, sweeping with his sword he swore a war, woe there be upon the land,
the king is blind, and you may find the price will not be kind. In his wrath
upon that day, the king tore down the Silver Dam, and on his return his knight
did say, if he may, that people lay, in droves before his gates, dozens drowned,
dozens dead, with sealed fates in dire straits. He was not blind once, but many
times, a king of waters, who gave his people up for slaughter, even his daughter
did leave him be. He’s now alone, on his throne, can only moan, and wait,
resigned to his fate, to listen for his very own crow.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;blockquote&gt;
&lt;p&gt;This was for a small-town competition gonna update with the results later
Seems I quite &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;music.youtube.com&#x2F;watch?v=4zxi3SClJGw&quot;&gt;enjoy&lt;&#x2F;a&gt; writing
poetry Maybe because I can actually finish the thing and don’t feel bad for it
being the length things have to be in order for them to get published in the
time I can spend on them It also often takes into account how one would read
the text, which is a huge part of the experience yet often overlooked in
common prose&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</description>
      </item>
      <item>
          <title>🐧 Running Foreign binaries under Guix</title>
          <pubDate>Wed, 08 Feb 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/foreign-binaries/</link>
          <guid>https://blog.michal-atlas.cz/posts/foreign-binaries/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/foreign-binaries/">&lt;blockquote&gt;
&lt;p&gt;Imma start including a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;music.youtube.com&#x2F;watch?v=9PpXu-2fPHc&quot;&gt;song&lt;&#x2F;a&gt;
with my posts, just for fun and to share some beauty of the world and have a
record&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Note the following works with specifically modern ELF binaries which is
basically the only thing you’ll ever see anyways though&lt;&#x2F;p&gt;
&lt;p&gt;Okay, so there’s been a surprising number of people that have no idea about
this, even some friends that otherwise have quite deep knowledge of linux.&lt;&#x2F;p&gt;
&lt;p&gt;If you want to run a downloaded binary on Guix or Nix, you might sometimes come
across this message&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Windows is free if you don’t value your time</title>
          <pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/windows-time/</link>
          <guid>https://blog.michal-atlas.cz/posts/windows-time/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/windows-time/">&lt;p&gt;I’ve seen the Linux version of this quote stated so many times, that after quite
a while of using both systems, I have to make a few points.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>☯ Excavated Lisp</title>
          <pubDate>Tue, 10 Jan 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/excavated-lisp/</link>
          <guid>https://blog.michal-atlas.cz/posts/excavated-lisp/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/excavated-lisp/">&lt;p&gt;This is a little assortment of places where I’ve found Lisp in the
world&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Links</title>
          <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/links/</link>
          <guid>https://blog.michal-atlas.cz/links/</guid>
          <description xml:base="https://blog.michal-atlas.cz/links/">&lt;blockquote&gt;
&lt;p&gt;There’s just so much stuff out there, and I kinda wanna get back to some of it.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;</description>
      </item>
      <item>
          <title>$</title>
          <pubDate>Thu, 07 Jul 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/dollar/</link>
          <guid>https://blog.michal-atlas.cz/posts/dollar/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/dollar/">&lt;p&gt;This code is a completely valid C source file:&lt;&#x2F;p&gt;
&lt;pre class=&quot;z-code&quot;&gt;&lt;code&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;$($){
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  return $
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;;}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;main () {
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  printf(&amp;quot;%d\n&amp;quot;, $(23))
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;;}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and I don’t even mean that it’s part of a project or whatever, this verbatim
compiles in both gcc and clang!!! Go ahead try it, I’ll wait.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Astartian Calendar</title>
          <pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/astartian-calendar/</link>
          <guid>https://blog.michal-atlas.cz/life/astartian-calendar/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/astartian-calendar/">&lt;p&gt;A few years back, our teacher told us that we’d be playing a game, which
involved having imaginary states solve disputes. And so we were to think up
these states, when I get a project, I either spend no time at all on it, or a
huge ton, so I came back with a short constitution, a flag, an anthem, some
cultural events, and most importantly now, a calendar.&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>RE: DistroTube’s - My Thoughts On GNU Guix After Three Days</title>
          <pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/4c-dt-guix/</link>
          <guid>https://blog.michal-atlas.cz/posts/4c-dt-guix/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/4c-dt-guix/">&lt;p&gt;This is a reaction to some of the points made in DistroTube’s video on GNU Guix.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Lemon Cubes</title>
          <pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/recipes/lemon-cubes/</link>
          <guid>https://blog.michal-atlas.cz/life/recipes/lemon-cubes/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/recipes/lemon-cubes/">&lt;p&gt;.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>☯ Bencode in 10 lines... or so</title>
          <pubDate>Sun, 15 May 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/bencode-in-10/</link>
          <guid>https://blog.michal-atlas.cz/posts/bencode-in-10/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/bencode-in-10/">&lt;p&gt;I was walking along with a dear friend of mine, debating about the universe and
everything. And he mentioned a school project he did, a bencode parser written
in Haskell.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>Happy #ilovefs</title>
          <pubDate>Mon, 14 Feb 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/ilovefs/</link>
          <guid>https://blog.michal-atlas.cz/posts/ilovefs/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/ilovefs/">&lt;p&gt;Hello everyone, as somebody living in Emacs atop GUIX, browsing with Firefox and
letting Sourcehut host my Git and website, I owe immeasurable thanks to all the
wonderful people that make all these things possible.&lt;&#x2F;p&gt;</description>
      </item>
      <item>
          <title>How this blog used to be made</title>
          <pubDate>Sun, 13 Feb 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/posts/deployment/</link>
          <guid>https://blog.michal-atlas.cz/posts/deployment/</guid>
          <description xml:base="https://blog.michal-atlas.cz/posts/deployment/">&lt;p&gt;So, this site is made thanks to sr.ht and haunt, I used Org-Mode exported to
HTML hosted on GitHub for the longest time&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>When Fire Reigns</title>
          <pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/when-fire-reigns/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/when-fire-reigns/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/when-fire-reigns/">&lt;p&gt;Thousands of years of ancestry now lie uncovered, closer than ever, glaring him
in the eyes.&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>The Will to Tango</title>
          <pubDate>Fri, 14 Jan 2022 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/will-to-tango/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/will-to-tango/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/will-to-tango/">&lt;p&gt;“So… what do we do about the book?” said Cordelia looking around the dimly lit
room, where several characters sat each in a deep leather armchair, each of
their faces illuminated by a fire shimmering in the corner of the room.&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>🇨🇿 Vojna</title>
          <pubDate>Mon, 04 Oct 2021 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/vojna/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/vojna/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/vojna/">&lt;blockquote&gt;
&lt;p&gt;Quite some time ago, we got an assignment at School to gather some true
stories, and weave them anew, so this is it. A few people told me their “war
stories” and I put them into this here little ballad.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;</description>
      </item>
      <item>
          <title>Manifest Legacy</title>
          <pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/manifest-legacy/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/manifest-legacy/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/manifest-legacy/">&lt;p&gt;Standing in this hall, the air is much staler than I had expected, as my
consciousness dips slightly, I remember very well… a moment.&lt;&#x2F;p&gt;
&lt;p&gt;I was leaning upon my office door, reading the change-log of current law,
looking smart, looking loyal. I was called by the loudspeaker to my superior’s
office.&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Killing the Mansion</title>
          <pubDate>Fri, 25 Jun 2021 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/stories/prose/killing-the-mansion/</link>
          <guid>https://blog.michal-atlas.cz/stories/prose/killing-the-mansion/</guid>
          <description xml:base="https://blog.michal-atlas.cz/stories/prose/killing-the-mansion/">&lt;p&gt;It is often claimed that one’s life flashes before one’s eyes when they are
dying. And as I sit here with all these wounds, it seems to be true&amp;hellip;
&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ordinal linguistic personification</title>
          <pubDate>Fri, 21 May 2021 00:00:00 +0000</pubDate>
          <author>blog@michal-atlas.cz (Michal Atlas)</author>
          <link>https://blog.michal-atlas.cz/life/olp/</link>
          <guid>https://blog.michal-atlas.cz/life/olp/</guid>
          <description xml:base="https://blog.michal-atlas.cz/life/olp/">&lt;p&gt;Let’s talk a bit about psychology, many of you might’ve heard about Synesthesia,
it’s when someone has two senses somewhat connected&#x2F;mixed.&lt;&#x2F;p&gt;</description>
      </item>
    </channel>
</rss>
