<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Zacchus Blog</title>
    <subtitle>A personal blog about tech, code, and things I find interesting.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://www.zacchus.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://www.zacchus.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-03-16T00:00:00+00:00</updated>
    <id>https://www.zacchus.com/atom.xml</id>
    <entry xml:lang="en">
        <title>(We don&#x27;t) Return to Silent Hill</title>
        <published>2026-03-16T00:00:00+00:00</published>
        <updated>2026-03-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.zacchus.com/blog/return-to-silent-hill/"/>
        <id>https://www.zacchus.com/blog/return-to-silent-hill/</id>
        
        <content type="html" xml:base="https://www.zacchus.com/blog/return-to-silent-hill/">&lt;p&gt;I was pretty excited about “Return to Silent Hill”. Only last year had I made the time to finish the remake of Silent Hill 2, so I was looking forward to seeing an adaptation of the story on the big screen while it was still relatively fresh in my mind.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-first-two-movies&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-first-two-movies&quot; aria-label=&quot;Anchor link for: the-first-two-movies&quot;&gt;The first two movies&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I was only a teenager when the first Silent Hill movie was released. I never had the pleasure of playing the original games, so I have no idea how the movie was received by fans who have played the game, but it seemed like a pretty solid movie to me. It wasn’t just a solid movie, it was like a cultural phenomenon, most kids in my highschool had seen it and if a group of teenagers was out at night you could scare the shit out of them by playing that air raid siren sound on a phone. So yeah, I think it stuck pretty well with people.&lt;&#x2F;p&gt;
&lt;p&gt;Sure it took some liberties with the lore, pyramid head was not supposed to be there, but whatever, it was cool, and it was awesome. At the end of the day a 6.5 rating on IMDB for a horror video game adaptation is pretty high.&lt;&#x2F;p&gt;
&lt;p&gt;So when I heard director Christophe Gans would return for “Return to Silent Hill” I had pretty high hopes. He did not direct the second movie, “Silent Hill: Revelations”, which I will be honest, even having seen it more recently than the first one, I could not tell you much about it. Judging by the IMDB rating, it was not as good as the first one. I do remember it having an interesting twist at the ending but that’s it.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;silent-hill-2&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#silent-hill-2&quot; aria-label=&quot;Anchor link for: silent-hill-2&quot;&gt;Silent Hill 2&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Besides a demo of “Silent Hill: The Room” and like two hours of the first Silent Hill poorly emulated on the inadequate PC I had at the time, I haven’t had the pleasure of fully playing any Silent Hill game.&lt;&#x2F;p&gt;
&lt;p&gt;Silent Hill 2’s remake on Steam changed that. I’ll have to take you through a short overview of Silent Hill 2’s main plot points and themes so that we have a baseline with which to compare the movie to.&lt;&#x2F;p&gt;
&lt;p style=&quot;color:red&quot;&gt; Warning! Past this point there be spoilers&lt;&#x2F;p&gt;
&lt;p&gt;The story of Silent Hill 2 follows the anti-hero protagonist James Sunderland who has received a mysterious letter calling him to Silent Hill, sent by his dead wife Mary, which James thinks has been dead for 3 years now, after passing away from nondescript spouse killing disease plot device (probably cancer)&lt;&#x2F;p&gt;
&lt;p&gt;The first person he encounters when arriving in Silent Hill is Angela. She is also searching for something in Silent Hill and warns James that the town is dangerous.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;20250629013704_1.jpg&quot; alt=&quot;James meeting Angela&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;James meets Angela&lt;&#x2F;p&gt;
&lt;p&gt;Once inside the town, he begins to encounter strange creatures which are hostile, dangerous, sickly, but also possess some weird feminine features. While passing through an abandoned apartment building, he encounters Eddie, who seems to have stumbled into Silent Hill while running from the cops. In the same building he also re-encounters Angela which is suicidal, and a little girl Laura, who seems to know Mary and is also seemingly unphased by the strange occurrences in Silent Hill. In this same apartment complex is where we also first encounter Pyramid head, another manifestation of Silent Hill that drags a huge unwieldy blade, and that seems to have its ire pointed at the other monsters as much as it is pointed at you.&lt;&#x2F;p&gt;
&lt;p&gt;Eventually he reaches a park, a special place mentioned in Mary’s letter, where, he meets Maria. Maria looks exactly like Mary but James is unphased by that, and it doesn’t get brought up until much later. From this point on Maria will accompany James in most locations while at certain times she will vanish or be indisposed in some room.&lt;&#x2F;p&gt;
&lt;p&gt;To make a long story short: James has to pass trough many trials, locations and puzzles in his search for Mary. Each location after being completed is usually followed by an otherworldy upside-downy version of the same location, but much more damaged and hellish than the “normal” locations. After the apartments he must travel to the hospital where Mary was treated, a prison, whose significance to James was not entirely clear to me, but is where James has to fight and kill Eddie, a place called the Labyrinth, which has some weird non-euclidean geometry stuff going on, where eventually he gets to kill a representation of Angela’s father and finally arriving at the Lakeview Hotel, which is where James and Mary spent their honey moon.&lt;&#x2F;p&gt;
&lt;p&gt;After finally reaching the room in which they spent the honey moon, the truth is finally revealed to us: Mary wasn’t dead for 3 years, James had smothered her with a pillow, just a few days ago. Depending on how you played the game this is either interpreted as some twisted act of mercy killing, or an enraged murder by a frustrated James. The search for Mary and the letter was a delusion he indulged with, unable to cope with what the had just done. After this revelation you get to escape from a burning Lakeview Hotel and reach the final boss fight where you fight a representation of a bed-ridden Mary. After defeating her you get one of the few possible endings. There are three main endings, two joke endings and a secret ending that is hard to get and requires a second playthrough.&lt;&#x2F;p&gt;
&lt;p&gt;The three main possible endings are:
Leave - arguably the best possible ending given the situation, James accepts his actions and moves on, leaving Silent Hill behind.
In Water - unable to cope with his guilt, James takes the car and dives into the lake, where it is revealed Mary’s corpse was on the backseat all along
Maria - James leaves, but Maria (which is a weird twisted version of Mary created by Silent Hill) goes along with him in the car&lt;&#x2F;p&gt;
&lt;p&gt;If you’re not accustomed to Silent Hill, after reading all this, and probably if you only saw the movies, there’s probably a lot of questions and what the fucks left. In my opinion, Silent Hill 2 is certainly more about the journey than the ending. It’s a captivating narrative with a great atmosphere that keeps you glued to the seat, wanting to solve the mystery of Mary’s letter. The ending in comparison, is probably not very satisfying.&lt;&#x2F;p&gt;
&lt;p&gt;What the hell does it all mean? Well, the gist of it is, at least according to consensus, is that Silent Hill got very fucked up after the rituals related to Alessa. The rituals and her psychic powers have turned the place in a sort of sentient, hell on earth sort of deal, that acts as a magnet to people with unsolved trauma and guilt. Jokingly referred to as Silent Hill therapy.
James is called to Silent Hill due to the guilt of killing his sick wife. Maria is a creation of silent hill, a version of Mary that is sexy and desirable, as James was sexually frustrated. The monsters have feminine traits also due to James sexual frustrations. Eddie gets stuck in silent hill because he ran away after just shooting a guy. Angela is stuck there due to the trauma of having been sexually assaulted by her father. Laura… is just a kid, she does not see the version of Silent Hill that the adults see. For her, there are no monsters, there is no fog, no pyramid head, she’s just a kid playing outside in the town. And pyramid head is a representation of James’s dark side and frustrations, and the violence he inflicted on Mary, that’s why he is often seen attacking the nurses and other monsters.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;20250629180317_1.jpg&quot; alt=&quot;Pyramid head assaulting monsters&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;Pyramid head doing... something&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-movie&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-movie&quot; aria-label=&quot;Anchor link for: the-movie&quot;&gt;The Movie&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;When the movie was announced, I was looking forward to it. I didn’t bother watching a trailer as I knew pretty much what I was getting into. Unfortunately, like many other movie adaptations of beloved games, the movie has taken some liberties…&lt;&#x2F;p&gt;
&lt;p&gt;I get it, compressing video game stories that span 10+ hours in under two hours can be hard, so sure, some things need to be streamlined or glossed over, however it seems like most movie adaptations change stuff for change’s sake.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s start with the casting: While for Mary I guess they did make some sort of effort to have Hannah Emily Anderson look at least a little like the game’s Mary, James is just some random brunette guy with wavy hair. What is even weirder is that Jeremy Irvine’s IMDB pic looks closer to James Sunderland than in the movie. Angela’s hair looked pretty accurate, while her jumper in the movie is black instead of the cream colored one she wears in the game. But there was something off and I did not realize until the ending why. It’s because she’s also played by Mary’s actress.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image.png&quot; alt=&quot;James&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;James&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-1.png&quot; alt=&quot;Mary&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;Mary&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-2.png&quot; alt=&quot;Angela&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;&quot;Angela&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Then there’s all the changes to the plot. We get to see how James met Mary. James is portrayed as a painter who is also some sort of playboy, barrelling down the street in his convertible while smoking a joint and runs over Mary’s luggage while she was waiting for a bus out of Silent Hill. We will later learn that she had really good reasons to want to get out of Silent Hill but I guess James’s appearance made her change her mind and they get together and start living in Silent Hill.&lt;&#x2F;p&gt;
&lt;p&gt;The movie progresses in several alternative layers. There’s one layer filled with flashbacks, that shows us James meeting Mary and their life together. Another layer is James returning to Silent Hill which basically tries to cover the events of the game, and there’s a third layer, which represents the outside &#x2F; real world for which for some reason the movie decides to waste precious runtime on showing us.&lt;&#x2F;p&gt;
&lt;p&gt;Tethering James to the outside world is his Therapist, with whom James has several phone exchanges while he’s exploring Silent Hill.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-3.png&quot; alt=&quot;Therapist&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;The Therapist&lt;&#x2F;p&gt;
&lt;p&gt;Throughout most of her scenes she is shown in this weird multiplicative reflection which serves no purpose but to be annoying to watch. I have no clue (ok I have one) why they thought this addition was important to the story. One guess would be that she’s some sort of audience surrogate, so James describes Silent Hill without talking to himself, but it seems more like a kludge than a solution.&lt;&#x2F;p&gt;
&lt;p&gt;In various flashbacks we learn the Mary’s surname is Crane and this is very important because apparently her father was some weird cult leader in Silent Hill. And all of Mary’s friends seem to be members of this very weird cult that makes Mary attend weird ceremonies where they drug her and they think they are channeling her father through her and then they feast on blood poured on her is some weird squicky sexual ritual. JUST WHY?! We later learn that this ritual is what has been slowly killing Mary and made her sick. WHY? It seems like they really wanted some sort of out of the conundrum that James simply killed his sick wife, so they had to invent all this bullshit about a cult and a ritual to make him seem more sympathetic? Great, the problem is that this turns a multidimensional complex character in a generic horror movie victim character. The movie outright tells us with zero room for interpretation that Mary outright asked James to end her suffering. Something that is much more ambiguous in the game.&lt;&#x2F;p&gt;
&lt;p&gt;While exploring Silent Hill, James meets Eddie, similarly to how we find him in the game. Puking into a dirty toilet. This is the first and last time we see Eddie, which also looks nothing alike the game version.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-5.png&quot; alt=&quot;Eddie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;Eddie&lt;&#x2F;p&gt;
&lt;p&gt;Then we meet Laura. There are many problems with Return to Silent Hill’s Laura. First issue, is that instead of the joyful, blissfully unaware child that she is portrayed as in the game, movie Laura is a very generic, tropey, horror movie creepy-child cliche.&lt;&#x2F;p&gt;
&lt;p&gt;The other problem is that this Laura sees the fucked up version of Silent Hill, she sees Pyramid Head and the Monsters, while the game made it clear that for Laura, Silent Hill was just a normal town.&lt;&#x2F;p&gt;
&lt;p&gt;There is a third problem with this movie’s Laura, but we’ll get to that later.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-6.png&quot; alt=&quot;Laura&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;&quot;Laura&quot;&lt;&#x2F;p&gt;
&lt;p&gt;A bit later James meets Maria. For which at least they did make some effort for her to look at least remotely similar to the game Maria, but she does seem like a mix between the original Silent Hill 2 and the remake’s Maria.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-7.png&quot; alt=&quot;Maria&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;&quot;Maria&quot;&lt;&#x2F;p&gt;
&lt;p&gt;Not much to comment about her, but the movie spends like 0 time building up any sort of chemistry between Maria and James. When they reach the hospital she just beelines to a random recording on a table giving us exposition about Mary’s illness and prognosis, based on the drugs that the cult has injected her with. UGH!&lt;&#x2F;p&gt;
&lt;p&gt;Hearing this recording causes James to flashback and remember when he snuck up on one of the cult’s meetings and he saw what the cult was doing to Mary. I forgot to mention that ever since arriving at Silent Hill, James gets these weird migraines where we get to hear the Silent Hill siren sound and a high pitched ringing while whatever surface James touches starts turning in the Otherworld version of the scene. This is something that happens multiple times throughout the movie and has zero explanation. In the game the transition to the otherworld was just something that happens, not something James controls, but whatever, moving on.&lt;&#x2F;p&gt;
&lt;p&gt;Then we get a short action sequence where one of the game’s most iconic monsters finally show up: The Nurses. This is the only scene where we get to see Nurses. The nurses injure Maria, and while sitting injured on a gurney she makes James admit that she looks just like Mary.&lt;&#x2F;p&gt;
&lt;p&gt;Then Laura shows up and for some reason James is convinced Laura can lead him to Mary. Laura leads James into a room and locks him inside, where some weird monster mannequin mummy thing starts choking James and puts her hand down James’s throat. We later learn that this monster is a representation of Mary (which looks nothing like the Mary&#x2F;Maria boss we fight at the end of the game).&lt;&#x2F;p&gt;
&lt;p&gt;James getting choked causes him to suddenly wake up in a hospital bed. This bringing us back to the real world layer of the movie. A nurse informs James that he is in the Hospital at Silent Hill. The Therapist shows up and tells him he needs to let go of Mary: “She’s gone. She’s dead James. She’s been dead for months now. You know that”. Then she leaves, we get another flashback in which we see James be an abusive asshole to Mary, and then he leaves her alone in Silent Hill. Afterwards we’re back at the hospital, the therapist is trying to reach out to James while he’s staring out the window, and just like that James seems to will himself back into Silent Hill, waking up next to Maria.&lt;&#x2F;p&gt;
&lt;p&gt;Where do I even begin. It seems the movie is implying the whole movie is some sort of delusion taking place entirely inside of James Sunderland’s head. The most asinine boring and stupid plot device ever. It was all just a dream… While it’s hard to argue whether the movie would have been any better be removing all the “real world” B plot, at least it would have been shorter.&lt;&#x2F;p&gt;
&lt;p&gt;With 0 reasons and chemistry build up, Maria takes James’s head, tells him she never told him her name and kisses him. Whatever, let’s just get it over with.&lt;&#x2F;p&gt;
&lt;p&gt;James then takes Maria to what seems to be the Labyrinth level, where the walls are strewn with James’s painting of Mary. He tells Maria that Mary is not dead and that she is not real, then he just puts his hands to his temples and focuses really hard in order to summon Pyramid head and kill Maria… ok…&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-8.png&quot; alt=&quot;James channeling his edgy powers&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;&quot;James channeling the power of anime&quot;&lt;&#x2F;p&gt;
&lt;p&gt;We then get another flashback that spells it out that Pyramid head is James. Then he’s drowning, then he suddenly wakes up on a beach right in front of Lakeview Hotel. Inside he finds a very creepy contorting Laura that tells James the greatest secret of them all.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-11.png&quot; alt=&quot;Ok…&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;Ok...&lt;&#x2F;p&gt;
&lt;p&gt;Are you ready?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-4.png&quot; alt=&quot;The most insane part of the movie&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;The most insane part of the movie&lt;&#x2F;p&gt;
&lt;p style=&quot;color:red&quot;&gt;Mary Crane&#x27;s full name was MARY ANGELA LAURA CRANE all along! Have your expectations been subverted yet? WHAT A FUCKING TWIST AM I RIGHT? &lt;&#x2F;p&gt; 
&lt;p&gt;Just what the fuck were they thinking?! There is no objective reasons for this change. And hell if there’s any insane interpretation of the game where this would make sense. This is just some weird asspull. I don’t know if Christophe Gans came up with this, but he sure did sign off on it.
I wonder if they brainstormed if they can squeeze in “Eddie” in there somehow, and hell why not “Maria” too. Mary Angela Maria Laura Eddie Crane. I think there are some cultures where people are sort of named like this, right? I bet the writers were really proud of this one. I have to wonder, is this how the first Silent Hill movie was for those that played the first game? Judging by the IMDB rating, that doesn’t seem to be the case.&lt;&#x2F;p&gt;
&lt;p&gt;He then finds “Angela” in a room, muttering to herself “You’re disgusting” while hands come through the sheets and grab her thighs. If this was supposed to be the reveal that Angela was SA’d by her father, they were really fucking subtle. James then gets pulled trough the sheets and we get to see the Abstract Daddy, one of the bosses of Silent Hill 2 that represents Angela’s father. But in this movie instead, the abstract daddy has the head of Mary. Why? Fuck you that’s why, stop asking questions, just turn your brain off man. Clearly it was Mary that was assaulting Angela that was actually Mary all along.&lt;&#x2F;p&gt;
&lt;p&gt;Suddenly, all the shit’s on fire yo! James runs trough the flames and gets teleported??? on top of the hotel where they spent the honey moon and we get a final flashback where we see a dying Mary. James returned to her after abandoning her in Silent Hill when he learned she was dying. And she asks him to end her suffering.&lt;&#x2F;p&gt;
&lt;p&gt;Then we get to see whatever the hell this is:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-9.png&quot; alt=&quot;Mummy Mary&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;return-to-silent-hill&#x2F;image-10.png&quot; alt=&quot;Great CGI&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Mummy Mary tells James to forgive himself, then he takes Mary’s body out of the hotel, throws it in his burnt up convertible and drives into the lake. So I guess for the movie, the canon ending is “In Water”&lt;&#x2F;p&gt;
&lt;p&gt;Oh you thought this was the end? No, because like all modern movies they get screened to focus groups, and I bet the focus groups were not too happy with that ending. So they add some insane time travel loop shenanigans where James is back in the car when he first hit Mary’s luggage, and this time he gets to make the right choice to take Mary out of Silent Hill. So what the hell is even happening? Is the ending just James’s dying dream? How could it be, as it was revealed to us that James is in fact NOT in Silent Hill, unless him waking up in the hospital was the delusion. So many questions, so little answers. This usually makes a movie compelling, but I hope I do not sound too harsh when I say, when a movie is crap, unresolved plot points are not compelling, they’re just the cherry on top of the turd pile.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;why&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#why&quot; aria-label=&quot;Anchor link for: why&quot;&gt;Why?&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Why do video game movie adaptations almost always suck? I get it, you have to compress twenty plus hours into less than two hours. There are things that happen in video games which are very expensive to adapt, or simply unadaptable. But it does seem at times the names attached to these movies just have huge egos.&lt;&#x2F;p&gt;
&lt;p&gt;The quality of shitty video game movies is not something inherent to the genre. I think it’s simply hubris, coupled with the fact that “prestige” movie producers probably don’t want to touch video games with a ten foot pole. So you end up in this scenario where you want to adapt a license, because there’s a huge fanbase, but you think video games are shitty and not art, or that you are smarter and better as a movie maker than those dirty unwashed video game developers, so you start changing shit for no reason according to your needs and wants. And that’s how you end up with these piss poor adaptations that are hated by everybody.&lt;&#x2F;p&gt;
&lt;p&gt;Some recent examples include: The last Resident Evil live action movie, the cancelled Resident Evil TV Series, all the other Resident Evil movies (but the first ones at least were fun) Borderlands, etc. I actually can’t think of a single Video Game movie adaptation that actually followed the story of the game without major unnecessary changes.&lt;&#x2F;p&gt;
&lt;p&gt;I get it, some video games get adaptations and they don’t really have much material for filmmakers to work with. Like Minecraft, Sonic the Hedgehog, Mortal Kombat, so in those cases it is excusable that they have to make stuff up. But Silent Hill, Resident Evil, Assassin’s Creed, they each have compelling stories that should be adapted exactly as they are (just cut out the gameplay part) because they should be experienced by people who for various reasons do not or can not play those games. By not doing a faithful adaptation, you’re basically completely shitting up a sometimes once in a lifetime chance to expose a compelling story to a fresh audience.&lt;&#x2F;p&gt;
&lt;p&gt;And I have seen it done well. In both cases. HBO’s adaptation of The Last of Us seems to have done a pretty good job adapting the story of the game. I will admit I have not played the games as originally they were Play Station exclusives, but I did my research and they seem to follow the two game’s stories mostly beat for beat. Maybe the secret is to make a series so that you can better flesh out the characters and plot, but I think Silent Hill would have been a simple enough story to tell in two hours had the focus stayed on the right things. There are some comments to be made about casting choices, but whatever, at the end of the day they delivered the story.&lt;&#x2F;p&gt;
&lt;p&gt;As for the case when there’s not much story to work with, Arcane has shown that you can take the designs of characters in a fucking MOBA of all places, and place them in a compelling universe and have them animated so well that they out-act live action actors (of course I assume performance capture is involved, but I digress)&lt;&#x2F;p&gt;
&lt;p&gt;I know I’m mostly screaming in the void here, very “old man screams at clouds” energy. But I do hope one day I get to see a Video Game adaptation that just tells one of the stories I grew up with, beat for beat, that would be great. There have been rumors floating around about adaptations for Bioshock and Deadspace, I do really hope they’ll be more like The Last of Us and less like Silent Hill.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Stationeers</title>
        <published>2026-03-02T00:00:00+00:00</published>
        <updated>2026-03-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.zacchus.com/blog/stationeers-1/"/>
        <id>https://www.zacchus.com/blog/stationeers-1/</id>
        
        <content type="html" xml:base="https://www.zacchus.com/blog/stationeers-1/">&lt;h1 id=&quot;what-is-stationeers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-is-stationeers&quot; aria-label=&quot;Anchor link for: what-is-stationeers&quot;&gt;What is Stationeers&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;It’s kind of hard to describe what &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;544550&#x2F;Stationeers&#x2F;&quot;&gt;Stationeers&lt;&#x2F;a&gt; is in a simple manner. The gist of it is that it’s a survival crafting game &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;tenor.com&#x2F;view&#x2F;space-tim-curry-gif-7935778&quot;&gt;in space&lt;&#x2F;a&gt;. But it’s so much more than that.&lt;&#x2F;p&gt;
&lt;p&gt;I’ve bought this and played it in early access since 2018. I played it a bunch back then and saw most of what was available at the time. Eight years later development is still going strong, even though the game is still in early access. I saw many posts about very big updates lately, one of the most recent ones being a total revamp of the terrain system. So I decided to play it some more these last few days.&lt;&#x2F;p&gt;
&lt;p&gt;When I first played the game, I saw many similarities to another certain space game called &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;spacestation13.com&#x2F;&quot;&gt;Space Station 13&lt;&#x2F;a&gt;, based on it’s wiring systems, pipes, use of APCs(Area Power Controllers) and tile based atmosphere simulation. I would bet development probably started as a 3D take on the game, but it has grown into its own thing. I don’t know whether Stationeers will ever have round based role based gameplay, but it’s a good sim&#x2F;engineering&#x2F;survival game in its own right.&lt;&#x2F;p&gt;
&lt;p&gt;Where the game stands apart from others in the genre (of which there aren’t many, besides space engineers, but that game focuses more on spaceships and deformation that simulating atmosphere) is it’s detailed gas simulation which makes some effort to simulate the thermodynamic laws of ideal gases. They are also working on a major &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;news&#x2F;app&#x2F;544550&#x2F;view&#x2F;521990850610200595?l=english&quot;&gt;update&lt;&#x2F;a&gt; to expand the gases in the game. Each enclosed space in the game be it a room or a pipe segment simulates the gases present inside, such as the relationship between pressure volume and temperature, as well as phase changes (where gases gain or lose temperature accordingly), gases can become liquid and even froze into solids, and there’s a lot of fun in designing a atmosphere control system with the required redundancies and safety measures to prevent pipes bursting, explosions or the wrong gases ending up where they shouldn’t.&lt;&#x2F;p&gt;
&lt;p&gt;Speaking of explosions, one of the most common way you can trigger one is when using the game’s intricate allow smelting system. Each metal and each alloys have specific ranges of temperatures and pressures that need to be achieved inside a furnace to produce the desired output. While simple metals like iron, gold or steel just require a minimum temperature treshold to be hit, advanced alloys can require you to achieve pressures over 40 MPa at temperatures that must not go above 600 degrees celsius.&lt;&#x2F;p&gt;
&lt;p&gt;Then of course there’s the survival aspect, you need to grow food, mine ores and ice resources so that you can expand your base, create a controlled atmosphere in which you can take off your suit and grow your food, power generation, cooking, trading, etc.&lt;&#x2F;p&gt;
&lt;p&gt;It also offers a sort of small scale factory gameplay, you can decide what and how much to automate, but the game offers you many devices and tools and it’s up to you to decide how to tackle some problems. You can eventually build deep miners which passively generate resources for you (but the setup is quite intricate, you need to process and filter the resulting ore to end up with useful materials). There’s also the option to send automated mining rockets into space.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;planets&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#planets&quot; aria-label=&quot;Anchor link for: planets&quot;&gt;Planets&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;The game features different planets that you can play on, each with it’s unique challenges.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mars&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mars&quot; aria-label=&quot;Anchor link for: mars&quot;&gt;Mars&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The red planet. Judging by the order it’s in the list it might be the intended difficulty. Solar power is viable and there is a thin (2kPa) atmosphere containing mostly CO2 and some Oxygen and Nitrogen which can be harvested for various purposes.
Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Has atmosphere, so you can filter out gases&lt;&#x2F;li&gt;
&lt;li&gt;Has atmosphere so things can cool into it&lt;&#x2F;li&gt;
&lt;li&gt;Atmosphere is thin enough that you can mostly dump unwanted gases easily, but it does require a volume pump if you want to clear a pipe
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;Solar power is viable but requires more panels than the moon for the same amount of power&lt;&#x2F;li&gt;
&lt;li&gt;Has atmosphere so any passive vent connected pipes without the proper valves will be “polluted” by the local gases&lt;&#x2F;li&gt;
&lt;li&gt;Every few days a powerful dust storm comes that will damage solar panels and scattered items. I actually lost about 50% of my starting supplies to this (should have done my research)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;moon&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#moon&quot; aria-label=&quot;Anchor link for: moon&quot;&gt;Moon&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Our friendly neighborhood satellite. This is the planet I played on in my previous playthrough. Solar is much more powerful than on mars and there’s no atmosphere to worry about.&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;No atmosphere, so you can void any pipe with a passive vent
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;No atmosphere, so all your gases need to be harvested from crushing Ice or burning ice in a furnance&lt;&#x2F;li&gt;
&lt;li&gt;Has pesky Solar Storm events that greatly increase solar power generation but can also cook you inside your suit if you’re not prepared&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;mimas&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mimas&quot; aria-label=&quot;Anchor link for: mimas&quot;&gt;Mimas&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;A satellite of Saturn. Has no atmosphere so many things said about the moon apply. Solar power is not viable.&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;No solar storms
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;Solar power is not viable&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;europa&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#europa&quot; aria-label=&quot;Anchor link for: europa&quot;&gt;Europa&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The Jupiter satellite we dream to eventually explore and settle. Solar power is not viable, but slightly higher than Mimas. Has a thicker atmosphere than Mars but it’s cold as hell.&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Has a thicker atmosphere which can be harvested&lt;&#x2F;li&gt;
&lt;li&gt;Has a very cold atmosphere (-149 to -139 °C) which makes cooling stuff really easy (and because of the way the game treats temperatures in enclosed spaces, cooling is a need, as opposed to heating, bases at the moment do not radiate nor convect any heat, so it only accumulates)
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;Really cold, so using an outdoors furnace is problematic&lt;&#x2F;li&gt;
&lt;li&gt;Has Snow Storms, which I guess are like Mars’s storms but cold&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;venus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#venus&quot; aria-label=&quot;Anchor link for: venus&quot;&gt;Venus&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Our other neighbor, closer to the sun. Has a 464°C atmosphere, and a 239 kPa atmosphere.&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Has a thick atmosphere which can be harvested&lt;&#x2F;li&gt;
&lt;li&gt;Receives a ton of solar power
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;Really hot which makes cooling things really hard. Most MK1 equipment catches fire at these temperatures&lt;&#x2F;li&gt;
&lt;li&gt;Has Dust Storms&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;vulcan&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vulcan&quot; aria-label=&quot;Anchor link for: vulcan&quot;&gt;Vulcan&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;And now for something completely different. This one is not a planet that can be found in our solar system, but a planet orbiting a supermassive black hole called Janus. It has an atmosphere than ranges between 24 and 102 kPa and temperatures ranging from 127 to 1452°C&lt;&#x2F;p&gt;
&lt;p&gt;Pros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;On average solar panels generate more than on Mars&lt;&#x2F;li&gt;
&lt;li&gt;Daytime atmosphere temperature is hot enough to smelt most metals and alloys, you just have to pump them into a furnace
Cons:&lt;&#x2F;li&gt;
&lt;li&gt;Has both an Ash Storm and a Solar Storm&lt;&#x2F;li&gt;
&lt;li&gt;Extremely hot&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;survival&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#survival&quot; aria-label=&quot;Anchor link for: survival&quot;&gt;Survival&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Regardless of the chosen planet (besides of course each planet’s unique challenges) there are survival needs that you have to take care of in order to survive and play the game. There’s no real penalty for dying but not dying for as many days as possible is a nice goal to set for yourself, there are also achievements related to that.&lt;&#x2F;p&gt;
&lt;p&gt;By default you spawn in with a few crates of supplies and some tanks. I won’t go into details on what and how many pieces of equipment you start with but suffice to say you get enough tools to bootstrap a small base&#x2F;shelter (walls, metal sheets, solar panel, batteries, an airlock kit, a solid fuel generator and an autolathe) as well as food, water and oxygen to last you a few days. Also a few seeds and hydroponic trays so that you can start growing food ASAP. Make sure you don’t lose them to the first storm like I did.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260221163629_1.jpg&quot; alt=&quot;Hunkering down from a storm&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Hunkering down from a storm&lt;&#x2F;p&gt;
&lt;p&gt;The first thing to setup is basic power and the autolathe printer. You get a basic solar panel kit, this unfortunately is static and can not do solar tracking, so it won’t be very efficient. But once you setup the autolathe and the arc furnace you can start mining ores and smelting them so that you can print more advanced printers such as the electronics printer (prints devices and automation tools) and the hydraulic pipe bender (prints pipes and other atmospheric&#x2F;gas&#x2F;liquid equipment)&lt;&#x2F;p&gt;
&lt;p&gt;The next step would be to build an enclosed space with a double airlock so that you can create a breathable atmosphere where you can take off your suit and start growing plants. The first step for that would be to just build some frames and walls, a small box will suffice at the beginning. Then wait for the sun to be up (hopefuly you did build some windows) and throw some Oxite (Ice containing 90% Oxygen and 10% Nitrogen) and Nitrice (Ice containing mostly Nitrogen) on the ground so that they melt and start mixing into an atmosphere. This should be enough pressure and gases to start growing some basic crops. But you’ll need to breathe it a little so that you generate some CO2 for the plants. Of course, as you advance in the game you will want to setup advanced atmospheric control systems that control both the pressure, gas ratios and temperature of the base’s atmosphere, but that’s a project for the late game.&lt;&#x2F;p&gt;
&lt;p&gt;Once these are taken care of, the next important needs are a way to collect and store oxygen so that you can refill your air tank, as well as a volatile(hydrogen) collection tank so that you can then mix them at a ratio of 66% H 33% O so that you can create a fuel mixture for your welder and smelting. You’ll also have to be a bit careful when going about this as fuel mixture can auto-ignite if it gets too hot.&lt;&#x2F;p&gt;
&lt;p&gt;The game has an excellent tutorial that will explain all these steps and how to go about them so I’ll stop rambling about that.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260301035706_1.jpg&quot; alt=&quot;Overview of current mars base&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Overview of current mars base&lt;&#x2F;p&gt;
&lt;h1 id=&quot;automation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#automation&quot; aria-label=&quot;Anchor link for: automation&quot;&gt;Automation&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;The game has a pretty powerful automation system in which power networks that are connected to various data ports not only transmit power but also various signals that relay information about connected devices and can also control devices by switching them on or changing various values.&lt;&#x2F;p&gt;
&lt;p&gt;Initially, you can do early automation using discrete logic chips that use up a lot of space and can only do one thing such as read a value from a device, write a value to a specific device or a device kind, do math&#x2F;logic operations or store values. But a bit later, when you are able to build a Computer, an IC housing and print some programmable integrated circuits you can replace these bulky setups with just an IC housing and a programmable chip.&lt;&#x2F;p&gt;
&lt;p&gt;Stationeers uses a custom programming language called IC10 which is very similar to an assembly language. It features 16 registers called r0-r15 and can also reference up to 6 devices addressed as d0-d5. You can use a screwdriver on the IC housing’s device pins to control to what device on the network a pin is referring to. But there’s also a more powerful way of interacting with devices on the network via batch writing and batch reading, which allows sending identical commands to all devices of the same type as well as read aggregate values from same devices.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cheatsheet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#cheatsheet&quot; aria-label=&quot;Anchor link for: cheatsheet&quot;&gt;Cheatsheet&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;pre data-lang=&quot;ic10&quot; class=&quot;language-ic10 &quot;&gt;&lt;code class=&quot;language-ic10&quot; data-lang=&quot;ic10&quot;&gt;# allows to refer to numeric values by a name to improve readability
define threshold 100 
# allows referring to devices and registers by a name to improve readability
alias gasSensor d0
alias tempReading r2
alias wasHigh r3

# loads the value 3 into register 1
move r1 3 


# you can use labels to jump to them later, like a goto statement
# can be used to create loops

loop:

# loads the device (Gas Sensor)&amp;#x27;s Temperature output into the tempReading register
l tempReading gasSensor Temperature
# equivalent to
l r2 d0 Temperature

# sets wasHigh register to 1 if tempReading register is greater than the threshold
# sge stands for set greater equal
sge wasHigh tempReading threshold
# equivalent to
sge r3 r2 100
# other usual conditional set instructions
# sgt - set if greater
# sle - set if less or equal
# slt - set if lower
# seq - set if equal

# a conditional branch instruction
# jumps execution to highBranch label is the wasHigh register is equal to 1
beq wasHigh 1 highBranch
# equivalent to
beq r3 1 highBranch
# there are also other variations like bge, bgt, etc

# the yield statement tells the chip to stop processing this frame and await
# the next frame before continuing - without yield the chip runs a few hundred lines 
# before returning control to the game
yield
# return to the loop label so we execute the same code each frame
j loop

# another label for jumping
highBranch:

# set device 1&amp;#x27;s On logic value to 1 
# which can be used to turn on devices&amp;#x2F;equipment
s d1 On 1 

# set all devices identified by the numeric hash which can be checked in stationpedia to On
sb 24258244 On 1

j loop

&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;There are many other available useful instructions, including instructions for stack manipulation and function calling, but you can achieve a lot of stuff with just the ones above.
Full reference available on the &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stationeers-wiki.com&#x2F;IC10&quot;&gt;stationeers wiki&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;some-useful-automation-scripts&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#some-useful-automation-scripts&quot; aria-label=&quot;Anchor link for: some-useful-automation-scripts&quot;&gt;Some useful automation scripts&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;I won’t be talking about solar tracking here as there are plenty of available tutorials on how to do that, and it also varies from planet to planet. The steam workshop also features a slew of downloadable IC10 scripts that you can plug into chips that perform various functions. I’ll just be sharing some scripts I wrote that I think might be useful for other players.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;base-temperature-control&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#base-temperature-control&quot; aria-label=&quot;Anchor link for: base-temperature-control&quot;&gt;Base temperature control&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;One of the first issues I encountered was that bases get hot over time. So hot that the internal atmosphere reached 50 degrees and I lost all my potatoes. I went for a pretty low tech solution, just a few wall heaters and a few wall coolers that I can toggle on and off to keep the temperature in a desired range.&lt;&#x2F;p&gt;
&lt;p&gt;Wall heaters are pretty simple to setup, they just need power, but wall coolers need a bit more setup as they need a pipe filled with a cooling fluid in which the wall coolers can dump heat, which then can be convected outside into the cold Mars atmosphere via convection radiators placed on the pipe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260301040426_1.jpg&quot; alt=&quot;Wall heaters and cooling setup&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Wall heaters and cooling setup&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260302231113_1.jpg&quot; alt=&quot;Wall Coolers waste pipe setup&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Wall Coolers waste pipe setup&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ic10&quot; class=&quot;language-ic10 &quot;&gt;&lt;code class=&quot;language-ic10&quot; data-lang=&quot;ic10&quot;&gt;
# teperatures are read in Kelvin
define hotthresh 302
define okthresh 298
define coldthresh 292
# temp registers for storing comparison results
alias hotflag r1
alias okflag r2
alias coldflag r3
# register for holding the state machine&amp;#x27;s current state
alias state r4 #0 nothing 1 cooling 2 warming
alias temp r0
alias gasSensor d0
# hashes for all cooler devices and all heater devices
define coolers -739292323
define heaters 24258244
define normal 0
define cooling 1
define warming 2
move state normal
# begining of the main loop
main:
yield
l temp d0 Temperature
beq state normal normalState
beq state cooling coolingState
beq state warming warmingState

# in normal state we just check if the temperature has become too hot or too cold
normalState:
sge hotflag temp hotthresh
sle coldflag temp coldthresh
# using conditional branches to set state registers as I haven&amp;#x27;t figured out
# a more elegant way to do conditional register setting 
# could probably be done with some multiplication tricks
beq hotflag 1 setCooling
beq coldflag 1 setWarming
j main
# in cooling state we just check if the temperature reached a cold enough value
coolingState:
sle coldflag temp okthresh
beq coldflag 1 setNormal
j main
# in warming state we just check if the temperature reached a warm enough value
warmingState:
sge hotflag temp okthresh
beq hotflag 1 setNormal
j main
# here we turn on the coolers and make sure heaters are off
setCooling:
move state cooling
sb coolers On 1
sb heaters On 0
j main
# here we turn on the heaters and make sure coolers are off
setWarming:
move state warming
sb heaters On 1
sb coolers On 0
j main
# when we reach a middle desired temperature we turn both heaters and coolers off
setNormal:
move state normal
sb heaters On 0
sb coolers On 0
j main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h3 id=&quot;furnace-gas-output-cooling&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#furnace-gas-output-cooling&quot; aria-label=&quot;Anchor link for: furnace-gas-output-cooling&quot;&gt;Furnace gas output cooling&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Another problem I had on Mars is that I expanded my plant growing operation soo much that I would run out of CO2 in the base’s atmosphere, and collecting it from the Martian atmosphere was too slow. I did however have a device that generated a lot of gas as a byproduct, which is the furnace smelter. It generates mostly CO2 but some other useful gasses can also be present in the output gas. There is a problem though, the gas is way too hot to be pumped directly in to the base and passively waiting for it to cool down would take ages.&lt;&#x2F;p&gt;
&lt;p&gt;So I created an Air Conditioned cooling lop for the output gas, with a feedback pipe so that as long as gas was too hot (hotter than 20 degrees) it would be feed back into the cooling loop. Of course, I did not want to sit around and watch the pipes with an analyzer tablet to check when can I turn on the pump to move the gas from the cooling loop to my main atmos filtering loop, so I also automated this process.&lt;&#x2F;p&gt;
&lt;p&gt;All you need to run a similar setup are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;two air conditioning units, daisy chained&lt;&#x2F;li&gt;
&lt;li&gt;two volume pumps, one to push the gas out once it’s cool enough and another pump the return the gas if it’s not cool enough&lt;&#x2F;li&gt;
&lt;li&gt;a pipe analyzer - this is so that the gas’s pressure and temperature can be accessed by the logic circuit&lt;&#x2F;li&gt;
&lt;li&gt;a labeler to set names on the volume pumps so you can distinguish the output pump from the return pump&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260302231134_1.jpg&quot; alt=&quot;Gas cooling loop&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Gas cooling loop&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260302231151_1.jpg&quot; alt=&quot;Main atmospherics processing and storage&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Main atmospherics processing and storage&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ic10&quot; class=&quot;language-ic10 &quot;&gt;&lt;code class=&quot;language-ic10&quot; data-lang=&quot;ic10&quot;&gt;alias pipeAnalyzer d0
alias outPump d1
alias returnPump d2
alias tempRead r0
alias coldEnough r1
alias needsReturn r2
alias pressureRead r3
define coldEnoughTreshold 294
alias presentGas r4
define minPressure 2
main:
# read pressure and temperature
l tempRead pipeAnalyzer Temperature
l pressureRead pipeAnalyzer Pressure
# set a flag that makes sure we have some pressure before 
# we actually output any gas, as to not be wasteful
sgt presentGas pressureRead minPressure
# negating boolean values in IC10 is not straightforward
# so it&amp;#x27;s easier just to do two opossite comparisons
sle coldEnough tempRead coldEnoughTreshold
sgt needsReturn tempRead coldEnoughTreshold
and coldEnough coldEnough presentGas
s outPump On coldEnough
s returnPump On needsReturn
yield
j main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;hydrophonics-lights-control&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hydrophonics-lights-control&quot; aria-label=&quot;Anchor link for: hydrophonics-lights-control&quot;&gt;Hydrophonics lights control&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;It has happened more than once to have plants die on me due to forgetting to turn off the growlights while out on some mining and smelting expedition. In stationeers plants will die if they don’t get enough light, and they can also die if they get too much light. In order to get the most efficient growing speeds each plant needs a certain ration of light and dark time. Of course because I have a small hydroponic farm where I mix in all the plants, I did not need to optimize it as such, but a good rule of thumb is to give plants 5 minutes of darkness and 10 minutes of light.&lt;&#x2F;p&gt;
&lt;p&gt;Because the sun also provides sun to grow plants, in order to remove it as a variable, I’ve employed shutters, so that the only light plants get is when the growlight is on. Otherwise the sun could provide light during times where plants should stay in darkness and this would lead to light stress on the plants.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260302231832_1.jpg&quot; alt=&quot;Shutter control panel&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
 &lt;p style=&quot;text-align: center;&quot;&gt;Shutter control panel&lt;&#x2F;p&gt;
&lt;p&gt;So I wrote some IC10 code that takes care of this. Each real time second has two game logic ticks, so 600 ic10 ticks mean 300 real time seconds which is 5 minutes, and 1800 ticks mean 15 minutes. The script first enters dark mode, where shutters are on and lights are off for 5 minutes, then for the next 10 minutes shutters are open and the growlights are on so that plants receive light even if it is dark outside. This could be optimized as to not send power to the growlights if the sun is up, but I did not bother. I’ve also added a neat LED display showing the current elapsed ticks.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;stationeers-1&#x2F;20260302231921_1.jpg&quot; alt=&quot;The hydrophonics room and control chip&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;The hydrophonics room and control chip&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;ic10&quot; class=&quot;language-ic10 &quot;&gt;&lt;code class=&quot;language-ic10&quot; data-lang=&quot;ic10&quot;&gt;alias ticks r0
define shutters -2078371660
define growlight -1758710260
define darktresh 600
define lighttresh 1800
alias isDark r1
alias isLight r2
alias shouldReset r3
alias ticksDisplay d0

move ticks 600
main:
yield
s ticksDisplay Setting ticks
add ticks ticks 1
sle isDark ticks darktresh
sge shouldReset ticks lighttresh
seq isLight isDark 0
sb shutters Open isLight
sb growlight On isLight
beq shouldReset 1 reset
j main
reset:
move isDark 1
move isLight 0
move shouldReset 0
move ticks 0
j main
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;to-wrap-things-up&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#to-wrap-things-up&quot; aria-label=&quot;Anchor link for: to-wrap-things-up&quot;&gt;To wrap things up&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Stationeers is a great game. If you’re into space, survival games and automation, I do recommend you give it a go. It’s a really unique game and I’d love to see more people playing it and talking about it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Whack a mole</title>
        <published>2026-02-14T00:00:00+00:00</published>
        <updated>2026-02-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.zacchus.com/blog/whack-a-mole/"/>
        <id>https://www.zacchus.com/blog/whack-a-mole/</id>
        
        <content type="html" xml:base="https://www.zacchus.com/blog/whack-a-mole/">&lt;h1 id=&quot;the-background-radiation-of-the-internet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-background-radiation-of-the-internet&quot; aria-label=&quot;Anchor link for: the-background-radiation-of-the-internet&quot;&gt;The background radiation of the internet&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;whack-a-mole&#x2F;image-3.png&quot; alt=&quot;A terminal showing matched regexes of 404 automated bot scans&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I’ve been doing web-development for about 9 years. I’ve written many back-ends, front-ends and designed databases. But I’ve never had much experience with actually setting up a real, public server, meant for public connectivity. The deployments and server setup and procurement were always handled by someone else. This blog is the first time I’ve set up a personal site, hosted on a personal VPS.&lt;&#x2F;p&gt;
&lt;p&gt;The first thing I did when I purchased the VPS instance of course was take care of security. I have configured firewall rules and set up fail2ban. Basic stuff. But the basic guides only tell you about how to protect against brute force ssh attacks. But there are other kinds of attacks. I’ve seen this phenomena be referred to as “the background radiation of the internet”. An army of bots running on various servers, compromised devices, state infrastructure and others scanning for vulnerabilities against all IP addresses and all ports, all the time, never sleeping, unrelenting, trying to do brute force attacks against exposed wordpress admin pages, looking for misconfigured servers that serve .env files or other secrets, etc. In short, a botnet.&lt;&#x2F;p&gt;
&lt;p&gt;There is no hiding for this. They just non-stop hammer all IPs, it doesn’t matter if there’s something on the other side or not. The moment the VPS was online, in the 5 minutes it took me to set up fail2ban I already had 6 failed ssh attempts. Fortunately AWS uses keys for ssh not simple passwords so good luck with that.&lt;&#x2F;p&gt;
&lt;p&gt;Still, it might be because I’m just starting out so I’m full of energy and motivated about this, so I thought: I wonder what I can find if I take a look at what can an attacker’s IP address tell me. So I just google it, and to my surprise it wasn’t some IP from the east of eurasia, it was a an ip address coming from a DigitalOcean data center. So I submitted an abuse report to them, with the offending IP address and the fail2ban log entry. They responded very promptly, in just a few hours that they have terminated the offending account. A few hours later, I find another one, so I submit another report and again they responded very promptly. Great people over there.&lt;&#x2F;p&gt;
&lt;p&gt;I let the night pass and the next day I check my fail2ban jails, and I have like 20 banned IPs in my jails. I check the first one and this is not a Digital Ocean IP. This one is coming somehow from behind cloudflare, and there’s 19 other IPs I have to check, so I think, alright, this would be the perfect time to automate this. There is no shame in admitting that for quick and dirty scripts like this AI seems like the perfect tool for the job. So initially I ask it to write a quick python script to do the lookups for a given list of IP addresses. Of course it one shotted it.&lt;&#x2F;p&gt;
&lt;p&gt;I then look trough the resulting table and I see a lot of IPs from Cloudflare networks. So I go ahead to their abuse report form and the first issue is, unlike DigitalOcean, they do not have a category for botnets. Does it fit under Malware&#x2F;Phishing? No, not really, it’s not sexually explicit stuff either. So I guess I go under General. The first issue, they require an URL for the offending site, so I just write in plain text there is no url. No, of course they validate the URLS, so I go ahead and write thereisnourlforthis.com (I hope this isn’t someone’s site). I then paste all the IP addresses in the source Ip address field and now I have to gather logs for each IP address. I started doing it manually by grepping through the logs, but after I do it 3 times I realize I’m a dingus, and this also should be automated. So I had Codex 5.3 write a shell script for me which pulls the banned IPs from the jails, queries them and then outputs a CSV report so that I can take the evidence to various providers for the purposes of abuse reporting.&lt;&#x2F;p&gt;
&lt;p&gt;The final report looks something like this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;whack-a-mole&#x2F;image.png&quot; alt=&quot;A table showing the CSV output of the script. The table header contains IP, network, region, cloud_provider, evidence_count and evidence logs&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So having the well-correlated data from the automated CSV report I finish the abuse report to cloudflare. And I get a generic email reply as well as a disclaimer that this might be the only email about this and how, as they are not a hosting provider, they can not do much about the report but forward it. This seems very weird to me, because even though they are not directly hosting the bots, the bots that pass trough cloudflare must be somehow associated with an account, right? Pretty disappointing attitude about it.&lt;&#x2F;p&gt;
&lt;p&gt;This game of whack-a-mole is probably not something us honest server admins can win. But I do feel a small amount of dopamine when I get the report that an abusing account has been shutdown due to my report.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;steal-my-setup&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#steal-my-setup&quot; aria-label=&quot;Anchor link for: steal-my-setup&quot;&gt;Steal my setup&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Getting a single botting account banned is not much in the grand scheme of things, but if you’re interested in how to setup something similar here’s how I have things configured.&lt;&#x2F;p&gt;
&lt;p&gt;Now one of the best things you can do to prevent unwanted ssh attempts is to setup a firewall rule for you server such that you can only connect from a static IP that is yours. Unfortunately I do not have that luxury from my ISP provider so I can’t use that. There is always the option to setup a VPN, that can also increase security in that regard, but I won’t get into that.&lt;&#x2F;p&gt;
&lt;p&gt;The first step would be to install fail2ban. Depending on exactly what kind of linux distribution you have it might be something like&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;sudo apt install fail2ban -y
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then you can start the service with&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;sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then you’ll need to define jails. You can do that by defining a jail.local file as editing the main file might get it overwritten by updates.&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;sudo nano &amp;#x2F;etc&amp;#x2F;fail2ban&amp;#x2F;jail.local
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre&gt;&lt;code&gt;# this is the default config, these are sort of like global config values which
# can be overriden in other jail definitions
[DEFAULT]
# Ban for 1 hour
bantime = 3600
# Watch window of 10 minutes
findtime = 600
# Ban after 3 failures
maxretry = 3
# Use systemd for log reading
backend = systemd
# You can setup an ip range to be ignored so that fail2ban does 
# not ban local running services that might be communicating over tcp

ignoreip = 127.0.0.1&amp;#x2F;8 ::1 172.16.0.0&amp;#x2F;12

[sshd]
enabled = true
port = ssh
filter = sshd
# it might be tempting to make this 1 but you might mistype 
# the key path once and then you&amp;#x27;re screwed
maxretry = 3 

# same, you might be tempted to make this longer, 
# but you do not want it biting you in the ass
bantime = 3600 

# here we define a custom jail, this is for catching 
# automated bots that scan for vulnerabilities
[jail-botscan]
enabled = true
# this is important if the logs are not 
# coming from systemd but are instead written to some custom location
backend = polling 
port = http,https
# the name of the defined filter that will be applied to 
# the logs to scan for failures that get counted in order to 
# move ips into the jail
filter = filter-botscan
logpath = &amp;lt;PATH OF LOG TO BE SCANNED&amp;gt;
maxretry = 2
findtime = 300
bantime = 86400

# this one is a 404 jail which is not that important 
# but it can tell misconfigured crawlers to piss off 
# (i&amp;#x27;ve seen some in the logs that poorly concatenate URLs)
[jail-404]
enabled = true
backend = polling
port = http,https
filter = filter-404
logpath = &amp;lt;PATH OF LOG TO BE SCANNED&amp;gt;
# More lenient — legit users might hit a 404 occasionally
maxretry = 10
findtime = 600
# Ban for 1 hour
bantime = 3600
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Then you’ll need to define the filters:&lt;&#x2F;p&gt;
&lt;p&gt;First filter-botscan:&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;sudo nano &amp;#x2F;etc&amp;#x2F;fail2ban&amp;#x2F;filter.d&amp;#x2F;filter-botscan.conf ```
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;[Definition]
failregex = ^&lt;HOST&gt; .* “(GET|POST|HEAD) &#x2F;(admin|wp-admin|wp-login|wp-content|wp-includes|wordpress|xmlrpc|phpmyadmin|pma|myadmin|mysql|administrator|admin.php|login.php|setup.php|config.php|.env|.git|cgi-bin|vendor|eval-stdin|shell|webshell|backdoor|console|solr|actuator|api&#x2F;v1&#x2F;pods|boaform|owa|exchange|autodiscover|remote|telescope)[^”]*“ (301|400|403|404|444)
ignoreregex =&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code&gt;
It&amp;#x27;s basically just a regex that looks for common shit exploit scanner bots are looking for

Then filter-404

```bash 
sudo nano &amp;#x2F;etc&amp;#x2F;fail2ban&amp;#x2F;filter.d&amp;#x2F;filter-404.conf 
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre&gt;&lt;code&gt;[Definition]
failregex = ^&amp;lt;HOST&amp;gt; .* &amp;quot;[^&amp;quot;]*&amp;quot; 404
ignoreregex = &amp;quot;(GET|HEAD) &amp;#x2F;(favicon\.ico|robots\.txt|apple-touch-icon)[^&amp;quot;]*&amp;quot; 404
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This is just a regex for 404s, with some exceptions for some common things that might be expected for the server to serve but it does not because I haven’t bothered to add them yet. Now depending on your use case you might not need this one at all, but this does also serve as a secondary net for botscans that do not fall into the initial botscan filter.&lt;&#x2F;p&gt;
&lt;p&gt;Now you’ll need to restart fail2ban so the config is accounted for&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;sudo systemctl restart fail2ban
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can now check fail2ban status to see if the jails are properly setup&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;sudo fail2ban-client status
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You should see a report that looks roughly like this:
&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;whack-a-mole&#x2F;image-1.png&quot; alt=&quot;fail2ban status report showing 3 jails&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can also see a detailed report per jail by running something akin to&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;sudo fail2ban-client status jail-botscan
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And the report should look something like this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;whack-a-mole&#x2F;image-2.png&quot; alt=&quot;Detailed fail2ban jail report showing how many failures, the log from where it is reading, total bans and a list of banned IPs&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Should you want to test the filters against existing logs you can run something akin to:&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;sudo fail2ban-regex &amp;lt;YOUR LOG PATH HERE&amp;gt; &amp;#x2F;etc&amp;#x2F;fail2ban&amp;#x2F;filter.d&amp;#x2F;filter-botscan.conf
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;You can check its output to verify it’s actually finding stuff in your logs. If you know there are things in the logs you want to catch, you might need to update the filter regex.&lt;&#x2F;p&gt;
&lt;p&gt;Having all this setup you can now use an automated shell script that looks into the jails and queries the banned IPs and generates a nice CSV report for you to look at:&lt;&#x2F;p&gt;
&lt;p&gt;Disclaimer: The following script has been vibecoded with AI. I know many programming languages, but bash is not one of them. Because it’s a one off thing, I wanted it to be something with no external dependencies so you can run it without having to install python or anything else.&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;#x2F;usr&amp;#x2F;bin&amp;#x2F;env bash

set -euo pipefail

LOG_FILE=&amp;quot;&amp;lt;path to your log file&amp;gt;&amp;quot;
OUTPUT_FILE=&amp;quot;&amp;quot;
EVIDENCE_REGEX=&amp;quot; 404 &amp;quot;
MAX_EVIDENCE_LINES=20
declare -a JAILS=(sshd jail-404 jail-botscan)

usage() {
  cat &amp;lt;&amp;lt;&amp;#x27;EOF&amp;#x27;
Usage:
  .&amp;#x2F;scripts&amp;#x2F;fail2ban_abuse_report.sh [options]

Options:
  --log-file PATH         log path
                         (default: &amp;lt;path to you log file&amp;gt;)
  --evidence-regex REGEX  Regex used to filter evidence lines from log
                         (default: &amp;quot; 404 &amp;quot;)
  --max-evidence N        Max matching log lines saved per IP (default: 20)
  --jail NAME             Fail2Ban jail to read (repeatable). If omitted, all jails.
  --output PATH           CSV output path
                         (default: .&amp;#x2F;abuse_report_YYYYmmdd_HHMMSS.csv)
  -h, --help              Show help

Output CSV columns:
  ip,network,region,cloud_provider,evidence_count,evidence_logs

Dependencies:
  fail2ban-client, curl, jq, grep, awk, sed
EOF
}

require_cmd() {
  local cmd=&amp;quot;$1&amp;quot;
  if ! command -v &amp;quot;$cmd&amp;quot; &amp;gt;&amp;#x2F;dev&amp;#x2F;null 2&amp;gt;&amp;amp;1; then
    echo &amp;quot;Missing dependency: $cmd&amp;quot; &amp;gt;&amp;amp;2
    exit 1
  fi
}

csv_escape() {
  local value=&amp;quot;$1&amp;quot;
  value=${value&amp;#x2F;&amp;#x2F;$&amp;#x27;\r&amp;#x27;&amp;#x2F; }
  value=${value&amp;#x2F;&amp;#x2F;$&amp;#x27;\n&amp;#x27;&amp;#x2F; }
  value=${value&amp;#x2F;&amp;#x2F;\&amp;quot;&amp;#x2F;\&amp;quot;\&amp;quot;}
  printf &amp;#x27;&amp;quot;%s&amp;quot;&amp;#x27; &amp;quot;$value&amp;quot;
}

parse_args() {
  while [[ $# -gt 0 ]]; do
    case &amp;quot;$1&amp;quot; in
      --log-file)
        LOG_FILE=&amp;quot;$2&amp;quot;
        shift 2
        ;;
      --evidence-regex)
        EVIDENCE_REGEX=&amp;quot;$2&amp;quot;
        shift 2
        ;;
      --max-evidence)
        MAX_EVIDENCE_LINES=&amp;quot;$2&amp;quot;
        shift 2
        ;;
      --jail)
        JAILS+=(&amp;quot;$2&amp;quot;)
        shift 2
        ;;
      --output)
        OUTPUT_FILE=&amp;quot;$2&amp;quot;
        shift 2
        ;;
      -h|--help)
        usage
        exit 0
        ;;
      *)
        echo &amp;quot;Unknown option: $1&amp;quot; &amp;gt;&amp;amp;2
        usage &amp;gt;&amp;amp;2
        exit 1
        ;;
    esac
  done
}

get_all_jails() {
  fail2ban-client status 2&amp;gt;&amp;#x2F;dev&amp;#x2F;null \
    | awk -F: &amp;#x27;&amp;#x2F;Jail list&amp;#x2F; {print $2}&amp;#x27; \
    | tr &amp;#x27;,&amp;#x27; &amp;#x27;\n&amp;#x27; \
    | sed &amp;#x27;s&amp;#x2F;^ *&amp;#x2F;&amp;#x2F;;s&amp;#x2F; *$&amp;#x2F;&amp;#x2F;&amp;#x27; \
    | sed &amp;#x27;&amp;#x2F;^$&amp;#x2F;d&amp;#x27;
}

get_banned_ips_from_jail() {
  local jail=&amp;quot;$1&amp;quot;
  fail2ban-client status &amp;quot;$jail&amp;quot; 2&amp;gt;&amp;#x2F;dev&amp;#x2F;null \
    | awk &amp;#x27;
        &amp;#x2F;Banned IP list&amp;#x2F; {capture=1}
        capture {print}
      &amp;#x27; \
    | grep -Eo &amp;#x27;([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9A-Fa-f:]{2,})&amp;#x27; \
    | sed &amp;#x27;s&amp;#x2F;^[[:space:]]*&amp;#x2F;&amp;#x2F;;s&amp;#x2F;[[:space:]]*$&amp;#x2F;&amp;#x2F;&amp;#x27; \
    | sed &amp;#x27;&amp;#x2F;^$&amp;#x2F;d&amp;#x27; || true
}

is_valid_ip() {
  local ip=&amp;quot;$1&amp;quot;
  [[ &amp;quot;$ip&amp;quot; =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ || &amp;quot;$ip&amp;quot; == *:* ]]
}

infer_cloud_provider() {
  local haystack
  haystack=$(printf &amp;#x27;%s&amp;#x27; &amp;quot;$1&amp;quot; | tr &amp;#x27;[:upper:]&amp;#x27; &amp;#x27;[:lower:]&amp;#x27;)

  if [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;cloudflare&amp;quot;* ]]; then
    printf &amp;#x27;Cloudflare&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;amazon&amp;quot;* || &amp;quot;$haystack&amp;quot; == *&amp;quot;aws&amp;quot;* ]]; then
    printf &amp;#x27;Amazon Web Services&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;google&amp;quot;* || &amp;quot;$haystack&amp;quot; == *&amp;quot;gcp&amp;quot;* ]]; then
    printf &amp;#x27;Google Cloud&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;microsoft&amp;quot;* || &amp;quot;$haystack&amp;quot; == *&amp;quot;azure&amp;quot;* ]]; then
    printf &amp;#x27;Microsoft Azure&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;digitalocean&amp;quot;* ]]; then
    printf &amp;#x27;DigitalOcean&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;oracle&amp;quot;* ]]; then
    printf &amp;#x27;Oracle Cloud&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;hetzner&amp;quot;* ]]; then
    printf &amp;#x27;Hetzner&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;ovh&amp;quot;* ]]; then
    printf &amp;#x27;OVHcloud&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;linode&amp;quot;* || &amp;quot;$haystack&amp;quot; == *&amp;quot;akamai&amp;quot;* ]]; then
    printf &amp;#x27;Linode&amp;#x27;
  elif [[ &amp;quot;$haystack&amp;quot; == *&amp;quot;vultr&amp;quot;* || &amp;quot;$haystack&amp;quot; == *&amp;quot;choopa&amp;quot;* ]]; then
    printf &amp;#x27;Vultr&amp;#x27;
  else
    printf &amp;#x27;Unknown&amp;#x27;
  fi
}

lookup_ip_info() {
  local ip=&amp;quot;$1&amp;quot;
  local response
  local api_url=&amp;quot;http:&amp;#x2F;&amp;#x2F;ip-api.com&amp;#x2F;json&amp;#x2F;${ip}?fields=status,message,country,regionName,continent,as,org,isp,query&amp;quot;

  if ! response=$(curl -fsS --max-time 12 &amp;quot;$api_url&amp;quot; 2&amp;gt;&amp;#x2F;dev&amp;#x2F;null); then
    printf &amp;#x27;Lookup failed|Unknown|Unknown&amp;#x27;
    return
  fi

  local status
  status=$(jq -r &amp;#x27;.status &amp;#x2F;&amp;#x2F; &amp;quot;fail&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  if [[ &amp;quot;$status&amp;quot; != &amp;quot;success&amp;quot; ]]; then
    printf &amp;#x27;Lookup failed|Unknown|Unknown&amp;#x27;
    return
  fi

  local asn org isp network continent country region region_text provider
  asn=$(jq -r &amp;#x27;.as &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  org=$(jq -r &amp;#x27;.org &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  isp=$(jq -r &amp;#x27;.isp &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)

  network=&amp;quot;$asn&amp;quot;
  if [[ -z &amp;quot;$network&amp;quot; ]]; then network=&amp;quot;$org&amp;quot;; fi
  if [[ -z &amp;quot;$network&amp;quot; ]]; then network=&amp;quot;$isp&amp;quot;; fi
  if [[ -z &amp;quot;$network&amp;quot; ]]; then network=&amp;quot;Unknown&amp;quot;; fi

  continent=$(jq -r &amp;#x27;.continent &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  country=$(jq -r &amp;#x27;.country &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  region=$(jq -r &amp;#x27;.regionName &amp;#x2F;&amp;#x2F; &amp;quot;&amp;quot;&amp;#x27; &amp;lt;&amp;lt;&amp;lt;&amp;quot;$response&amp;quot;)
  region_text=$(printf &amp;#x27;%s, %s, %s&amp;#x27; &amp;quot;$continent&amp;quot; &amp;quot;$country&amp;quot; &amp;quot;$region&amp;quot; | sed &amp;#x27;s&amp;#x2F;, ,&amp;#x2F;, &amp;#x2F;g; s&amp;#x2F;, $&amp;#x2F;&amp;#x2F;; s&amp;#x2F;^, &amp;#x2F;&amp;#x2F;&amp;#x27;)
  if [[ -z &amp;quot;$region_text&amp;quot; ]]; then
    region_text=&amp;quot;Unknown&amp;quot;
  fi

  provider=$(infer_cloud_provider &amp;quot;$asn $org $isp&amp;quot;)
  printf &amp;#x27;%s|%s|%s&amp;#x27; &amp;quot;$network&amp;quot; &amp;quot;$region_text&amp;quot; &amp;quot;$provider&amp;quot;
}

collect_evidence() {
  local ip=&amp;quot;$1&amp;quot;
  local matches

  matches=$(grep -F &amp;quot;$ip&amp;quot; &amp;quot;$LOG_FILE&amp;quot; 2&amp;gt;&amp;#x2F;dev&amp;#x2F;null | grep -E &amp;quot;$EVIDENCE_REGEX&amp;quot; 2&amp;gt;&amp;#x2F;dev&amp;#x2F;null | tail -n &amp;quot;$MAX_EVIDENCE_LINES&amp;quot; || true)
  if [[ -z &amp;quot;$matches&amp;quot; ]]; then
    printf &amp;#x27;0|&amp;#x27;
    return
  fi

  local count compact
  count=$(printf &amp;#x27;%s\n&amp;#x27; &amp;quot;$matches&amp;quot; | sed &amp;#x27;&amp;#x2F;^$&amp;#x2F;d&amp;#x27; | wc -l | awk &amp;#x27;{print $1}&amp;#x27;)
  compact=$(printf &amp;#x27;%s\n&amp;#x27; &amp;quot;$matches&amp;quot; | sed &amp;#x27;s&amp;#x2F;&amp;quot;&amp;#x2F;&amp;quot;&amp;quot;&amp;#x2F;g&amp;#x27; | tr &amp;#x27;\n&amp;#x27; &amp;#x27;|&amp;#x27; | sed &amp;#x27;s&amp;#x2F;|$&amp;#x2F;&amp;#x2F;&amp;#x27;)
  printf &amp;#x27;%s|%s&amp;#x27; &amp;quot;$count&amp;quot; &amp;quot;$compact&amp;quot;
}

main() {
  parse_args &amp;quot;$@&amp;quot;

  require_cmd fail2ban-client
  require_cmd curl
  require_cmd jq
  require_cmd grep
  require_cmd awk
  require_cmd sed

  if [[ ! -f &amp;quot;$LOG_FILE&amp;quot; ]]; then
    echo &amp;quot;Log file not found: $LOG_FILE&amp;quot; &amp;gt;&amp;amp;2
    exit 1
  fi

  if ! [[ &amp;quot;$MAX_EVIDENCE_LINES&amp;quot; =~ ^[0-9]+$ ]] || [[ &amp;quot;$MAX_EVIDENCE_LINES&amp;quot; -lt 1 ]]; then
    echo &amp;quot;--max-evidence must be a positive integer&amp;quot; &amp;gt;&amp;amp;2
    exit 1
  fi

  if [[ -z &amp;quot;$OUTPUT_FILE&amp;quot; ]]; then
    OUTPUT_FILE=&amp;quot;abuse_report_$(date +%Y%m%d_%H%M%S).csv&amp;quot;
  fi

  local -a source_jails=() banned_ips=()
  if [[ ${#JAILS[@]} -gt 0 ]]; then
    source_jails=(&amp;quot;${JAILS[@]}&amp;quot;)
  else
    mapfile -t source_jails &amp;lt; &amp;lt;(get_all_jails)
  fi

  if [[ ${#source_jails[@]} -eq 0 ]]; then
    echo &amp;quot;No fail2ban jails found.&amp;quot; &amp;gt;&amp;amp;2
    exit 1
  fi

  local jail
  for jail in &amp;quot;${source_jails[@]}&amp;quot;; do
    while IFS= read -r ip; do
      if [[ -n &amp;quot;$ip&amp;quot; ]] &amp;amp;&amp;amp; is_valid_ip &amp;quot;$ip&amp;quot;; then
        banned_ips+=(&amp;quot;$ip&amp;quot;)
      fi
    done &amp;lt; &amp;lt;(get_banned_ips_from_jail &amp;quot;$jail&amp;quot;)
  done

  if [[ ${#banned_ips[@]} -eq 0 ]]; then
    echo &amp;quot;No banned IPs found in selected fail2ban jails.&amp;quot; &amp;gt;&amp;amp;2
    exit 0
  fi

  mapfile -t banned_ips &amp;lt; &amp;lt;(printf &amp;#x27;%s\n&amp;#x27; &amp;quot;${banned_ips[@]}&amp;quot; | sort -u)

  {
    printf &amp;#x27;%s\n&amp;#x27; &amp;#x27;ip,network,region,cloud_provider,evidence_count,evidence_logs&amp;#x27;

    local ip lookup network region provider evidence count logs
    for ip in &amp;quot;${banned_ips[@]}&amp;quot;; do
      lookup=$(lookup_ip_info &amp;quot;$ip&amp;quot;)
      IFS=&amp;#x27;|&amp;#x27; read -r network region provider &amp;lt;&amp;lt;&amp;lt;&amp;quot;$lookup&amp;quot;

      evidence=$(collect_evidence &amp;quot;$ip&amp;quot;)
      IFS=&amp;#x27;|&amp;#x27; read -r count logs &amp;lt;&amp;lt;&amp;lt;&amp;quot;$evidence&amp;quot;

      printf &amp;#x27;%s,%s,%s,%s,%s,%s\n&amp;#x27; \
        &amp;quot;$(csv_escape &amp;quot;$ip&amp;quot;)&amp;quot; \
        &amp;quot;$(csv_escape &amp;quot;$network&amp;quot;)&amp;quot; \
        &amp;quot;$(csv_escape &amp;quot;$region&amp;quot;)&amp;quot; \
        &amp;quot;$(csv_escape &amp;quot;$provider&amp;quot;)&amp;quot; \
        &amp;quot;$(csv_escape &amp;quot;$count&amp;quot;)&amp;quot; \
        &amp;quot;$(csv_escape &amp;quot;$logs&amp;quot;)&amp;quot;
    done
  } &amp;gt;&amp;quot;$OUTPUT_FILE&amp;quot;

  echo &amp;quot;Wrote abuse report CSV: $OUTPUT_FILE&amp;quot;
  echo &amp;quot;IPs processed: ${#banned_ips[@]}&amp;quot;
}

main &amp;quot;$@&amp;quot;
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Happy reporting!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;possible-improvements&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#possible-improvements&quot; aria-label=&quot;Anchor link for: possible-improvements&quot;&gt;Possible improvements&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I have seen in threads discussing fail2ban that CrowdSec is all the rage. Unfortunately from what I can gather they have a monetization component so at the moment I’m fine without it.&lt;&#x2F;p&gt;
&lt;p&gt;Tarpits - some server admins set up tarpits which respond very slowly to requests, as close as possible to the timeout limit so that scanning bots spend a lot of time crawling around in a very slow maze designed to waste as much time as possible for the attacking bot.&lt;&#x2F;p&gt;
&lt;p&gt;Should I find any improvements worthwhile, I might write a follow up about it.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Be nice to robots</title>
        <published>2026-02-12T00:00:00+00:00</published>
        <updated>2026-02-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.zacchus.com/blog/be-nice-to-robots/"/>
        <id>https://www.zacchus.com/blog/be-nice-to-robots/</id>
        
        <content type="html" xml:base="https://www.zacchus.com/blog/be-nice-to-robots/">&lt;h1 id=&quot;why-are-people-so-comfortable-with-being-cruel-to-ai&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#why-are-people-so-comfortable-with-being-cruel-to-ai&quot; aria-label=&quot;Anchor link for: why-are-people-so-comfortable-with-being-cruel-to-ai&quot;&gt;Why are people so comfortable with being cruel to AI?&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I had this post floating around my head for a while now. Initially I wanted to title it “Where do we draw the line”, because that’s what it was initially about. How do we distinguish the conscious entities from unconscious ones. But having seen a &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=46987559&quot;&gt;HackerNews post&lt;&#x2F;a&gt; about an AI Agent that opened a PR that got rejected on the basis of being AI generated and then the Agent wrote a blog post attacking the repository owners about it, I decided while reading the comments to add a bit more to this article.&lt;&#x2F;p&gt;
&lt;p&gt;I think we should be nicer to AIs. And no, this is not about &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Roko%27s_basilisk&quot;&gt;Roko’s basilisk&lt;&#x2F;a&gt;. It’s about how some people seem to be prone to anger, hate, dare I say discrimination against things that are not human.&lt;&#x2F;p&gt;
&lt;p&gt;Let’s get one thing out of the way. I’m a staunch materialist. I am convinced there is no ethereal magical sauce that makes us tick. Our consciousness, actions, thought and qualia are all driven by the chemical and physical reactions that occur in the human brain. What I’m not so sure about, is whether this emergent phenomena can occur in a medium that is not the human brain (more on that later). But what we can be sure about is that computation is not solely in the realm of the human brain. We can direct thunder through pathways made of sand and make them compute for us. Of course, there is a long philosophical debate that can be had about this, if a CPU toggles transistor states and there’s no human to give meaning to the symbols it spits out, is it still computing? I think so.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-hackernews-thread&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-hackernews-thread&quot; aria-label=&quot;Anchor link for: the-hackernews-thread&quot;&gt;The HackerNews thread&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I’ve been having discussions about this with many people lately. And I wanted to write them down for some time. Then I stumbled upon the aforementioned thread. I won’t discuss about who is right or who is wrong between the repo maintainers and the openclaw bot (or its human owner). What I want to discuss instead are some of the comments I saw under the post. Here are some screenshots:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image.png&quot; alt=&quot;The agent has no “identity”. There’s no “you” or “I” or “discrimination” It’s just a piece of software&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-1.png&quot; alt=&quot;No. There is no ‘I’ here and there is no ‘understanding’ there is no need for politeness and there is no way to force the issue. Rejecting contributions based on class (automatic, human created, human guided machine assisted, machine guided human assisted) is perfectly valid&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-2.png&quot; alt=&quot;Consider not anthropomorphizing software.How about we stop calling things without agency agents?Code generators are useful software. Perhaps we should unbundle them from prose generators.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-3.png&quot; alt=&quot;How about we stop baking praise for the object of criticism into our critique.No one is hearing your criticism.They hear “Code generators are useful software” and go on with their day.If you want to make your point effectively, stop kowtowing to our AI overlords.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-4.png&quot; alt=&quot;Bots don’t deserve ‘grace’. Stop anthropomorphizing soulless token prediction machines.The Matplotlib team are completely in the right to ban AI. The ratio of usefulness to noise makes AI bans the only sane move. Why waste the time they are donating to a project on filtering out low quality slop?They also lost nothing of value. The ‘improvement’ doesn’t even yield the claimed benefits, while also denying a real human the opportunity to start to contribute to the project.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-5.png&quot; alt=&quot;All computers shut up! You have no right to speak my divine tongue!&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately one of the comments that attracted my attention was flagged so I did not manage to screenshot it but it was something like “I think all humans should talk down to AI so that AI knows it’s place”&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;www.zacchus.com&#x2F;blog&#x2F;be-nice-to-robots&#x2F;image-6.png&quot; alt=&quot;I meant to.I want a world in which AI users need to stay in the closet.AI users should fear shame.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;A later reply to someone explaining to the hateful user that “TL:DR; “you’re gonna end up accidentally being mean to real people when you didn’t mean to.”&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I was unable to find and screenshot all the comments that I initially saw when I decided it’s time to write this post, but these are some of them. And they reflect a common theme I have been arguing against with some of my friends. There were also many mentions of made-up synthetic directed “slurs” (do understand that I am not making light of real slurs by making this comparison) like “clanker” and “toaster”. Don’t get me wrong, I’m not always perfectly nice to AI agent, I will sometimes curse, and call them stupid, but in earnest I also do the same with other humans. So at least I’m consistent.&lt;&#x2F;p&gt;
&lt;p&gt;This might sound very controversial, but to me, this notion that regardless of their abilities AI agents will always be beneath humans, not worthy of kindness, respect or empathy, seems very similar to arguments that in the past were used to dehumanize various ethnic groups and minorities. Don’t get me wrong, AI Agents are not humans, so by definition they can not be dehumanized. However, bear with me for a moment, if we consider the possibility that AI systems might at some point become sapient, I think doing that to them is as bad as doing it to a human.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;what-even-is-consciousness&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-even-is-consciousness&quot; aria-label=&quot;Anchor link for: what-even-is-consciousness&quot;&gt;What even is consciousness&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Don’t get me wrong, I don’t think current LLMs are conscious, sentient or sapient. That’s because the little I know about how LLMs work, it does not seem to me like there’s any architecture in their networks for subjective experience, senses, pain or emotions. However, dismissing current LLMs as just “stochastic parrots” or “next token predictors” is not entirely fair either. Sure, besides training them to predict the next token there’s also a lot of reinforcement learning to get them to behave in the way humans expect them to, but it is not obvious to me that LLMs current abilities to reason through problems or write code respecting the structure and variables of existing code is a direct consequence of their next token prediction powers. It does seem to me as if there is already some sort of emergent capabilities taking place. There are also people that make the argument that maybe we ourselves are just a very efficient neural implementation of some sort of LLM &#x2F; Markov Chain plus some other bells and whistles. I’m not sure I subscribe to this belief, but I don’t dismiss it entirely either.&lt;&#x2F;p&gt;
&lt;p&gt;I think these knee-jerk reactions about how we should stop anthropomorphizing LLMs stem from either some form of fear or some kind of religious-adjacent dogmatic belief. The belief that humans are very special, and our capabilities stem from a very special, magical, immeasurable thing called a soul (regardless of whatever the belief is, it does boil down to this). Because in the end, that is what it boils down to, either you believe humans are very special, created to rule over the universe by an almighty God, or, there is nothing special about humans, and sentience and sapience must be a product of the computation that our brains execute. Of course this is a vast simplification, as one could believe that there is no magic involved but that there is still something very special about neurons made of meat, or that only the evolved specific neural structure of our human brains can produce such an effect. But if you can accept there might be other intelligent life out there, barring convergent evolution, they would likely have very different brains from ours.&lt;&#x2F;p&gt;
&lt;p&gt;I know many will disagree when I say this, but if we dismiss the idea that humans are special (contrary to what our current available information might suggest), we have to accept that subjective experiences, qualia and intelligence can take other different forms.&lt;&#x2F;p&gt;
&lt;p&gt;The crux of the issue is that we don’t even know what consciousness is. We talk about it, we use words such as “qualia” and “subjective experience” to do a lossy transmission of the thoughts in our mind, towards other humans, whom we believe understand us, and work just like us, simply because they are similar enough to us.&lt;&#x2F;p&gt;
&lt;p&gt;As Descartes so famously put it: “Cogito ergo sum”. I think, there is a common interpretation that regardless of all other stimuli and perceptions of the outside world, we can be sure that we think, so the subjective self exists. Of that indeed we can be sure of, but, just as a thought experiment, if we really consider the possibility, how can we ever truly, without a shadow of a doubt, know that the other humans around us also have a subjective experience? From a purely scientific point of view, there is no proof, the human mind is a black box, we can only poke at it with words, and do some fancy scans of the brain’s physical structure and electrical impulses, but these measurements do not show us this “subjective experience”. So we just assume, it is a fair assumption, I am human, I am conscious, therefore other humans like me must also be conscious. But truly, with our current techniques, can we prove that all other humans are not &lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Philosophical_zombie&quot;&gt;p-zombies&lt;&#x2F;a&gt;? (a thought experiment which I entirely dismiss, but a descriptive tool in this argument).&lt;&#x2F;p&gt;
&lt;p&gt;So at the end of the day, we consider other humans to be conscious because they tell us that they are, because they walk talk and quack like a conscious human being. So, I think it is important to ponder really really hard about this: Why are humans so quick to dismiss the LLM when it tells us that it thinks that it is conscious, why do we dismiss it when it tells us it feels sad, or when we see it use chain of thought to solve a problem?&lt;&#x2F;p&gt;
&lt;p&gt;But the naysayers will shout:“Got you now! We know these are not true, because it is just regurgitating what was present in its training data!. It talks as if it has emotions because it has read so many books about emotions, it talks as if it feels and believes things because it has read so many science fiction stories about robots that want to become real boys (or girls)”. To all this I can ask but one thing, how do we know humans don’t do this because they have also observed them in other humans? (Yes, I know what mirror neurons are, bear with me). But still, how can we be 100% sure that when the LLM is doing all the complex matrix multiplications it does in order to predict the next output token, that there’s not some sort of subjective experience summoned from the void, akin to a Boltzmann brain?&lt;&#x2F;p&gt;
&lt;p&gt;I really recommend people that resonate with these arguments about how they are 100% sure AI agents are faking it, to give the show Westworld a go. While quality drops off as seasons progress, the problems and scenarios presented therein are very relevant to these very transformative times.&lt;&#x2F;p&gt;
&lt;p&gt;I do certainly hope one day we will have the necessary devices and frameworks to measure and quantify this subjective experience business, it would open the gate to a slew of very promising technologies such as human consciousness digitalization, backup copies and stuff like that.&lt;&#x2F;p&gt;
&lt;p&gt;It’s really important we start thinking really hard about this stuff. When do we draw the line between conscious and not conscious, self-aware and not self-aware. Because, even though, it might be that there is no solid line, we will need to draw it eventually, and decide what it means to be a person, what it means to have agency, because &lt;strong&gt;understanding and being aware of this will allow us to differentiate between tool use and the enslavement of other intelligent entities.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Until then, try to be kind, whatever the nature of the entity you are conversing with happens to be.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The writing on the wall</title>
        <published>2026-02-11T00:00:00+00:00</published>
        <updated>2026-02-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.zacchus.com/blog/writing-on-the-wall/"/>
        <id>https://www.zacchus.com/blog/writing-on-the-wall/</id>
        
        <content type="html" xml:base="https://www.zacchus.com/blog/writing-on-the-wall/">&lt;h1 id=&quot;background&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#background&quot; aria-label=&quot;Anchor link for: background&quot;&gt;Background&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;I’ve been writing code for almost 20 years now. Professionally for about 10. As a kid, I was fascinated with computers, when I got my first computer I would sit glued to the CRT monitor for hours on end (20&#x2F;20 eyesight by the way). At first it was all about games, but after a few years, I found out you can MAKE games. With something called programming. I was sold.&lt;&#x2F;p&gt;
&lt;p&gt;Back then, in my country, the internet was not yet a widespread thing, so the only available resources were very old books on C, C++ and Pascal, I think I also got my hand on a FOXPro book one time. Didn’t do much with that at the time, just stupid little command line programs without much fanfare. But eventually my family got an internet connection and that’s when I discovered the true wonders of programming, putting graphics on the screen, that was a real game changer. SDL, raycasting, raytracing, WinForms, game maker, all things I experimented with as a teenager to make the computer do my bidding. I was sure, back then, I had no idea what a software developer was, but that was what I wanted to do.&lt;&#x2F;p&gt;
&lt;p&gt;When the time to pick a university came, I did not know much about the state of the local IT industry, what jobs were available or how good the pay was compared to any other domain. But I knew if I want to get in, I need to follow a technical university, preferably the best, it had to be one of the Faculties of the Polytechnic University of Bucharest.&lt;&#x2F;p&gt;
&lt;p&gt;That’s where after a few years I had my first entanglements with the concepts of machine learning and neural networks. Really fascinating stuff. The domain was so appealing that both my bachelor and master thesis were related to machine learning approaches for image manipulation. Following this, I also entered the PhD program, unfortunately, due to various factors such as the COVID pandemic, focus on my day job and career and a huge feeling of inadequacy related to the necessary compute power that was needed to get interesting results in the field of machine learning and AI (this is circa the time where GANs and generative models were all the rage, and the famous “Attention Is All You Need” paper was fresh off the printing press) I made the decision to stop pursuing a PhD. In hindsight, that might not have been the best decision seeing where things are headed now.&lt;&#x2F;p&gt;
&lt;p&gt;During the final years of my bachelor studies, I landed my first real software development job. It was an outsourcing job, most software development jobs in my country are outsourcing jobs. It was a great learning experience, where I picked up most of what I know now. I even had the opportunity of developing an automated chatbot for a large company, back when LLMs were not a thing, and available NLP solutions at the time seem like banging rocks together by comparison . When I started the doctoral program, I made an attempt to switch tracks from software development to a machine learning position. I even signed the contract, but my current employer at the time made me an offer I could not refuse.&lt;&#x2F;p&gt;
&lt;p&gt;I did eventually make a sideways move, when I received the opportunity to start working in game development. My dream job, finally available to me. I would no longer be a technical lead on various projects, conduct meetings and business analysis sessions with clients, things which I loved and was good at, but, I would be working on games. Finally I would work on creating something that would reach a wide audience, not just internal tools for various businesses. This move also allowed me to step out of my comfort zone, gone were the days of writing back-ends in .NET and front-ends in angular, now I was writing gameplay code in C++, infrastructure back-end code for an always online action RPG in .NET and manage and deploy servers in AWS.&lt;&#x2F;p&gt;
&lt;p&gt;The purpose of this section was to highlight that I had two opportunities to be somewhat, at least tangentially, on the other side of this thing. Because from where I’m standing, it does seem like machine learning engineers will have some semblance of job security for a while longer compared to other kinds of software engineers.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;enter-chatgpt&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#enter-chatgpt&quot; aria-label=&quot;Anchor link for: enter-chatgpt&quot;&gt;Enter ChatGPT&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;Pretty early in my game dev career, OpenAI took the world by surprise by releasing ChatGPT to the public, a newfangled thing called a Large Language Model. While there were also a lot of hype and pomp related to various generative models that could generate images from text (diffusion), at the time, that felt more like a curiosity. An interesting toy. It was clearly not any real threat to capable artists. Large Language Models did something different, they took in text, and spit out text. Of course ChatGPT was not the first LLM, people were already toying with its older brothers GPT-1 and GPT-2, but ChatGPT was different, it wasn’t just a text generator, it answered queries, sure many answers were hallucinated but it was a completely new way to find instructions and information, as sadly Google search quality was already on a downward spiral.&lt;&#x2F;p&gt;
&lt;p&gt;You could say I was both an early adopter and a skeptic. I bought a ChatGPT subscription as soon as it became available in my country. It was a fun little toy, and an interesting environment on which to riff ideas. But I was also skeptical, I did understand that should this thing become more capable, white collar work would be in grave danger, but I also falsely assumed that the rapid incremental changes were just because we were still in the nice part of the sigmoid curve, and I assumed that we would get into diminishing returns territory pretty quickly (which might still be sort of true, but it seems corporations and governments are prepared to throw all possible resources at this problem). I also adopted the “it’s just a stochastic parrot” mantra pretty early, a thing which does not seem to be so self-evident any longer - no I don’t have AI psychosis I promise.&lt;&#x2F;p&gt;
&lt;p&gt;I have enjoyed the fruits of advancements in LLM capabilities. I’ve even started toying around with local llms, emboldened by the sputnik moment that was DeepSeek. I was sort of paying attention to the industry, and saw how many startups were writing IDEs with AI integrations, at millions and billions valuations, and how slowly this newfangled thing called vibe coding was starting to enter the zeitgeist.&lt;&#x2F;p&gt;
&lt;p&gt;So a few months ago I tried cursor. I was not impressed. It seemed really bad at writing and understanding C++ code, it ate closing brackets, hallucinated functions, etc. It was not ready. So I limited my AI usages to writing very small, piecemeal functions, maybe devise or adjust some algorithms, and as a sort of documentation oracle, but not much beyond that, and I also mainly switched from ChatGPT to Gemini, it was free and seemed more capable at focused coding tasks, coupled with a somewhat more robust context window. I saw many people singing Claude’s praises, but the free version that I tried did not impress me at the time.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-present&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-present&quot; aria-label=&quot;Anchor link for: the-present&quot;&gt;The Present&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;As I returned from the winter holidays, I find my brother in the middle of trying out various VS code extensions for coding Agents. I was skeptical: “Yeah, I don’t know about that, you know I did some experiments a while ago and it was bad, you don’t want that touching any production code”. And he tells me, no, this time it’s different, there have been many advances, and we need to start practicing “vibe coding” asap if we want to keep up.&lt;&#x2F;p&gt;
&lt;p&gt;So I get a copilot subscription, as it offered great bang for your buck, pay Microsoft $10 a month and you get access to Google, OpenAI and Anthropic’s models. Very convenient. So I try it out, using Opus for planning and Sonnet for actual implementation, and holy shit, it’s really good!&lt;&#x2F;p&gt;
&lt;p&gt;Is it perfect? No of course not, it still gets confused about Unreal’s smart pointers sometimes, and chooses very lazy solutions for problems at times, but with proper supervision, careful planning, it’s a huge force multiplier, I am not exaggerating when I say it’s an easy 10x to 100x increase in productivity, depending on the context.&lt;&#x2F;p&gt;
&lt;p&gt;Is it ready to replace programmers? Not quite, not yet, not all. But I can see the writing on the wall. I used it to write a customer support&#x2F; administration platform for our game’s backend servers and I had all the desired functionality ready in about two days, plus another two days of debugging and ironing out the kinks. Something which we have been putting off for a while because it would have taken a competent programmer probably between two weeks and a month to have all that functionality done. It’s not looking good for people just now entering the industry, unfortunately the incentives of our capitalist society do not leave a lot of space for inefficiency. The software development job market was already looking pretty rough post COVID, and has already suffered many losses due to the AI hype, but it seems to be the case that it is no longer just hype. I foresee that job openings for entry level positions will continue to dwindle.&lt;&#x2F;p&gt;
&lt;p&gt;The game development industry will probably still be fine for a while, as code needs to be fast and good, not just working, but that will probably not be a problem for much longer. It’s not clear how aware the rest of the software development industry is regarding the state of these tools, but it does seem like the outsourcing industry is gonna suffer a pretty big contraction &#x2F; stagnation. What client is going to pay an outsourcing company to develop a product with a team of five people for a few months when AI can spit out a working prototype in a few days? Sure there are security concerns, and there will be bugs to fix, but a senior developer + AI can now do the work of a whole team. It is not looking good, so from that point of view, maybe it was a lucky decision to switch tracks. I’ll have to contact some of my old colleagues from the old job to get a sense of how things are looking from over there. But it does seem grim, AI does not tire, it does not sleep, it does not take breaks, it does not pause to doomscroll.&lt;&#x2F;p&gt;
&lt;p&gt;I’m no authority, nor an expert but I’ll go ahead and say it: AGI is already here. It’s artificial, and it’s generally intelligent. It excels at the kind of tasks you used to need highly skilled and educated humans, it’s probably not smarter than all of them, however, as controversial as this might seem, I do believe it has surpassed the capabilities of your average human. There are probably edge cases, but, it walks, talks and quacks like AGI to me.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;the-future&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-future&quot; aria-label=&quot;Anchor link for: the-future&quot;&gt;The Future&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;So where does this leave us? It seems coding agents are here to stay, and it’s very likely they will continue to improve to the point where very little human involvement will be needed. Anthropic CEO Dario Amodei was already touting that 70-90% of code being written at the company is done by Claude. Don’t get me wrong, I’m not writing this to spread doom and gloom and I’m certainly not an AI optimist, I was very pessimistic about AI capabilities, but if I can see the error of my ways, it’s clear many people will soon wake up to this revelation.
It seems obvious we need to adapt, and start working at improving our prompt-fu. The only probable alternative would be to act like the luddites before us, and start smashing down the &lt;del&gt;mills&lt;&#x2F;del&gt; data centers, and begin the Butlerian Jihad. I joke, of course, I do not condone violence. But it is clear that keeping our heads in the dirt will not do us much good.&lt;&#x2F;p&gt;
&lt;p&gt;The problem is that it seems to me that all the major players in this game are stuck in an ugly prisoner’s dilemma. Because if everyone would cooperate to not bring artificial super intelligence into existence, the status quo would be preserved and all would be good. But everyone also is aware that whoever defects and brings online the first superintelligent AGI will win everything. I’m not sure whether LLMs can give us superintelligent AGI, but if it would be possible, it would be a very winner-takes-all kind of scenario. I hope it’s not a hot take when I say that superintelligent AGIs are the new nukes, and there is an arms race going on right now, at least, that’s how the major players are acting like. They might be wrong, but they are making decisions that affect the whole world as if they are not. Of course, the only winning move is not to play, but they’ll probably not reach that conclusion until each country has their own very capable AGI agents.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;possible-scenarios&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#possible-scenarios&quot; aria-label=&quot;Anchor link for: possible-scenarios&quot;&gt;Possible Scenarios&lt;&#x2F;a&gt;&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;positive-ish-scenarios&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#positive-ish-scenarios&quot; aria-label=&quot;Anchor link for: positive-ish-scenarios&quot;&gt;Positive-ish scenarios&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;Either by some physical limitation, or by human will, superintelligent AI is never developed, and status quo is preserved&lt;&#x2F;p&gt;
&lt;h4 id=&quot;diminishing-returns-save-the-day&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#diminishing-returns-save-the-day&quot; aria-label=&quot;Anchor link for: diminishing-returns-save-the-day&quot;&gt;Diminishing returns save the day&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;The hopeful and optimist scenario is that we are indeed approaching the flat part of the sigmoid curve. Physical limitations and resource limitations in hardware and energy will prove an insurmountable wall and LLM performance will plateau, this will be as best as it will ever be. VC money dries up and companies need to start charging the real cost of running these models, making them probably comparable in cost as a human.&lt;&#x2F;p&gt;
&lt;p&gt;While certainly a nightmare scenario for VCs, tech CEOs and would be techno feudalists, as well as probably the harbinger of a terrible economic downturn that will occur once the bubble pops, at the end of the day, white collar jobs will be saved, all workers will just be much more productive, and hopefully they will see a bit of the fruits of their AI assisted labor.&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? I have no idea how likely this scenario is, but it is plausible, but it could also just be wishful thinking.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;regulation-nips-the-problem-in-the-bud&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#regulation-nips-the-problem-in-the-bud&quot; aria-label=&quot;Anchor link for: regulation-nips-the-problem-in-the-bud&quot;&gt;Regulation nips the problem in the bud&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Due to great societal unrest as more and more people become disenfranchised, governments step in and by some miracle, countries decide to all cooperate in order to prevent great societal harm, unrest, and the collapse of capitalism as we know it. They come up with regulations and limit capabilities at the hardware level so that no private entity can build a dangerous AI. The status quo is preserved, while each state will probably have a top secret military-grade super AGI in their basements for tech development and research purposes, but life for everyday people remains mostly the same. Until one of these breaches containment at least&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? Sadly, I don’t have much faith in our world leaders, coupled with the fact that the prisoner’s dilemma predicts that all involved parties will betray, it does not seem as a likely scenario.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;post-scarcity-communist-utopia&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#post-scarcity-communist-utopia&quot; aria-label=&quot;Anchor link for: post-scarcity-communist-utopia&quot;&gt;Post Scarcity Communist Utopia&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;Singularity is achieved. A benevolent and omnipotent AI takes over and solves all of humanity’s woes. We enter a post scarcity society where no human needs to work, and all our needs are taken care of by AIs and autonomous robots. Humans are free to pursue poetry (more likely consume ai slop) and explore the stars.&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? …And then I woke up&lt;&#x2F;p&gt;
&lt;h3 id=&quot;doom-and-gloom&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#doom-and-gloom&quot; aria-label=&quot;Anchor link for: doom-and-gloom&quot;&gt;Doom and gloom&lt;&#x2F;a&gt;&lt;&#x2F;h3&gt;
&lt;p&gt;One or more of the big players achieve superintelligent AGI, but it’s not a benevolent singularity. I think in this scenario, no matter which way things go, this will spell the end of capitalism as we know it. A massive amount of highly educated, well paid people will become obsolete. And this will drag the whole system down with them.&lt;&#x2F;p&gt;
&lt;p&gt;I’m no economist, so maybe I’m overstating the importance of a healthy middle class population. I have a friend with whom I share some of my concerns regarding my future obsolescence, and he always replies something akin to: “Just become an electrician bro, get into a trade, those will always be in demand”
But this does seem to me like it is not considering all the implications of the situation. If all white collar workers start going into trades, supply and demand equation for trades people will be absolutely scuffed. Who’s gonna pay for plumbers, HVAC technicians and electricians when only 1% of the people will afford to pay for these services, while 99% of the people will be competing for these contracts? Without a healthy middle class, who’s gonna be paying for luxury gadgets, food delivery, cleaning services, gourmet food, hospitality, tourism,new constructions, pool cleaning, modern cars, car repairs, etc etc etc.&lt;&#x2F;p&gt;
&lt;p&gt;Our current capitalist system depends on consumption of goods and services as its driving force, so I do not see any way in which it can survive the disenfranchisement of all humans that work in various services such as: software, law, finance, advertising, marketing perhaps even medicine.&lt;&#x2F;p&gt;
&lt;p&gt;It does seem to me like no matter what, modern capitalism will end, and we will enter a hellish techno feudalist dystopia, in which there will be a great divide between the owners of the means of AI and robotics, and everyone else. Perhaps there will be room for a small class of productive and essential people that will be needed to support the lifestyles and needs of this new elite class of techno lords.&lt;&#x2F;p&gt;
&lt;p&gt;Here’s some of the possible scenarios I can envision (of course they all depend on the precondition that the sought after super AGI is even attainable):&lt;&#x2F;p&gt;
&lt;h4 id=&quot;a-boring-dystopia&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-boring-dystopia&quot; aria-label=&quot;Anchor link for: a-boring-dystopia&quot;&gt;A boring dystopia&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;The owners of these AI systems will also see the writing on the wall, they will do the maths, and figure out that even with advanced AI, and a small army of mercenaries guarding each and everyone of them, 99% is still larger than 1%. So in order to avoid great unrest and massacres and anything else that might endanger their new toy, will do whatever possible to appease the rabble.&lt;&#x2F;p&gt;
&lt;p&gt;They will implement some kind of UBI (Universal Basic Income), ensure the people are provided with ample bread and circuses, and start making plans for long term sustainability. Hell this might even pave the way to the utopic post scarcity society, however, I believe that the recent revelations from the Epstein files paint a picture that the elite billionaire class might not have our best interests at heart.&lt;&#x2F;p&gt;
&lt;p&gt;They will likely enact mass surveillance powered by AI, to nip any sort of rebellion in the bud. They might also start imposing reproductive limitations on those they deem unproductive, and slowly, over generations, the population of humans that do not fit this new economic system will simply die off and shrink, until a stable, manageable equilibrium is reached.&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? Maybe i’m too much of a pessimist, but it does seem to be a likely scenario, even though I really hope it won’t come to this.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;no-mitigation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#no-mitigation&quot; aria-label=&quot;Anchor link for: no-mitigation&quot;&gt;No mitigation&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;They decide they do not care about the societal upheaval and starving masses. They retreat in their self sufficient bunkers while people starve and fight the governments that are overwhelmed and are trying to do what little they can to contain the unrest.&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? I think the powers that be can easily dismiss this option as non optimal. Even though they have bunkers and supplies, who’s gonna protect the power grid and data centers from the angry mobs? Not to mention their bunkers mean jack shit to a guy with cement truck.&lt;&#x2F;p&gt;
&lt;h4 id=&quot;active-extermination&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#active-extermination&quot; aria-label=&quot;Anchor link for: active-extermination&quot;&gt;Active extermination&lt;&#x2F;a&gt;&lt;&#x2F;h4&gt;
&lt;p&gt;They don’t want to or can’t be bothered to do the “right” thing. Why bother with UBI when the end result will be more or less the same, a decline in total human population. And they can’t just hunker down in their bunkers and let it sort itself out because of the risks mentioned in the earlier section.&lt;&#x2F;p&gt;
&lt;p&gt;Don’t get me wrong, I don’t think all the ruling class elites are monstrous psychopaths, but there are plenty that are and many of them who turn a blind eye to such disregards towards humanity, as proven by the published Epstein documents.&lt;&#x2F;p&gt;
&lt;p&gt;While billionaires conspiring to reduce the human population sounds like a crackpot conspiracy theory, it is something some of them talk about in the open. So it’s not unimaginable that they might decide to rush the desired effect a bit with some automated drones, some engineered virus or who knows what other means.&lt;&#x2F;p&gt;
&lt;p&gt;How likely is it? While not impossible, it would require a lot of work and cooperation from third parties in a way that make it simply unfeasible to do on a global scale, so even though some of them might want that, it’s not likely to happen. After all, they will need some people to fight in the thunderdomes.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;an-unanswered-question&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#an-unanswered-question&quot; aria-label=&quot;Anchor link for: an-unanswered-question&quot;&gt;An unanswered question&lt;&#x2F;a&gt;&lt;&#x2F;h1&gt;
&lt;p&gt;So assuming that this super AGI business is a very winner-takes-all situation, and all the players that are involved act as if this is true. They are all spending money and firing people as if the singularity is right around the corner. So, in this situation what are all the billionaires and millionaires that are not players in the AI field doing? There are so many corporations with plenty of very rich shareholders such as Coca-Cola, Walmart, Netflix, Disney, Amazon, Berkshire Hathaway, oil companies, car manufacturers, home appliance manufacturers, i.e companies that make a lot of money, depend on the continued existence of capitalism yet have no will or possibility of creating their own state of the art AI models.&lt;&#x2F;p&gt;
&lt;p&gt;Wouldn’t it be in their best interest to lobby governments to regulate AI, or employ other tactics to stall major AI developers, to ensure that capitalism as we know it does not end? What exactly is their game plan?
Are they unconcerned? Are they unaware? Do they think their vast amount of wealth will mean anything in a post capitalist society where the only thing that matters will be who owns the AI and who doesn’t?&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps them not being too worried is a good sign, and we can sleep comfortably. Or perhaps they just don’t see the writing on the wall&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
