aboutsummaryrefslogtreecommitdiff
path: root/blog
diff options
context:
space:
mode:
authorHannah Isopod <me@bathynomus.xyz>2025-06-11 03:25:00 -0600
committerHannah Isopod <me@bathynomus.xyz>2025-06-11 03:25:00 -0600
commitb3bb0b898d3178963fefb9c0b16a00a76cf2a034 (patch)
treeeec6da7a21790183b15f31283fe3b8bcaabfaa4d /blog
parent5023bdef46281034c0476bc4201342a0a4cc2ae7 (diff)
total guestbook overhaul + new blog post + etc
- Added /about/pronouns/ in leiu of something like a pronouns.cc profile - New blog post about my new and improved AI opinions - Moved Stop Using Chromium to an actual blog post page - Blog posts now have previous and next buttons - New /blog/ background - Moved status.cafe widget from /blog/ to landing page - Total overhaul of guestbook: - Merged guestbook and blog comment section code - Beefed up bot protection - Added a word filter - Added a property to entries to facilitate holding comments for review and approving or denying them manually (The interface for this is somewhere else) - IP address from which a post originates is now tracked in order to IP ban malicious actors - Various new buttons - Updated /greenhouse/ - The site is now a member of the No AI Webring - a couple minor CSS fixes
Diffstat (limited to 'blog')
-rw-r--r--blog/bg.jpgbin910875 -> 761654 bytes
-rw-r--r--blog/bg.jxlbin651503 -> 400969 bytes
-rw-r--r--blog/blog.atom15
-rw-r--r--blog/comment/comments.css92
-rw-r--r--blog/comment/feed.php29
-rw-r--r--blog/comment/index.php40
-rw-r--r--blog/comment/submit.php81
-rw-r--r--blog/index.php25
-rw-r--r--blog/posts/ai2/index.md100
-rw-r--r--blog/posts/ai2/index.php1
-rw-r--r--blog/posts/post.php129
-rw-r--r--blog/posts/stop_using_chromium/index.md68
-rw-r--r--blog/posts/stop_using_chromium/index.php1
13 files changed, 258 insertions, 323 deletions
diff --git a/blog/bg.jpg b/blog/bg.jpg
index a27cf66..36c9c72 100644
--- a/blog/bg.jpg
+++ b/blog/bg.jpg
Binary files differ
diff --git a/blog/bg.jxl b/blog/bg.jxl
index a56559f..7889748 100644
--- a/blog/bg.jxl
+++ b/blog/bg.jxl
Binary files differ
diff --git a/blog/blog.atom b/blog/blog.atom
index a6cc5b8..7951ab6 100644
--- a/blog/blog.atom
+++ b/blog/blog.atom
@@ -3,7 +3,7 @@
<title>isopod.cool blog</title>
<id>https://isopod.cool/blog/</id>
<link rel="alternate" href="https://isopod.cool/blog/"></link>
- <updated>2025-05-12T00:00:00+00:00</updated>
+ <updated>2025-06-11T00:00:00+00:00</updated>
<author>
<name>Hannah Isopod</name>
<uri>https://isopod.cool/</uri>
@@ -23,6 +23,17 @@
<category term="php"/>
</entry-->
<entry>
+ <title>Revisiting "AI"</title>
+ <id>ai2</id>
+ <link rel="alternate" href="https://isopod.cool/blog/posts/ai2/" type="html" title="Revisiting AI"></link>
+ <published>2025-06-11T00:00:00+00:00</published>
+ <updated>2025-06-11T00:00:00+00:00</updated>
+ <summary>I'm still not very fond of the subject of the current tech hype cycle, but my thoughts on the matter have developed some nuance since I last posted about it.</summary>
+ <category term="ai"/>
+ <category term="chatgpt"/>
+ <category term="capitalism"/>
+ </entry>
+ <entry>
<title>Fighting LLM Scrapers With Nepenthes And Fail2Ban</title>
<id>grow_spikes</id>
<link rel="alternate" href="https://isopod.cool/blog/posts/grow_spikes/" type="html" title="Fighting LLM Scrapers With Nepenthes And Fail2Ban"></link>
@@ -180,7 +191,7 @@
<entry>
<title>Stop Using Chromium</title>
<id>stop_using_chromium</id>
- <link rel="alternate" href="https://chrome.bathynomus.xyz/" type="html" title="Stop Using Chromium"></link>
+ <link rel="alternate" href="https://isopod.cool/blog/posts/stop_using_chromium/" type="html" title="Stop Using Chromium"></link>
<published>2023-08-16T00:00:00+00:00</published>
<updated>2023-08-16T00:00:00+00:00</updated>
<summary>An article about why you should quit using Chromium-based browsers, published as a standalone website for the purpose of automatically redirecting Chromium users to it.</summary>
diff --git a/blog/comment/comments.css b/blog/comment/comments.css
deleted file mode 100644
index 7f97c4c..0000000
--- a/blog/comment/comments.css
+++ /dev/null
@@ -1,92 +0,0 @@
-table {
- border-collapse: collapse;
- table-layout: fixed;
-}
-td {
- padding: 0.3rem;
-}
-
-form > table {
- width: 100%;
- margin: auto;
- margin-bottom: 1.5rem;
-}
-
-article {
- width: 100%;
- margin: 2rem auto;
- display: grid;
- gap: 1rem;
-}
-
-input, textarea {
- border: none;
- font-family: var(--stdfont);
-}
-input[type="text"], input[type="email"], textarea {
- width: 100%;
- background: none;
- border-bottom: 2px solid #444444;
- color: gainsboro;
- padding: 0.35rem;
- box-sizing: border-box;
- font-size: .9em;
-}
-input[type="submit"], input[type="reset"] {
- padding: 0.35rem 0.5rem;
- box-shadow: 2px 2px 6px black;
- margin: 0.3rem;
- display: inline-block;
-}
-input[type="submit"]:active, input[type="reset"]:active {
- transform: translate(1px, 1px); box-shadow: 0 0 2px black;
-}
-input[type="submit"]:hover, input[type="reset"]:hover {
- cursor: pointer;
-}
-.error {
- color: red;
- font-size: 0.85em;
-}
-.success {
- color: #00ff00;
- font-size: 0.85em;
-}
-.reply {
- border-left: 3px solid gainsboro;
- padding-left: 1rem;
-}
-.message {
- padding-top: 1.5rem;
-}
-@media only screen and (hover: none) {
- form td:first-child {
- text-align: left;
- }
- form td:nth-child(2) {
- padding-left: 0;
- padding-right: 0;
- }
- input[type="text"], input[type="email"], textarea {
- background: none;
- border: 2px solid #00000033;
- border-bottom: 2px solid #888888;
- }
- article {
- margin: 2rem auto;
- }
-}
-@media (prefers-contrast: more) {
- input[type="text"], input[type="email"], textarea {
- outline: 1px solid white;
- color: white;
- }
- input:focus, textarea:focus {
- outline: 3px solid white;
- }
- input[type="submit"] {
- background: none;
- color: white;
- outline: 1px solid white;
- }
-} \ No newline at end of file
diff --git a/blog/comment/feed.php b/blog/comment/feed.php
deleted file mode 100644
index 889514f..0000000
--- a/blog/comment/feed.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-include("../../Parsedown.php");
-$Parsedown = new Parsedown();
-$Parsedown->setSafeMode(true);
-
-header('Content-Type: text/xml');
-
-echo '<rss version="2.0"><channel>';
-echo '<title>isopod.cool blog comments</title>';
-echo '<description>Every comment posted on my blog in chronological order.</description>';
-echo '<language>en-us</language>';
-echo '<link>https://isopod.cool/blog/comment/</link>';
-echo '<generator>My crappy PHP code</generator>';
-
-$postlist = json_decode(file_get_contents("posts.json"));
-$totaloutput = "";
-foreach($postlist as $post) {
- $output = "";
- $date = date("D, d M Y H:m:s", $post->date) . " GMT";
- $name = $post->name;
- $message = $Parsedown->text(html_entity_decode($post->message));
- $entry = $post->entry;
-
- $output = $output."Comment from ".$name." on ".$entry.":<br><br>".$message."<br><br>";
- $totaloutput = "<item><title>Comment on " . $entry . " from " . $name . "</title><link>https://isopod.cool/blog/posts/" . $entry . "/</link><pubDate>" . $date . "</pubDate><description>".htmlentities($output)."</description><guid isPermaLink='false'>" . $entry . $post->date . $name . "</guid></item>".$totaloutput;
-}
-
-echo $totaloutput;
-echo "</channel></rss>"; \ No newline at end of file
diff --git a/blog/comment/index.php b/blog/comment/index.php
deleted file mode 100644
index 2d5f6a6..0000000
--- a/blog/comment/index.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>blog comments</title>
- <link href="/style.css" rel="stylesheet" type="text/css" media="all">
- <link href="comments.css" rel="stylesheet" type="text/css" media="all">
- <style>
-
- </style>
- <?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
- </head>
- <body>
- <?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
- <h1>blog</h1>
- <h2 id="caption">every comment</h2>
- <nav>
- <a href="feed.php">RSS</a>
- </nav>
- <?php
- include("../../Parsedown.php");
- $Parsedown = new Parsedown();
- $Parsedown->setSafeMode(true);
-
- $totaloutput = "";
- $postlist = json_decode(file_get_contents("posts.json"));
- foreach($postlist as $post) {
- $output = "";
- $date = date("Y-m-d h:iA", $post->date);
- $name = $post->name;
- $message = $Parsedown->text(html_entity_decode($post->message));
- $entry = $post->entry;
-
- $output = $output."<hr><article><table><tr><td style='text-align: left;'>".$name." <i>on</i> <a href='/blog/posts/".$entry."/'>".$entry."</a></td><td style='text-align: right;'>".$date."</td></tr><tr><td colspan='2'>".$message."</td></tr></table></article>";
- $totaloutput = $output.$totaloutput;
- }
- echo $totaloutput; ?>
- </body>
-</html>
diff --git a/blog/comment/submit.php b/blog/comment/submit.php
deleted file mode 100644
index 26e5647..0000000
--- a/blog/comment/submit.php
+++ /dev/null
@@ -1,81 +0,0 @@
-<?php
- if ($_SERVER["REQUEST_METHOD"] == "POST") {
-
- $returnLocation = $_POST["entry"];
- $returnCode = "success";
- if($_POST["botcheck"] != "isopod") {
- $returnCode = "botcheckfailed";
- } else if(!$_POST["name"]) {
- $returnCode = "noname";
- } else if(!$_POST["message"]) {
- $returnCode = "nomessage";
- } else {
-
- date_default_timezone_set("America/Edmonton");
- $currentPost = array(
- "date" => time(),
- "name" => htmlentities($_POST["name"]),
- "message" => htmlentities($_POST["message"]),
- "entry" => $_POST["entry"]
- );
-
- $filename = "posts.json";
-
- $handle = @fopen($filename, 'r+');
-
- // create the file if needed
- if ($handle === null)
- {
- $handle = fopen($filename, 'w+');
- }
-
- if ($handle)
- {
- // seek to the end
- fseek($handle, 0, SEEK_END);
-
- // are we at the end of is the file empty
- if (ftell($handle) > 0)
- {
- // move back a byte
- fseek($handle, -2, SEEK_END);
-
- // add the trailing comma
- fwrite($handle, ",\n", 2);
-
- // add the new json string
- fwrite($handle, json_encode($currentPost) . "]\n");
- }
- else
- {
- // write the first event inside an array
- fwrite($handle, json_encode(array($currentPost)));
- }
-
- // close the handle on the file
- fclose($handle);
- }
- }
- }
- header("Location: ../posts/$returnLocation/?return=$returnCode");
-?>
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Guestbook</title>
- <link href="../style.css" rel="stylesheet" type="text/css" media="all">
- <style type="text/css">
- body {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- }
- </style>
- <?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
- </head>
- <body>
- <p>Your post has been submitted! It's weird that you're seeing this page though. Maybe your browser can't process location headers? At any rate, click <?php echo "<a href='./?return=$returnCode'>here</a>"; ?> to get where you're supposed to be right now.</p>
- </body>
-</html> \ No newline at end of file
diff --git a/blog/index.php b/blog/index.php
index 2433e97..1fbe75a 100644
--- a/blog/index.php
+++ b/blog/index.php
@@ -91,28 +91,6 @@ error_reporting(E_ALL);
?>
</nav>
<?php
- $username = "niceopod"; // Your username here!
- $ch = curl_init("https://status.cafe/users/$username/status.json");
-
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, 0);
-
- $str = curl_exec($ch);
- if(curl_error($ch)) {
- //echo curl_error($ch);
- $str = "";
- }
- curl_close($ch);
- $status_data = json_decode($str, true);
- $status_content = $status_data["content"];
- $face = $status_data["face"];
- $timeago = $status_data["timeAgo"];
- if(strlen($status_content) < 1) {
- $status_content = "Something's gone wrong server side...";
- }
- echo "<div id='statuscafe'><div id='statuscafe-username'><a href='https://status.cafe/users/$username' target='_blank'>status</a> $face $timeago</div><div id='statuscafe-content'>$status_content</div></div>";
- ?>
- <?php
$stag = $_GET["tag"];
$nostag = empty($stag);
if(!$nostag) {
@@ -156,9 +134,6 @@ error_reporting(E_ALL);
}
echo "</ul>";
?>
- <div class="buttons" style="margin-bottom: 1rem;">
- <a href="https://status.cafe/"><img src="media/banner-statuscafe.png" alt="Status Cafe"></a>
- </div>
</body>
</html>
diff --git a/blog/posts/ai2/index.md b/blog/posts/ai2/index.md
new file mode 100644
index 0000000..37d7d0f
--- /dev/null
+++ b/blog/posts/ai2/index.md
@@ -0,0 +1,100 @@
+It's no secret that I'm generally not very fond of the Silicon Valley tech hype cycle we currently find ourselves in &mdash; in fact I've [posted](/blog/posts/ai_art/) about my feelings on "AI" technology before, and I think that post still mostly holds up, but having had circa 15 months since to ruminate about it and watch this shitshow pan out, my opinions on the matter have gotten substantially more nuanced, and I'd like to formally express them, ideally in a more level-headed way than my first go, so here's that.
+
+## The still-bad
+
+The primary product being inescapably pushed on us, generative AI (oft shortened to GenAI, and henceforth referred to here as genai<sup id="n1r"><a href="#n1">1</a></sup>), remains pretty self-evidently worthless, surprising nobody less than me.
+
+For one, the output quality of LLM chatbots and such things in particular [doesn't seem](https://garymarcus.substack.com/p/chatgpt-blows-mapmaking-101) [to have](https://arxiv.org/pdf/2502.15840) [meaninfully changed](https://www.reddit.com/r/ExperiencedDevs/comments/1krttqo/my_new_hobby_watching_ai_slowly_drive_microsoft/)[.](https://calcgpt.io/) In fact, in some cases it's [gotten worse](https://www.pcgamer.com/software/ai/chatgpts-hallucination-problem-is-getting-worse-according-to-openais-own-tests-and-nobody-understands-why/). Really, I don't see how it could ever improve &mdash; these are *language models*, after all, statistical models of human speech that "AI" vendors are trying desperately to coax into being effective proxies for actual thought. It was clear then and it's even clearer now that that's never going to work, and it would honestly be kind of sad if it wasn't so infuriating watching these giant companies still burning billions of dollars to inflict<sup id="n2r"><a href="#n2">2</a></sup> this shit on everyone in the hopes that it will.
+
+<figure class="quote">
+ <blockquote>
+ LLMs aren't intelligence they're just Markov bots that take requests
+ </blockquote>
+ <figcaption>
+ &mdash; <a href="https://isopod.zone/notes/9p7fa2ulne194ndl">me</a>
+ </figcaption>
+</figure>
+
+### Ethics? What? I think we fired those guys
+
+Ethical problems also continue to abound. I'm not personally aware that [labeling practices](https://www.theguardian.com/technology/article/2024/jul/06/mercy-anita-african-workers-ai-artificial-intelligence-exploitation-feeding-machine) have gotten any better, and on top of that, poorly written, badly behaved scrapers run by popular genai vendors are now [effectively](https://www.gamedeveloper.com/business/-this-was-essentially-a-two-week-long-ddos-attack-game-ui-database-slowdown-caused-by-openai-scraping) [DDOSing](https://techcrunch.com/2025/01/10/how-openais-bot-crushed-this-seven-person-companys-web-site-like-a-ddos-attack/) [random websites](https://social.kernel.org/notice/AqJkUigsjad3gQc664) in their attempts to suck down as much data as possible for training. Many website admins, especially those running git forges, which are targeted by coding assistants like GitHub Copilot, have had to resort to countermeasures like [Anubis](https://anubis.techaro.lol/) to protect their sites from this behaviour. I've had a run-in with this activity personally, when a big spender on Alibaba Cloud slammed my [Nepenthes](https://zadzmo.org/code/nepenthes/) instance so hard I had to [set up a custom Fail2ban jail](/blog/posts/grow_spikes/) that blocked over 300 IPs inside a day just to make its statistics endpoints reachable again.
+
+Furthermore, the environmental impact of this technology [remains really bad](https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/). Electricity use alone has gotten so bad that, for example, Microsoft has had to [spin a decommissioned nuclear power plant back up](https://www.npr.org/2024/09/20/nx-s1-5120581/three-mile-island-nuclear-power-plant-microsoft-ai) to run their datacentres. Although, some amount of proliferation and normalization of nuclear energy would be a nice little upside to this whole debacle.
+
+## The actually good
+
+The class of algorithm that "AI" as a marketing term refers to, that is to say, machine learning and neural networks, actually has some compelling use cases that we've seen crystallize over the past couple years, and I think they merit mention here.
+
+For one, machine learning-based upscaling in videogames (for example, Nvidia's DLSS, AMD's FSR, and Intel's XeSS) seems like a pretty uncomplicatedly good thing. It's stupid as hell that it's necessary, but from what I can tell this tech kind of just makes games run better with no significant downsides outside of maybe some minor visual artifacting, so I see no issue here.
+
+Genai is also kind of just the best way to make good-sounding text-to-speech and accurate speech-to-text, and it's legitimately exciting for accessibility that we've reached a point where these things can be run fully locally and offline on your device. This could be huge for things like screen readers and [auto-generated captions](https://www.pcmag.com/news/vlc-media-player-to-use-ai-to-generate-subtitles-for-videos). From what I've seen, this is the primary benefit to the incessant push for integrated "NPUs" in every new CPU.
+
+Of course, tech like this isn't the *point* of the hype cycle. Nvidia didn't become the first trillion dollar company by inventing a niche technology to make new GeForce video cards perform better in demanding games, and Microsoft isn't desperate to make "AI PCs" a thing because of the potential for better screen readers. The "AI" hype cycle is about genai supposedly having the potential to revolutionize *everything*. In five more years. And please don't ask how.
+
+## The it's-complicated
+
+LLMs are, by nature, endless fountains of grammatically-fluent drivel utterly devoid of real meaning. This makes it anywhere from unsettling to infuritating to see them used in contexts such as education, journalism, or software development<sup id="n3r"><a href="#n3">3</a></sup>, but it makes them uniquely suited to two use cases: spam, and the sort of high-verbosity, low-meaning communication that's expected of you in a professional setting &mdash; in other words, the LLM has democratized the least valuable forms of written communication in existence.
+
+Naturally the addition of more spam to the world is never a good thing, but I can't honestly begrudge anyone using an LLM to expand a sticky note's worth of information into an appropriately vacuous cover letter or work email or whatever. I might just be autistic, but I frankly believe that this kind of writing deserves to be delegated to the verbose bullshit machine if it doesn't come naturally to you, especially if employers are going to, well, employ these tools themselves to field your job application. Of course, a just world would provide no incentive to create either of these types of writing anyway.
+
+To be honest, I also struggle to find it in myself to blame students of the public school system who are using genai to cheat on essays. I could fill a full A4 sheet of paper, maybe two, in <span style="font-size: 12pt; font-family: Calibri, sans-serif;">single-spaced 12-point Calibri</span> with a rant about this, but suffice it to say that this isn't a new problem &mdash; the American style of public education has always prioritized number go up with genuine learning as a fortunate side effect, and it's not the kids' fault there's every incentive to game that system to make a fundamentally broken and hostile environment more bearable<sup id="n4r"><a href="#n4">4</a></sup>.
+
+This is a pattern I've noticed with a lot of the more infamous uses of genai products: As much as this new, horrible technology is creating new, horrible problems, it's getting just as much bad press for giving new form to existing ones: High school students were already cheating on their essays, the internet was already flooded with useless spam crowding out valuable information, and media companies of all stripes were always eager for new ways to throw their employees under the bus to reduce costs at the expense of quality.
+
+Even if completely ridding the world of genai technology was possible at this point, it wouldn't be the solution to these sorts of problems. The solution is to destroy the incentive structures that motivate this behaviour in the first place &mdash; create a school system where students don't feel the need to cheat on schoolwork, remove the profit incentive to generate spam and replace human workers with cheap, unreliable machines, etc. In other words, the real problem is capitalism.
+
+### The AI art thing
+
+Then there's the issue of "AI art". I stand by the it's-not-art-on-a-technicality argument I made before &mdash; I still don't think typing a prompt into Stable Diffusion and then taking the output and pretending you "made" something constitutes any kind of real artistic contribution, and frankly the only worthwhile artistic statements I've seen made using these tools have been statements *about* genai. I also tend to find the aesthetics of the output of genai thoroughly repulsive in general. The silver lining here is that blatant use of genai to make, say, game assets or promotional art is usually a pretty damn good indicator that whatever the slop is being poured on was never worth your time to begin with.
+
+That said, I'm unsure at this point how to feel about the whole "art theft" business. I don't begrudge artists using tools like [Glaze](https://glaze.cs.uchicago.edu/) to try to prevent genai models from using their art or replicating their styles without permission &mdash; I certainly wouldn't be thrilled if someone did that with my work &mdash; but also, like, I'm generally very anti-copyright, and I struggle to come up with an internally consistent ethical framework that excludes genai from that sentiment. Certainly tightening copyright law to restrict what genai vendors who already violate it can do is a bad idea. This is one dilemma that I'll admit I don't have a good answer for.
+
+Let's get one thing straight, however: If you use genai to generate memes or, like, bespoke profile pictures or whatever, I think you are a coward and a fool who will not survive the winter.
+
+<figure class="quote">
+ <blockquote>
+ mass art theft and environmental destruction are one thing but i draw the line at using ai image generators to trick me into thinking the world contains slightly more whimsy than it actually does
+ </blockquote>
+ <figcaption>
+ &mdash; <a href="https://isopod.zone/notes/a00ro9k8hv">me</a>
+ </figcaption>
+</figure>
+
+## They did a conclusion on this one
+
+Here's hoping this one comes off as less of an unhinged rant than the last time I posted about this. This is by no means a complete compendium of every thought I've had about genai, but it is everything I think I have something substantial to say about. For example, the whole concept of deepfakes is pretty horrifying, but I don't have anything to add to that conversation beyond gesturing vaguely at it and going like "wow, that's pretty fucked up, huh?".
+
+It's clear at this point that genai is here to stay in at least *some* capacity, but I'd be shocked if the push for unsolicited LLM chatbots and image generators in everything was able to sustain itself for much longer. I personally can't wait for a year or two from now when someone finds yet another novel way to make their Nvidia GPU draw 500 watts for hours on end and it gets marketed as Quantum Computing&trade; or some shit.
+
+---
+
+## Further reading
+
+Linked above:
+
+- [My previous writing on this topic](/blog/posts/ai_art/)
+- [ChatGPU Blows Mapmaking 101](https://garymarcus.substack.com/p/chatgpt-blows-mapmaking-101)
+- [Vending-Bench: A Benchmark for Long-Term Coherence of Autonomous Agents](https://arxiv.org/pdf/2502.15840)
+- [My new hobby: watching AI slowly drive Microsoft employees insane](https://www.reddit.com/r/ExperiencedDevs/comments/1krttqo/my_new_hobby_watching_ai_slowly_drive_microsoft/)
+- [ChatGPT's hallucination problem is getting worse according to OpenAI's own tests and nobody understands why](https://www.pcgamer.com/software/ai/chatgpts-hallucination-problem-is-getting-worse-according-to-openais-own-tests-and-nobody-understands-why/)
+- [We did the math on AI’s energy footprint. Here’s the story you haven’t heard.](https://www.technologyreview.com/2025/05/20/1116327/ai-energy-usage-climate-footprint-big-tech/)
+- [Three Mile Island nuclear plant will reopen to power Microsoft data centers](https://www.npr.org/2024/09/20/nx-s1-5120581/three-mile-island-nuclear-power-plant-microsoft-ai)
+- [Meet Mercy and Anita – the African workers driving the AI revolution, for just over a dollar an hour](https://www.theguardian.com/technology/article/2024/jul/06/mercy-anita-african-workers-ai-artificial-intelligence-exploitation-feeding-machine)
+- ['This was essentially a two-week long DDoS attack': Game UI Database slowdown caused by relentless OpenAI scraping](https://www.gamedeveloper.com/business/-this-was-essentially-a-two-week-long-ddos-attack-game-ui-database-slowdown-caused-by-openai-scraping)
+- [How OpenAI’s bot crushed this seven-person company’s website ‘like a DDoS attack’](https://techcrunch.com/2025/01/10/how-openais-bot-crushed-this-seven-person-companys-web-site-like-a-ddos-attack/)
+- [LWN maintainer attributing recent slowdowns to "beyond unsustainable" levels of AI traffic](https://social.kernel.org/notice/AqJkUigsjad3gQc664)
+- [Anubis](https://anubis.techaro.lol/)
+- [Nepenthes](https://zadzmo.org/code/nepenthes/)
+- [Fighting LLM Scrapers With Nepenthes And Fail2Ban](https://isopod.cool/blog/posts/grow_spikes/)
+- [VLC Media Player to Use AI to Generate Subtitles for Videos](https://www.pcmag.com/news/vlc-media-player-to-use-ai-to-generate-subtitles-for-videos)
+- [Glaze](https://glaze.cs.uchicago.edu/)
+
+---
+
+<p id="n1"><a href="#n1r">1</a>. Pronounced "gen-eye", with the "G" sound from "graphics". This is to annoy people who think genai is cool.</p>
+
+<p id="n2"><a href="#n2r">2</a>. In particular, Microsoft's insistence on this garbage is <span style="color: yellow;">Pissing</span> me off. I'm genuinely considering getting a Macbook for some upcoming Adobe-requiring classes just to avoid Copilot/Recall/whatever nonsense they come up with next.</p>
+
+<p id="n3"><a href="#n3r">3</a>. If you unironically self-identify as a "vibe coder" I'm coming to your house and confiscating every internet-capable device you own. Hand over the MacBook, dipshit, you've lost your computer priveleges until you're ready to develop a working understanding of how the technology you're working with professionally actually functions.</p>
+
+<p id="n4"><a href="#n4r">4</a>. That said, this doesn't excuse <em>post-secondary</em> students who do this. You're paying ungodly money to be here and you're outsourcing the learning you're paying to do to a machine? What's wrong with you? Are you stupid?</p> \ No newline at end of file
diff --git a/blog/posts/ai2/index.php b/blog/posts/ai2/index.php
new file mode 100644
index 0000000..f572f79
--- /dev/null
+++ b/blog/posts/ai2/index.php
@@ -0,0 +1 @@
+<?php include("../post.php"); \ No newline at end of file
diff --git a/blog/posts/post.php b/blog/posts/post.php
index e6b13b6..65d2661 100644
--- a/blog/posts/post.php
+++ b/blog/posts/post.php
@@ -1,17 +1,36 @@
<?php
+/*ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+error_reporting(E_ALL);*/
+
+if($_SERVER['REQUEST_URI'] === "/blog/posts/post.php") {
+ header("Location: /blog/");
+ die();
+}
+
$cwd = preg_replace('/^.*\//', '', getcwd());
$feed = simplexml_load_file($_SERVER['DOCUMENT_ROOT']."/blog/blog.atom");
$pdate = "";
$udate = "";
$title = "";
$descr = "";
+$prevtitle = "";
+$prevlink = "";
+$nexttitle = "";
+$nextlink = "";
foreach($feed->entry as $entry) {
if($entry->id == $cwd) {
$pdate = preg_replace('/T.*$/', ' ', $entry->published);
$udate = preg_replace('/T.*$/', ' ', $entry->updated);
$title = $entry->title;
$descr = $entry->summary;
+ } else if($title) {
+ $nextlink = $entry->link["href"];
+ $nexttitle = $entry->title;
break;
+ } else {
+ $prevlink = $entry->link["href"];
+ $prevtitle = $entry->title;
}
}
?>
@@ -21,27 +40,50 @@ foreach($feed->entry as $entry) {
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
- <link href="/blog/comment/comments.css" rel="stylesheet" type="text/css" media="all">
+ <link href="/guestbook/comments.css" rel="stylesheet" type="text/css" media="all">
<?php
echo("<title>$title</title><meta name='description' content='$descr'>");
$bgfile = glob('bg.*')[0];
if(!is_null($bgfile)) {
- echo("<style> h1 { background-image: url('$bgfile') } </style>");
+ echo("<style> body > h1:first-of-type { background-image: url('$bgfile') } </style>");
}
?>
<style>
- td {
- display: table-cell;
+ form {
+ display: flex;
+ flex-direction: column;
+ gap: calc(var(--stdpadding) / 2);
+ }
+ #commentform-top, #commentform-bottom {
+ display: flex;
+ gap: calc(var(--stdpadding) / 2);
+ align-items: center;
+ }
+ #commentform-bottom {
+ justify-content: right;
+ }
+ input[type="submit"] {
+ width: fit-content;
+ }
+ .error, .success {
+ flex-grow: 1;
+ }
+ @media only screen and (hover: none) {
+ #commentform-top {
+ flex-direction: column;
+ }
}
</style>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
</head>
<body>
- <?php
+ <?php
include($_SERVER['DOCUMENT_ROOT'] . '/nav.php');
+ include($_SERVER['DOCUMENT_ROOT'] . '/common.php');
$udates = "";
if($pdate != $udate) { $udates = " | Updated&nbsp;on&nbsp;$udate"; }
echo("<h1>isoblog</h1><h2 id='caption'>$title</h2><p style='text-align: center;'><em>Posted&nbsp;on&nbsp;$pdate$udates</em></p>");
+ //echo("<p style='text-align: right;'>I'm testing in prod right now. don't worry about it");
include("../../../Parsedown.php");
$Parsedown = new Parsedown();
echo $Parsedown->text(file_get_contents("index.md"));
@@ -49,57 +91,36 @@ foreach($feed->entry as $entry) {
$return = $_GET["return"];
?>
<hr>
+ <nav style="flex-direction: column;">
+ <?php
+ if($prevlink) {
+ echo("<a style='width: 100%; box-sizing: border-box;' href='$prevlink'><svg style='max-height: 1em;' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 4 28 16' stroke-width='1.5' stroke='currentColor' class='size-6'><path stroke-linecap='round' stroke-linejoin='round' d='m4.5 18.75 7.5-7.5 7.5 7.5' /><path stroke-linecap='round' stroke-linejoin='round' d='m4.5 12.75 7.5-7.5 7.5 7.5' /></svg>$prevtitle</a>");
+ }
+ if($nextlink) {
+ echo("<a style='width: 100%; box-sizing: border-box;' href='$nextlink'><svg style='max-height: 1em;' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 4 28 16' stroke-width='1.5' stroke='currentColor' class='size-6'><path stroke-linecap='round' stroke-linejoin='round' d='m4.5 5.25 7.5 7.5 7.5-7.5m-15 6 7.5 7.5 7.5-7.5' /></svg>$nexttitle</a>");
+ }
+ ?>
+ </nav>
+ <hr>
<h2>Comments</h2>
- <form action="/blog/comment/submit.php" method="post" autocomplete="off">
+ <form action="/guestbook/submit.php" method="post" autocomplete="off">
<?php echo "<input type='text' name='entry' value='".preg_replace("/^.*\//","",getcwd())."' style='display: none;' readonly>"; ?>
- <table>
- <tr>
- <td><input type="text" name="name" placeholder="Name"></td>
- <td><input type="text" name="botcheck" placeholder="Bot test (type &quot;isopod&quot;)"></td>
- </tr>
- <tr>
- <td colspan="2"><textarea name="message" placeholder="Comment (Now supports Markdown!)"></textarea></td>
- </tr>
-
- <tr>
- <?php
- switch ($return) {
- case 'noname':
- echo "<td><span class='error'>Name required!</span></td>";
- break;
- case 'nomessage':
- echo "<td><span class='error'>Message required!</span></td>";
- break;
- case 'botcheckfailed':
- echo "<td><span class='error'>You failed the bot check!</span></td>";
- break;
- case 'success':
- echo "<td><span class='success'>Successfully posted!</span></td>";
- break;
- default:
- echo "<td></td>";
- break;
- }
- ?>
- <td style="text-align: right;"><input type="submit" value="Post"></td>
- </tr>
- </table>
+ <textarea name="msg" placeholder="I know what you are." style="opacity: 0; position: absolute; left: -10000rem; height: 0; width: 0; overflow: clip;"></textarea>
+ <div id="commentform-top">
+ <input type="text" name="name" placeholder="Name">
+ <input type="text" name="website" placeholder="Website (optional)">
+ <input type="text" name="botcheck" placeholder="Bot test (type &quot;isopod&quot;)">
+ </div>
+ <textarea name="message" placeholder="Comment (Now supports Markdown!)"></textarea>
+ <div id="commentform-bottom">
+ <?php
+ if($return) {
+ echo($gbform_messages[$return]);
+ }
+ ?>
+ <input type="submit" value="Submit">
+ </div>
</form>
- <?php
-
- $totaloutput = "";
- $postlist = json_decode(file_get_contents("../../comment/posts.json"));
- foreach($postlist as $post) {
- if ($post->entry == preg_replace("/^.*\//","",getcwd())) {
- $output = "";
- $date = date("Y-m-d h:iA", $post->date);
- $name = $post->name;
- $message = $Parsedown->text(html_entity_decode($post->message));
-
- $output = $output."<hr><article><table><tr><td style='text-align: left;'>".$name."</td><td style='text-align: right;'>".$date."</td></tr><tr><td colspan='2'>".$message."</td></tr></table></article>";
- $totaloutput = $output.$totaloutput;
- }
- }
- echo $totaloutput; ?>
+ <?php include('../../../guestbook/comments.php'); echo_comments(preg_replace("/^.*\//","",getcwd()), $Parsedown); ?>
</body>
</html>
diff --git a/blog/posts/stop_using_chromium/index.md b/blog/posts/stop_using_chromium/index.md
new file mode 100644
index 0000000..bbfacc2
--- /dev/null
+++ b/blog/posts/stop_using_chromium/index.md
@@ -0,0 +1,68 @@
+*This post was also published as a standalone site [here](https://chrome.bathynomus.xyz/).*
+
+Chromium is the open-source foundation upon which Google's otherwise proprietary Chrome browser is based. Most modern web browsers are also based on this codebase, for example:
+
+- Google Chrome
+- Microsoft Edge
+- Opera
+- Brave Browser
+- Vivaldi
+- Qutebrowser
+- [Many others](https://en.wikipedia.org/wiki/Chromium_(web_browser)#Browsers_based_on_Chromium)
+
+## Why is that a bad thing?
+
+Chrome and other Chromium-based browsers account for around 90% of the total web browser market share at the moment. This gives Google, a trillion-dollar for-profit advertising firm, immense control over the web and the standards on which it runs, control that it frequently abuses and inarguably should not have.
+
+## What kind of abuses?
+
+You name it. To name a few recent examples:
+
+### FLoC/Topics API
+
+Google's response to the phasing out of third-party cookies, a system that had legitimate uses which were outweighed by the privacy violations they could be and more frequently were used to commit, was to introduce an API that was only capable of the sketchy parts.
+
+The now-scrapped FLoC, or "Federated Learning of Cohorts" was a system by which users with similar browsing habits, for an unspecified definition thereof, would be grouped algorithmically into "cohorts" which would then be used to target ads to you, essentially making your browser do some of the work that online ad agencies used to do themselves, and more importantly, used to rely on a feature you could easily disable to do.
+
+FLoC received enough well-earned backlash that Google reconsidered its approach, and replaced it with the Topics API, a system that's basically the same as cohorts except that instead of "Federated Learning", the groups are defined manually by humans - the browser compiles a list of "topics" you're interested in based on your browsing history, and sends that to advertisers instead of an algorithmically generated ID.
+
+While theoretically better than third-party cookies, which make identifying you as an individual trivial, neither API addresses the root issue here: maybe you don't want targeted advertising. Maybe you actually value your privacy, and don't want to send arbitrary websites even vague details about what you've been up to online. While other, more privacy-respecting browsers will likely refuse to implement Topics if possible, if you're one of the 90% of people using a Chromium-based browser, you don't get a choice.
+
+- [Electronic Frontier Foundation - Google's FLoC Is a Terrible Idea](https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea)
+- [Ars Technica - Google drops FLoC after widespread opposition, pivots to "Topics API" plan](https://arstechnica.com/gadgets/2022/01/google-drops-floc-after-widespread-opposition-pivots-to-topics-api-plan/)
+- [Update 2023-09-08] [Ars Technica - Google gets its way, bakes a user-tracking ad platform directly into Chrome](https://arstechnica.com/gadgets/2023/09/googles-widely-opposed-ad-platform-the-privacy-sandbox-launches-in-chrome/)
+
+### JPEG XL
+
+JPEG XL is a new image format created by the Joint Photographic Experts Group, who you may know as the people who brought you JPEG back in '92. JPEG XL is fully backwards compatible with legacy JPEG, supports features like transparency, lossless compression, and animation, and has far superior compression and support for far larger images with higher color depth than existing formats. It's objectively better in every way than everything it competes with. However...
+
+Google killed JPEG XL, plain and simple. It implemented opt-in support for it in Chrome as an optional flag for a while, and then took it out citing insufficient "interest from the entire ecosystem". The real reason is Google wanted to push its own inferior format, AVIF, its replacement for WebP, which it also created. JPEG XL had near-universal industry support outside of web browsers, but because Google dominates that market, it had the power to kill the format completely for online use.
+
+- [jpegxl.info](https://jpegxl.info/)
+- [Free Software Foundation - Google's decision to deprecate JPEG-XL emphasizes the need for browser choice and free formats](https://www.fsf.org/blogs/community/googles-decision-to-deprecate-jpeg-xl-emphasizes-the-need-for-browser-choice-and-free-formats)
+
+### Web Environment Integrity
+
+Web Environment Integrity is a proposal by Google (or, if you care about semantics, four Google engineers on one of their personal GitHub accounts) for a standard that would allow websites to check with a third-party attester to prove that a "web environment" - in other words, the user's web browser and operating system - is "trustworthy" and has not been "tampered with".
+
+This could be used to block users with untrusted extensions, such as adblockers, installed, and it would automatically lock out any browser or OS that doesn't have support for the standard or isn't trusted by major attesters. It is likely that this would be used to make websites impossible to use with adblockers and similar safety and accessibility tools enabled or on systems not running major proprietary OSes and browsers like Windows and Chrome, whether intentionally or not.
+
+In this way, Web Environment Integrity would act as the ultimate form of DRM for the web, giving governments, rights holders, and corporations like Google and Netflix absolute control over what browsers and operating systems have access to their services. Describing all the problems this would cause could fill a dozen EFF blog posts, so I'll leave it to your imagination here.
+
+Despite this spec being merely a proposal on a Google engineer's personal GitHub, Google is already fast-tracking its implementaion in Chromium, presumably in an attempt to go over the heads of the W3C, the standards body it's a part of, to force its standardization on the basis of "standardizing existing functionality".
+
+- [Defective By Design - "Web Environment Integrity" is an all-out attack on the free Internet](https://www.defectivebydesign.org/blog/web_environment_integrity_is_an_all_out_attack_on_free_internet)
+- [Vivaldi - Unpacking Google's new “dangerous” Web-Environment-Integrity specification](https://vivaldi.com/blog/googles-new-dangerous-web-environment-integrity-spec/)
+- [Ben Wiser (Google), Borbala Benko (Google), Philipp Pfeiffenberger (Google), Sergey Kataev (Google) - Web Environment Integrity Explainer](https://github.com/RupertBenWiser/Web-Environment-Integrity/blob/main/explainer.md)
+
+### So what do I do then?
+
+I implore you to use a browser that's not based on Chromium. If you're on a Mac, you can just use Safari, but otherwise, your only major option is [Firefox](https://www.mozilla.org/en-US/firefox/), or a fork thereof such as [LibreWolf](https://librewolf.net/).
+
+I get the impression that a lot of less tech-savvy users find the prospect of switching browsers, especially after years of using the same one, to be quite intimidating, but it's really not. Firefox is able to import all your bookmarks, saved passwords, and other browsing data directly from Chrome, and is highly customizable and has a rich ecosystem of extensions and themes so you can make it resemble what you're used to. Mozilla has an easy official [guide](https://support.mozilla.org/en-US/kb/switching-chrome-firefox) to import your data from Chrome, and it works with most other browsers as well.
+
+### Cool, but I don't care. Let me look at your website.
+
+If you got redirected here, you may be able to circumvent it by configuring your browser to send a different user-agent string. I'd recommend clearing your cache after, in case your browser cached the redirect signal.
+
+I won't explain how to do this myself, both because I don't know what browser you're using and because the idea here is to try to force you to be knowledgable enough about this subject to know better before deciding to use Chromium anyway.
diff --git a/blog/posts/stop_using_chromium/index.php b/blog/posts/stop_using_chromium/index.php
new file mode 100644
index 0000000..f572f79
--- /dev/null
+++ b/blog/posts/stop_using_chromium/index.php
@@ -0,0 +1 @@
+<?php include("../post.php"); \ No newline at end of file