<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Welcome to The Elemental Wizard</title>
    <subtitle>I am the Wizard! I can cast cringe!</subtitle>
    <link rel="self" type="application/atom+xml" href="https://fire-fart-water-earth.net/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-01-31T00:00:00+00:00</updated>
    <id>https://fire-fart-water-earth.net/atom.xml</id>
    <entry xml:lang="en">
        <title>Sleeping Unicorn: 8mm Film.</title>
        <published>2026-01-31T00:00:00+00:00</published>
        <updated>2026-01-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2026/2026-01-31-sleeping-unicorn-8mm-film/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2026/2026-01-31-sleeping-unicorn-8mm-film/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Humanity’s Survival</title>
        <published>2026-01-27T00:00:00+00:00</published>
        <updated>2026-01-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2026/2026-01-27-humanitys-survival/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2026/2026-01-27-humanitys-survival/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>White Photodump</title>
        <published>2026-01-13T00:00:00+00:00</published>
        <updated>2026-01-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2026/2026-01-13-white-photodump/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2026/2026-01-13-white-photodump/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mail catcher</title>
        <published>2026-01-08T00:00:00+00:00</published>
        <updated>2026-01-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2026/2026-01-08-mail-catcher/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2026/2026-01-08-mail-catcher/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>`~&#x2F;.ssh&#x2F;config` and includes</title>
        <published>2025-12-31T00:00:00+00:00</published>
        <updated>2025-12-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-31-ssh-config-and-includes/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-31-ssh-config-and-includes/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mozilla&#x27;s AI curve</title>
        <published>2025-12-20T00:00:00+00:00</published>
        <updated>2025-12-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-20-mozillas-ai-curve/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-20-mozillas-ai-curve/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Braille Nubs</title>
        <published>2025-12-15T00:00:00+00:00</published>
        <updated>2025-12-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-15-braille-nubs/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-15-braille-nubs/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Terminal shortcuts</title>
        <published>2025-12-13T00:00:00+00:00</published>
        <updated>2025-12-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-13-terminal-shortcuts/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-13-terminal-shortcuts/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>GoAT diagrams</title>
        <published>2025-12-12T00:00:00+00:00</published>
        <updated>2025-12-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-12-goat-diagrams/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-12-goat-diagrams/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Watchdog and cron</title>
        <published>2025-12-09T00:00:00+00:00</published>
        <updated>2025-12-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-09-watchdog-and-cron/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-09-watchdog-and-cron/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Photodump</title>
        <published>2025-12-06T00:00:00+00:00</published>
        <updated>2025-12-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-12-06-photodump/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-12-06-photodump/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Someone ruined the internet (x)</title>
        <published>2025-11-28T00:00:00+00:00</published>
        <updated>2025-11-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-28-someone-ruined-internet-x/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-28-someone-ruined-internet-x/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Wordpress actions hooks and filter hooks</title>
        <published>2025-11-27T00:00:00+00:00</published>
        <updated>2025-11-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-27-wp-actions-hooks-and-filter-hooks/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-27-wp-actions-hooks-and-filter-hooks/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Aluminum OS</title>
        <published>2025-11-25T00:00:00+00:00</published>
        <updated>2025-11-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-25-os-aluminum/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-25-os-aluminum/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>.ssh&#x2F;unknown_hosts</title>
        <published>2025-11-22T00:00:00+00:00</published>
        <updated>2025-11-22T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-22-ssh-unknown-hosts/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-22-ssh-unknown-hosts/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>OTP registration</title>
        <published>2025-11-18T00:00:00+00:00</published>
        <updated>2025-11-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-18-otp-registration/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-18-otp-registration/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Zola SSG: the story of success</title>
        <published>2025-11-16T00:00:00+00:00</published>
        <updated>2025-11-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-16-zola-the-first-battle/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-16-zola-the-first-battle/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>About</title>
        <published>2025-11-10T00:01:00+00:00</published>
        <updated>2025-11-10T00:01:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/about/"/>
        <id>https://fire-fart-water-earth.net/about/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>`git` vs `git --bare`</title>
        <published>2025-11-10T00:01:00+00:00</published>
        <updated>2025-11-10T00:01:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-11-10-git-vs-git-bare/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-11-10-git-vs-git-bare/</id>
        
        <content type="html" 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;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Local decentralized DNS without DNS: Multicast DNS (mDNS)</title>
        <published>2025-09-28T00:01:00+00:00</published>
        <updated>2025-09-28T00:01:00+00:00</updated>
        
        <author>
          <name>
            
              Elemental Wizard &lt;elemental-wizard@fire-fart-water-earth.net&gt;
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://fire-fart-water-earth.net/grimoire/2025/2025-09-28-local-decentralized-dns-without-dns-multicast-dns-or-mdns/"/>
        <id>https://fire-fart-water-earth.net/grimoire/2025/2025-09-28-local-decentralized-dns-without-dns-multicast-dns-or-mdns/</id>
        
        <content type="html" xml:base="https://fire-fart-water-earth.net/grimoire/2025/2025-09-28-local-decentralized-dns-without-dns-multicast-dns-or-mdns/">&lt;h3 id=&quot;entering&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#entering&quot; aria-label=&quot;Anchor link for: entering&quot;&gt;Entering&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;You have two linux items &lt;em&gt;(others will also work, but you&#x27;ll need to google why)&lt;&#x2F;em&gt; that you want to communicate between.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest way is to use &lt;code&gt;ip&lt;&#x2F;code&gt;, but only once. Tommorow the item will get a different &lt;code&gt;ip&lt;&#x2F;code&gt;, you can&#x27;t win it.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest way is to add an alias into &lt;code&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;192.168.0.48 destination
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And use the alias everywhere:&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;$ scp kitty.gif user@destination:
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;But the &lt;code&gt;ip&lt;&#x2F;code&gt; will change anyway. But you will update it in a single place. But you will update it.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest way to fix is &lt;del&gt;install local DNS server on the server, make it the main server in the network, and proxy DNS queries throught it&lt;&#x2F;del&gt; there is no.&lt;&#x2F;p&gt;
&lt;p&gt;Wouldn’t it be a breeze to avoid editing by hand?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;multicast-dns-mdns&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#multicast-dns-mdns&quot; aria-label=&quot;Anchor link for: multicast-dns-mdns&quot;&gt;Multicast DNS (mDNS)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In 2025 year 25 years ago was invented &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;Multicast_DNS&quot;&gt;Multicast DNS (mDNS)&lt;&#x2F;a&gt; which via brodcast request creates a local dynamic decentralized &lt;code&gt;DNS&lt;&#x2F;code&gt; that you shouldn&#x27;t care about. But only within the single network. And only single host per item.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-multicast-dns-how-mdns&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#how-multicast-dns-how-mdns&quot; aria-label=&quot;Anchor link for: how-multicast-dns-how-mdns&quot;&gt;How Multicast DNS (how mDNS)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;In linux when it converts word-names into numbers, it uses service &lt;code&gt;Name Service Switch&lt;&#x2F;code&gt;. This service has &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man5&#x2F;nsswitch.conf.5.html&quot;&gt;&#x2F;etc&#x2F;nsswitch.conf&lt;&#x2F;a&gt; where it was shown where to how to look:&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;&amp;gt; cat &amp;#x2F;etc&amp;#x2F;nsswitch.conf
# Name Service Switch configuration file.
# See nsswitch.conf(5) for details.

passwd: files systemd
group: files [SUCCESS=merge] systemd
shadow: files systemd
gshadow: files systemd

publickey: files

hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
networks: files
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;For &quot;hosts&quot; it says to check first in local containers &lt;em&gt;(&lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man8&#x2F;nss-mymachines.8.html&quot;&gt;mymachines&lt;&#x2F;a&gt;)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Then it go to the &lt;em&gt;(&lt;code&gt;systemd-resolved&lt;&#x2F;code&gt;)&lt;&#x2F;em&gt; dns resolver which replaced &lt;code&gt;nss-dns&lt;&#x2F;code&gt;. If &lt;code&gt;DNS&lt;&#x2F;code&gt; returns unavailable, it quits.&lt;&#x2F;p&gt;
&lt;p&gt;Then it checks &lt;code&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt;, local hostname, and legacy &lt;code&gt;DNS&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Engaging fact: we can add another service to the list. What if we will add the &lt;code&gt;Multicast DNS (mDNS)&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;h3 id=&quot;multicast-dns-installation-mdns-installation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#multicast-dns-installation-mdns-installation&quot; aria-label=&quot;Anchor link for: multicast-dns-installation-mdns-installation&quot;&gt;Multicast DNS installation (mDNS installation)&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Oviously, for literaly everyone we will have both and server, and client parts. We will do belows everywhere for harmony.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Avahi&quot;&gt;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Avahi&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Install package &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;0pointer.de&#x2F;lennart&#x2F;projects&#x2F;nss-mdns&#x2F;&quot;&gt;libnss-mdns&lt;&#x2F;a&gt; in deps of which is &lt;code&gt;avahi&lt;&#x2F;code&gt; (we will add into &lt;code&gt;NSS hosts&lt;&#x2F;code&gt; as service):&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;# pacman -Sy nss-mdns
# emerge -av sys-auth&amp;#x2F;nss-mdns
# sudo apt-get install libnss-mdns avahi-daemon avahi-utils
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Next add to &lt;a class=&quot;__external_link__&quot; rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;man7.org&#x2F;linux&#x2F;man-pages&#x2F;man5&#x2F;nsswitch.conf.5.html&quot;&gt;&#x2F;etc&#x2F;nsswitch.conf&lt;&#x2F;a&gt; following string &lt;code&gt;mdns_minimal [NOTFOUND=return]&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;# hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns
hosts: mymachines mdns_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] files myhostname dns
# hosts: mymachines mdns_minimal resolve [!UNAVAIL=return] files myhostname dns
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;[NOTFOUND=return]&lt;&#x2F;code&gt; tells not to look for domains&lt;code&gt;*.local&lt;&#x2F;code&gt; anymore, this will break entries in &lt;code&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt; so you can remove it to keep everything work as before, but better.&lt;&#x2F;p&gt;
&lt;p&gt;You can also catch domains beyond &lt;code&gt;*.local&lt;&#x2F;code&gt;, but we don&#x27;t need it. We&#x27;ll use &lt;code&gt;&#x2F;etc&#x2F;hosts&lt;&#x2F;code&gt; for it.&lt;&#x2F;p&gt;
&lt;p&gt;Set local domain in the file &lt;code&gt;&#x2F;etc&#x2F;avahi&#x2F;avahi-daemon.conf&lt;&#x2F;code&gt; and reload and check:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ cat &amp;#x2F;etc&amp;#x2F;avahi&amp;#x2F;avahi-daemon.conf | grep host-name

host-name=source

$ systemctl enable avahi-daemon.service # add to autorun
$ systemctl restart avahi-daemon.service # run
$ avahi-browse --all --verbose --resolve --terminate

$ avahi-resolve-host-name source.local

source.local 192.168.100.101

$ ping source.local

PING source.local 56 data bytes
64 bytes from source.local : icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from source.local : icmp_seq=2 ttl=64 time=0.067 ms
64 bytes from source.local : icmp_seq=3 ttl=64 time=0.056 ms
^C
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The problem is that we can have only one domain per item. If you want to have multiple local domains like:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;git.local
server.local
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can easily do this via &lt;code&gt;&#x2F;etc&#x2F;avahi&#x2F;hosts&lt;&#x2F;code&gt;, but there you also have to hardcode the &lt;code&gt;ip&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest way to fix it would be &lt;del&gt;to run multiple instances of &lt;code&gt;avahi-publish &amp;amp;&lt;&#x2F;code&gt; per each domain each time calcuting dynamic local &lt;code&gt;ip&lt;&#x2F;code&gt;&lt;&#x2F;del&gt; there is no simple way live with the single domain on it&#x27;s all better anyway.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;enable-sftp-ssh&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#enable-sftp-ssh&quot; aria-label=&quot;Anchor link for: enable-sftp-ssh&quot;&gt;Enable sftp&#x2F;ssh&lt;&#x2F;a&gt;&lt;&#x2F;h3&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;$ cp &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;doc&amp;#x2F;avahi&amp;#x2F;sftp-ssh.service &amp;#x2F;etc&amp;#x2F;avahi&amp;#x2F;services&amp;#x2F;
$ cp &amp;#x2F;usr&amp;#x2F;share&amp;#x2F;doc&amp;#x2F;avahi&amp;#x2F;ssh.service &amp;#x2F;etc&amp;#x2F;avahi&amp;#x2F;services&amp;#x2F;

$ systemctl restart avahi-daemon.service
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;second-item&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#second-item&quot; aria-label=&quot;Anchor link for: second-item&quot;&gt;Second item&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Quickly repeat on the second item, then check from both they aren&#x27;t alone. Configure an &lt;code&gt;ssh&lt;&#x2F;code&gt; connection by &lt;code&gt;ip&lt;&#x2F;code&gt; between two items. Then in &lt;code&gt;ssh&lt;&#x2F;code&gt; just replace &lt;code&gt;ip&lt;&#x2F;code&gt; to the local domain:&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;$ ssh my_user@destination.local -i ~&amp;#x2F;.ssh&amp;#x2F;my_key
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;When eveything works we add to &lt;code&gt;~&#x2F;.ssh&#x2F;config&lt;&#x2F;code&gt; magic words:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;Host destination
HostName destination.local
IdentityFile ~&amp;#x2F;.ssh&amp;#x2F;my_key
User my_user
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;An alias for &lt;code&gt;ssh&lt;&#x2F;code&gt; was magically created and fully configured:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;$ ssh destination
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;That&#x27;s all, we can now exchange files and remotely execute commands&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;$ cd &amp;#x2F;tmp&amp;#x2F;
$ date &amp;gt; temp_file
$ echo &amp;quot;source&amp;quot; &amp;gt;&amp;gt; temp_file
$ scp temp_file destination:
$ ssh destination &amp;#x27;echo destination &amp;gt;&amp;gt; ~&amp;#x2F;temp_file&amp;#x27;
$ ssh destination &amp;#x27;cat ~&amp;#x2F;temp_file&amp;#x27;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Uru ru ru, we can now exchange files and remotely execute commands. And now we can use domains not tied to &lt;code&gt;ip&lt;&#x2F;code&gt;!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;leaving&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#leaving&quot; aria-label=&quot;Anchor link for: leaving&quot;&gt;Leaving&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;There is no multidomaning on the single item, but I can live with it.&lt;&#x2F;p&gt;
&lt;p&gt;You can apply the same to &lt;code&gt;NFS&lt;&#x2F;code&gt; and &lt;code&gt;rsync&lt;&#x2F;code&gt; and &lt;code&gt;git&lt;&#x2F;code&gt;!!!&lt;&#x2F;p&gt;
&lt;p&gt;And also &lt;code&gt;mDNS&lt;&#x2F;code&gt; the base of &lt;code&gt;IoT&lt;&#x2F;code&gt; and other &lt;code&gt;home assistant&lt;&#x2F;code&gt; networks!&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
