<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Welcome to The Elemental Wizard</title>
      <link>https://fire-fart-water-earth.net</link>
      <description>I am the Wizard! I can cast cringe!</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://fire-fart-water-earth.net/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 30 Mar 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>`tar` vs `rsync`</title>
          <pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2026/2026-03-30-tar-vs-rsync/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2026/2026-03-30-tar-vs-rsync/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2026/2026-03-30-tar-vs-rsync/">&lt;p&gt;In In revolving article &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;drewdevault.com&#x2F;2026&#x2F;03&#x2F;28&#x2F;2026-03-28-rsync-without-rsync.html&quot;&gt;tar: a slop-free alternative to rsync&lt;&#x2F;a&gt; was claimed that it the same:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ tar -cz public | ssh example.org tar -C &amp;#x2F;var&amp;#x2F;www -xz
$ rsync -a public example.org:&amp;#x2F;var&amp;#x2F;www&amp;#x2F;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;🤯 unbelievable!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Sleeping Unicorn: 8mm Film.</title>
          <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2026/2026-01-31-sleeping-unicorn-8mm-film/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2026/2026-01-31-sleeping-unicorn-8mm-film/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2026/2026-01-31-sleeping-unicorn-8mm-film/">&lt;p&gt;Rush to buy stocks related to 8mm film!&lt;&#x2F;p&gt;
&lt;p&gt;AI video generation has changed the world. Digital data is fake now.&lt;&#x2F;p&gt;
&lt;p&gt;I assert that in the near future, government CCTV will be replaced with analogue 8mm film cameras.&lt;&#x2F;p&gt;
&lt;p&gt;Do not miss the moment buy immediately it will be too late soon you will regret it.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Humanity’s Survival</title>
          <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2026/2026-01-27-humanitys-survival/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2026/2026-01-27-humanitys-survival/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2026/2026-01-27-humanitys-survival/">&lt;p&gt;No more other issues left, worrying for humanity surviving.&lt;&#x2F;p&gt;
&lt;p&gt;Stephen H. told us that we need to colonize a second planet, but that dream feels so far away that even S. Hawking got tired of waiting.&lt;&#x2F;p&gt;
&lt;p&gt;Mars colonization is still very distant, and no one knows how long we will have to wait. While rockets are evolving quickly, the progress is not revolutionary enough to make Mars shuttles a common thing anytime soon.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, automation, robots, and AI are undergoing a technological revolution right now.&lt;&#x2F;p&gt;
&lt;p&gt;I’m curious what humanity will achieve first: space shuttles to Mars, or autonomous human cloning farms.&lt;&#x2F;p&gt;
&lt;p&gt;One extra colony is good — but what if humanity starts sending backups of itself before space travel becomes practical?&lt;&#x2F;p&gt;
&lt;p&gt;There’s no need to fly for 10 light-years with thousands of people if you can just send a transport container. It lands by parachute somewhere, expands, and begins printing people.&lt;&#x2F;p&gt;
&lt;p&gt;Or imagine a giant dinosaur hits Earth and kills everyone — but on the Luna, within 15 minutes, humanity begins restoring itself from backup. Once the first group of people is ready, they jump from the Luna back to Earth with parachutes and recolonize the planet.&lt;&#x2F;p&gt;
&lt;p&gt;Recover the civilization, make the Matrix!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>White Photodump</title>
          <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2026/2026-01-13-white-photodump/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2026/2026-01-13-white-photodump/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2026/2026-01-13-white-photodump/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2026&#x2F;2026-01-13-white-photodump&#x2F;DSC_1533.jpg&quot; alt=&quot;winter&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mail catcher</title>
          <pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2026/2026-01-08-mail-catcher/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2026/2026-01-08-mail-catcher/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2026/2026-01-08-mail-catcher/">&lt;p&gt;Sometimes you develop. Sometimes you need to send mail. More sometimes &lt;em&gt;(less sometimes?)&lt;&#x2F;em&gt;, you need to send mail while you are developing.&lt;&#x2F;p&gt;
&lt;p&gt;Absolutely never should that mail be sent out to the internet. Who would like to receive 50 test emails? All broken.&lt;&#x2F;p&gt;
&lt;p&gt;The safest and simplest way &lt;em&gt;(post your solutions in the comments!)&lt;&#x2F;em&gt; — a &lt;strong&gt;mail catcher&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A somewhat fake &lt;code&gt;SMTP&lt;&#x2F;code&gt; server that catches mail, and that’s all.&lt;&#x2F;p&gt;
&lt;p&gt;If you do not like to like yourself, you can use the famous one-liner:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ python -m smtpd -n -c DebuggingServer localhost:1025
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Welp, it works. Thanks!&lt;&#x2F;p&gt;
&lt;p&gt;If you want to have a shared mail catcher for a group of people, there is nothing better than &lt;code&gt;mailtrap.io&lt;&#x2F;code&gt; &lt;em&gt;(there is also &lt;code&gt;mailpit&lt;&#x2F;code&gt;, but you have to self-host it)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;But if you want to have it on localhost, then just add this to your &lt;code&gt;docker-compose.yml&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# https:&amp;#x2F;&amp;#x2F;mailpit.axllent.org
smtp-mailpit:
    image: axllent&amp;#x2F;mailpit
    container_name: smtp-mailpit
    ports:
        #- &amp;quot;1025:1025&amp;quot; # pass through STMP port to host machine
        - &amp;quot;8025:8025&amp;quot; # WEB UI port
    environment:
        MP_SMTP_AUTH_ACCEPT_ANY: 1
        MP_SMTP_AUTH_ALLOW_INSECURE: 1
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Than somehow find that your new container in your docker somewhere and use it as &lt;code&gt;SMTP&lt;&#x2F;code&gt; server &lt;code&gt;host:1025&lt;&#x2F;code&gt; with any credentials, and working &lt;code&gt;TLS&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Add a virtual host if your service check domains validity for some reason.&lt;&#x2F;p&gt;
&lt;p&gt;You already know how to do all of this yourself; I do not want to explain obvious basics to you &lt;em&gt;(I do not know how to)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Then send an email, open that your container UI somehow, and enjoy your local &lt;del&gt;mailtrap&lt;&#x2F;del&gt; &lt;strong&gt;mailpit&lt;&#x2F;strong&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Very useful, I like it a lot, highly recommend!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>`~&#x2F;.ssh&#x2F;config` and includes</title>
          <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-31-ssh-config-and-includes/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-31-ssh-config-and-includes/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-31-ssh-config-and-includes/">&lt;p&gt;It’s kind of obvious that using &lt;code&gt;.ssh&#x2F;config&lt;&#x2F;code&gt; separates a skilled Linux user from a wannabe kubuntu user.&lt;&#x2F;p&gt;
&lt;p&gt;And how could it not? You can set the username, port, and key &lt;em&gt;(oh yes, you can use different keys for different services)&lt;&#x2F;em&gt;, and all those weird host parameters once and then forget about them.&lt;&#x2F;p&gt;
&lt;p&gt;And aliases:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ cat ~&amp;#x2F;.ssh&amp;#x2F;config

Host ffwe_blog
    HostName fire-fart-water-earth.net
    IdentityFile ~&amp;#x2F;.ssh&amp;#x2F;keys&amp;#x2F;private_key
    User blog
    WarnWeakCrypto no

$ ssh ffwe_blog
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Typically, after some time, &lt;code&gt;~&#x2F;.ssh&#x2F;config&lt;&#x2F;code&gt; becomes a disgusting list of dead hosts and removed keys. And you can’t really do anything about it. The dual nature of &lt;code&gt;~&#x2F;.ssh&#x2F;config&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;But today is a magical day, and I have incredible news for you! &lt;code&gt;~&#x2F;.ssh&#x2F;config&lt;&#x2F;code&gt; supports includes! &lt;em&gt;(did no one read the manual at all?)&lt;&#x2F;em&gt; So you can split your huge garbage pile into neat, organized pillars!&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ cat ~&amp;#x2F;.ssh&amp;#x2F;config

SetEnv EDITOR=vim
ServerAliveInterval 30

Include .&amp;#x2F;conf.d&amp;#x2F;my_hosts
Include .&amp;#x2F;conf.d&amp;#x2F;work_hosts  
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre&gt;&lt;code&gt;$ cat ~&amp;#x2F;.ssh&amp;#x2F;conf.d&amp;#x2F;my_hosts

# for syntax highlighting
# vi: ft=sshconfig

Host ffwe_blog
    HostName fire-fart-water-earth.net
    IdentityFile ~&amp;#x2F;.ssh&amp;#x2F;keys&amp;#x2F;private_key
    User blog
    WarnWeakCrypto no
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You are welcome! Live better than you lived before!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Mozilla&#x27;s AI curve</title>
          <pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-20-mozillas-ai-curve/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-20-mozillas-ai-curve/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-20-mozillas-ai-curve/">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2025.02.20&lt;&#x2F;strong&gt;: Mozilla diversifies its business through AI products and an online advertising platform&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2025.11.16&lt;&#x2F;strong&gt;: Firefox is developing a navigation mode that uses AI&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2025.12.16&lt;&#x2F;strong&gt;: A new head of Mozilla Corporation has been appointed, focusing on AI in Firefox&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2025.12.19&lt;&#x2F;strong&gt;: Firefox 146.0.1 update: Firefox will introduce an option to completely disable AI&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</description>
      </item>
      <item>
          <title>Braille Nubs</title>
          <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-15-braille-nubs/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-15-braille-nubs/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-15-braille-nubs/">&lt;p&gt;Any keyboard has two small nubs &lt;em&gt;(and a third on the numpad)&lt;&#x2F;em&gt; to help you locate C4 by touch.&lt;&#x2F;p&gt;
&lt;p&gt;Not bad. Someone just forgot to tell everyone, but still, not bad.&lt;&#x2F;p&gt;
&lt;p&gt;All the other keys are left smooth, but what if we put Braille nubs on them? &lt;em&gt;(Let’s ignore the insignificant group of people who need more than Latin keys)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We could build our civilization on the common skill of finger reading.&lt;&#x2F;p&gt;
&lt;p&gt;For example, it’s dark in the room. You prob around with your hands and realize -- it’s a light switch! You can summon the light!&lt;&#x2F;p&gt;
&lt;p&gt;Or you’re lying in the dark, finger-reading a book, not afraid that the book will hit you in the face!&lt;&#x2F;p&gt;
&lt;p&gt;Dear gods, we need this urgently!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-12-15-braille-nubs&#x2F;closeup-computer-keyboard-braille-blind-600nw-2299868255-2453828406.jpg&quot; alt=&quot;Braille keyboard&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Terminal shortcuts</title>
          <pubDate>Sat, 13 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-13-terminal-shortcuts/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-13-terminal-shortcuts/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-13-terminal-shortcuts/">&lt;p&gt;The terminal has oddly powerful text-editing features. For example, if you have a string and your cursor is in the middle:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;xxx xxx █ xxx xxx
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then you can:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CTRL+W&lt;&#x2F;code&gt; to delete the word on the left&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ALT+D&lt;&#x2F;code&gt; to delete the word on the right&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Why?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>GoAT diagrams</title>
          <pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-12-goat-diagrams/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-12-goat-diagrams/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-12-goat-diagrams/">&lt;p&gt;I’ve always been amused by tables in &lt;code&gt;markdown&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;| Column 1      | Column 2      |
| ------------- | ------------- |
| Cell 1, Row 1 | Cell 2, Row 1 |
| Cell 1, Row 2 | Cell 1, Row 2 |
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;It looks really simple and reasonable, and I have no idea how else to make it. But it’s absolutely incomprehensible, unusable, and impossible to make beautiful without a really smart editor.&lt;&#x2F;p&gt;
&lt;p&gt;You can make it ugly and it will still work, but it’s ugly!&lt;&#x2F;p&gt;
&lt;p&gt;But tables are something for the weak and obedient to the gods.&lt;&#x2F;p&gt;
&lt;p&gt;People rebelled, and decided to fully anger the gods, and came up with &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bep&#x2F;goat&quot;&gt;GoAT diagrams&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Delightfully traumatic. Infinitely cursed.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-12-12-goat-diagrams&#x2F;goat_1.jpg&quot; alt=&quot;goat_1&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-12-12-goat-diagrams&#x2F;goat_2.jpg&quot; alt=&quot;goat_2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Watchdog and cron</title>
          <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-09-watchdog-and-cron/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-09-watchdog-and-cron/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-09-watchdog-and-cron/">&lt;p&gt;You already know I despise &lt;code&gt;systemd&lt;&#x2F;code&gt; a bit more than &lt;code&gt;wayland&lt;&#x2F;code&gt;, but the future will be in the future, and the past will still be in the past.&lt;&#x2F;p&gt;
&lt;p&gt;I have message queues and &lt;del&gt;bees&lt;&#x2F;del&gt; workers. Workers die each hour, but my lovely &lt;code&gt;cron&lt;&#x2F;code&gt; resurrects them and forces them to work.&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s just a single server and there won&#x27;t be any more &lt;em&gt;(but there will be fewer)&lt;&#x2F;em&gt;, so don&#x27;t shame me, please.&lt;&#x2F;p&gt;
&lt;p&gt;There are a lot of workers &lt;em&gt;(very few)&lt;&#x2F;em&gt; and even more queues &lt;em&gt;(a very few of few)&lt;&#x2F;em&gt;. They lived in harmony, but I did something wrong and the workers began their deadly loop and started eating memory. And they ate it all.&lt;&#x2F;p&gt;
&lt;p&gt;Using simple spells like &lt;em&gt;&quot;it worked before, which means my changes from yesterday are at fault&quot;&lt;&#x2F;em&gt; it was quite simple to find the broken worker. It was killed, and the rest were told to keep working while ignoring the corpse nearby.&lt;&#x2F;p&gt;
&lt;p&gt;And they worked. For an hour. And then they didn’t. Run them manually — works. Leave them alone — doesn’t.&lt;&#x2F;p&gt;
&lt;p&gt;That was weird, as cron wasn&#x27;t touched, memory wasn’t leaking, but the workers didn’t want to work.&lt;&#x2F;p&gt;
&lt;p&gt;The book of life &lt;em&gt;(&lt;code&gt;&#x2F;var&#x2F;log&#x2F;syslog | grep -i cron&lt;&#x2F;code&gt;)&lt;&#x2F;em&gt; told me that cron worked fine, but not since long ago. And then it didn’t.&lt;&#x2F;p&gt;
&lt;p&gt;It turned out that when the workers ate all the memory — watchdog killed cron. I doubt it realized that cron was the initial culprit; it was simply near the paw of death.&lt;&#x2F;p&gt;
&lt;p&gt;For the very first time in my life, watchdog killed &lt;code&gt;cron&lt;&#x2F;code&gt;! Unbelievable!&lt;&#x2F;p&gt;
&lt;p&gt;Would &lt;code&gt;systemd timers&lt;&#x2F;code&gt; survive? Would the paw of death smite them?&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s a mystery. I could run an experiment, but no. Imperative knowledge is only for people with weak faith.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Photodump</title>
          <pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-12-06-photodump/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-12-06-photodump/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-12-06-photodump/">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-12-06-photodump&#x2F;DSC_4495.jpg&quot; alt=&quot;img4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-12-06-photodump&#x2F;DSC_4505.jpg&quot; alt=&quot;img4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Someone ruined the internet (x)</title>
          <pubDate>Fri, 28 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-28-someone-ruined-internet-x/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-28-someone-ruined-internet-x/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-28-someone-ruined-internet-x/">&lt;p&gt;We all know that &lt;code&gt;email@example.com&lt;&#x2F;code&gt; is an email address. But what does an email address &lt;em&gt;mean&lt;&#x2F;em&gt;?
It means that on a server with the address &lt;code&gt;example.com&lt;&#x2F;code&gt; there is an account named &lt;code&gt;email&lt;&#x2F;code&gt;.
We also know it’s an email address, so we know which port to poke and what protocol to choose &lt;em&gt;(details in &lt;code&gt;dns&lt;&#x2F;code&gt;)&lt;&#x2F;em&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;And every &lt;code&gt;*nix&lt;&#x2F;code&gt; account can be written as &lt;code&gt;user1@computer1&lt;&#x2F;code&gt;, which means that on &lt;code&gt;computer1&lt;&#x2F;code&gt; there exists an account &lt;code&gt;user1&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The symbol &lt;code&gt;@&lt;&#x2F;code&gt; literally means &lt;code&gt;at&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;user-at-computer1&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;email-at-example.com&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Cose. Uniform.&lt;&#x2F;p&gt;
&lt;p&gt;And then Twitter comes along and decides that everyone will be &lt;code&gt;@user2&lt;&#x2F;code&gt;, and breaks the internet.
TWITTER SHOULD HAVE USED &lt;code&gt;user2@&lt;&#x2F;code&gt;!!!111&lt;&#x2F;p&gt;
&lt;p&gt;We lost everything. Dark times are ahead.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Wordpress actions hooks and filter hooks</title>
          <pubDate>Thu, 27 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-27-wp-actions-hooks-and-filter-hooks/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-27-wp-actions-hooks-and-filter-hooks/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-27-wp-actions-hooks-and-filter-hooks/">&lt;blockquote&gt;
&lt;p&gt;There are two types of hooks: &lt;strong&gt;Actions&lt;&#x2F;strong&gt; and &lt;strong&gt;Filters&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;&#x2F;strong&gt; allow you to add data or change how WordPress operates.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Filters&lt;&#x2F;strong&gt; give you the ability to change data during the execution of WordPress Core, plugins, and themes.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;pre data-lang=&quot;php&quot; class=&quot;language-php &quot;&gt;&lt;code class=&quot;language-php&quot; data-lang=&quot;php&quot;&gt;function add_action( $hook_name, $callback, $priority = 10, $accepted_args = 1 ) {
    return add_filter( $hook_name, $callback, $priority, $accepted_args );
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;php&quot; class=&quot;language-php &quot;&gt;&lt;code class=&quot;language-php&quot; data-lang=&quot;php&quot;&gt;public function has_filters() {
    foreach ($this-&amp;gt;callbacks as $callbacks) {
        if ($callbacks) {
            return true;
        }
    }

    return false;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>Aluminum OS</title>
          <pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-25-os-aluminum/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-25-os-aluminum/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-25-os-aluminum/">&lt;blockquote&gt;
&lt;p&gt;Google&#x27;s new &#x27;Aluminium OS&#x27; project brings Android to PC&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Will they make a fork &quot;Aluminum OS&quot;?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>.ssh&#x2F;unknown_hosts</title>
          <pubDate>Sat, 22 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-22-ssh-unknown-hosts/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-22-ssh-unknown-hosts/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-22-ssh-unknown-hosts/">&lt;p&gt;When &lt;code&gt;ssh&lt;&#x2F;code&gt; connects to an unknown host, it asks the user to type &lt;code&gt;&quot;yes&quot;&lt;&#x2F;code&gt;. No one knows why we should do it, but &lt;code&gt;ssh&lt;&#x2F;code&gt; will not connect without it.&lt;&#x2F;p&gt;
&lt;p&gt;You can avoid this prompt in two ways:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# 1. Disable security check (unsafe)
$ ssh -o &amp;quot;StrictHostKeyChecking no&amp;quot; user@example.com
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre&gt;&lt;code&gt;# 2. Automatically make remote host known
$ ssh-keyscan -t rsa example.com &amp;gt;&amp;gt; ~&amp;#x2F;.ssh&amp;#x2F;known_hosts
$ ssh user@example.com
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There was no warning in the second case! And not because we disabled safety check, we made the host known to us!&lt;&#x2F;p&gt;
&lt;p&gt;Now you should understand that professional do different choices. Be professional, choose safety!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>OTP registration</title>
          <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-18-otp-registration/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-18-otp-registration/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-18-otp-registration/">&lt;p&gt;What if we look on &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;OPIE_Authentication_System&quot;&gt;OPIE&lt;&#x2F;a&gt; and &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;OTPW&quot;&gt;OTPW&lt;&#x2F;a&gt; and decide we dont want it.&lt;&#x2F;p&gt;
&lt;p&gt;And we make registration by OTP generation. Singlefactory. While you have access to key -- you have access to the service.&lt;&#x2F;p&gt;
&lt;p&gt;No need to know any password, no any use of e-mails and logins.&lt;&#x2F;p&gt;
&lt;p&gt;Cool! Dumb and cool!&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Zola SSG: the story of success</title>
          <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-16-zola-the-first-battle/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-16-zola-the-first-battle/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-16-zola-the-first-battle/">&lt;p&gt;Many burned candles had I burn to figure out how the  &lt;em&gt;static site generator &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;zola&lt;&#x2F;a&gt;&lt;&#x2F;em&gt; works.&lt;&#x2F;p&gt;
&lt;p&gt;It uses &lt;code&gt;.md&lt;&#x2F;code&gt; files, and it seemed like the safest option.&lt;&#x2F;p&gt;
&lt;p&gt;Apparently it can&#x27;t render &lt;code&gt;```&lt;&#x2F;code&gt; and for some unknown reason it wraps everything in layers of &lt;code&gt;&amp;lt;code&amp;gt;&lt;&#x2F;code&gt; and &lt;code&gt;&amp;lt;p&amp;gt;&lt;&#x2F;code&gt; even with disabled highligting.&lt;&#x2F;p&gt;
&lt;p&gt;That’s unfortunate -- to fall on the text you shouldn&#x27;t touch.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-11-16-zola-the-first-battle&#x2F;20251116_131546_t3ZBMv.png&quot; alt=&quot;img4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-11-16-zola-the-first-battle&#x2F;20251116_132043_VTtJ2S.png&quot; alt=&quot;img4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-11-16-zola-the-first-battle&#x2F;20251116_131608_dLL3ci.png&quot; alt=&quot;img4&quot; &#x2F;&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;fire-fart-water-earth.net&#x2F;grimoire&#x2F;2025&#x2F;2025-11-16-zola-the-first-battle&#x2F;20251116_131627_KrxPDO.png&quot; alt=&quot;img4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>About</title>
          <pubDate>Mon, 10 Nov 2025 00:01:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/about/</link>
          <guid>https://fire-fart-water-earth.net/about/</guid>
          <description xml:base="https://fire-fart-water-earth.net/about/">&lt;p&gt;&lt;code&gt;===========[about.md]===========&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Random placeholder page just to have a page&lt;&#x2F;p&gt;
&lt;p&gt;I do not understand why this page is in feed too.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>`git` vs `git --bare`</title>
          <pubDate>Mon, 10 Nov 2025 00:01:00 +0000</pubDate>
          <author>Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;</author>
          <link>https://fire-fart-water-earth.net/grimoire/2025/2025-11-10-git-vs-git-bare/</link>
          <guid>https://fire-fart-water-earth.net/grimoire/2025/2025-11-10-git-vs-git-bare/</guid>
          <description xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-11-10-git-vs-git-bare/">&lt;p&gt;Your git repository could exist in two instances: normal and &lt;code&gt;--bare&lt;&#x2F;code&gt;. Normal is a &lt;em&gt;~git-client&lt;&#x2F;em&gt;, not normal is a &lt;em&gt;~git-server&lt;&#x2F;em&gt;. Not exactly, but &lt;code&gt;--bare&lt;&#x2F;code&gt; exists to be a &lt;code&gt;remote&lt;&#x2F;code&gt; in normal repositories. And it also doesn&#x27;t have files inside.&lt;&#x2F;p&gt;
&lt;p&gt;You can create on your VPS a &lt;code&gt;--bare&lt;&#x2F;code&gt; repository and via &lt;code&gt;ssh&lt;&#x2F;code&gt; synchronize it, avoiding any services like github. And everyone with &lt;code&gt;ssh&lt;&#x2F;code&gt; access can use it as a &lt;code&gt;remote&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Astoundingly, when you create normal it creates a directory for itself &lt;code&gt;&amp;lt;repo&amp;gt;&#x2F;.git&amp;lt;&#x2F;repo&amp;gt;&lt;&#x2F;code&gt;, but when &lt;code&gt;--bare&lt;&#x2F;code&gt; it uses the given path as &lt;code&gt;.git&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;$ git init .&amp;#x2F;git-normal&amp;#x2F;
Initialized empty Git repository in &amp;#x2F;tmp&amp;#x2F;.dotfiles&amp;#x2F;git-normal&amp;#x2F;.git&amp;#x2F;
$ git init --bare .&amp;#x2F;git-bare&amp;#x2F;
Initialized empty Git repository in &amp;#x2F;tmp&amp;#x2F;.dotfiles&amp;#x2F;git-bare&amp;#x2F;

$ ls -lah git-normal&amp;#x2F;
.git&amp;#x2F;
$ ls -lah git-bare&amp;#x2F;
hooks&amp;#x2F;
info&amp;#x2F;
objects&amp;#x2F;
refs&amp;#x2F;
HEAD
config
description
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Funny joke: if you put &lt;code&gt;--bare&lt;&#x2F;code&gt; in &lt;code&gt;.&#x2F;.git&#x2F;&lt;&#x2F;code&gt;, it will look like &lt;code&gt;.&#x2F;&lt;&#x2F;code&gt; has a git repository, and it is there, but it is not!&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;fatal: this operation must be run in a work tree
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
    </channel>
</rss>
