1
0
Fork 0

v3.1 - Minor overhaul to the entire site

- Removed some unused files
- Updated the blog post layout to have all the navigation
- Replaced hovertext in blog posts with footnotes
- Seaonal pride captions on homepage
- Updated /etc/quotes/
  - Background color is now actually reminiscent of Discord
- Total overhaul to /uses/
  - Added sub-page for my computer
- New markup for blockquotes that css-tricks.com says is more semantically correct
- More difficult captcha on the guestbook (answer remains unchanged)
- New blog post about DMs on the fediverse
- Blog now has links to each year
- Removed journal. I barely used it and it was redundant anyway
- Removed the TODO list that I wasn't using from /etc/
- CSS overhaul:
  - Cool new hover animation on navigation links
  - Centralized most color definitions to root variables, and a couple other things too
  - Standard font is now B612 mono
  - complies with prefers-reduced-motion
  - Light theme and low contrast mode in the works
  - Made tables more consistent, and the one on /about/ no longer looks like doodoo
  - Accent borders on headings and such-like
  - Main header & caption are now left-aligned instead of center-aligned
  - Isopod letterhead moved from left side of header to right
  - h1 made smaller, h2-6 changed back to default sizes
  - Adjusted a couple background positions to improve readability
  - Got rid of the checkbox-hack dropdown navigation on mobile, because it kind of sucked
  - Regular body text no longer has text-shadow
- probably some other stuff I forgot about
This commit is contained in:
will 2024-07-08 03:20:49 -06:00
parent 6a97a82927
commit 9be2f36883
35 changed files with 724 additions and 1564 deletions

View file

@ -74,10 +74,38 @@
<p>This website is written in pure HTML, CSS, and a tiny bit of Javascript with the server-side stuff done in PHP. It (and everything else I host) is hosted using Nginx on a VPS with 4GB of RAM and 2 CPU cores running Ubuntu Server, with domains registered with <a href="https://porkbun.com/">Porkbun</a>. You can read about its history <a href="../blog/posts/deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/">here</a>.</p>
<p>I was helped immensely in building this thing by <a href="https://www.w3schools.com/">W3Schools</a>, the <a href="https://developer.mozilla.org/en-US/docs/Web">MDN Web Docs</a>, the official <a href="https://www.php.net/manual/en/">PHP manual</a>, <a href="https://landchad.net/">LandChad.net</a>, Stack Overflow, and whatever disgusting bottom-feeding SEO leech sites came up first in the search results.</p>
<h2>Testimonials</h2>
<blockquote>"Most of it goes over my head, but it's still fun to read and look at, and I am not immune to isopods."<span class="attr">-<a href="https://kalechips.net/">Kalechips</a></span></blockquote>
<blockquote>"Furry behavior"<span class="attr">-<a href="https://seaslug.neocities.org/">Seaslug</a></span></blockquote>
<blockquote>"fuxk"<span class="attr">-f</span></blockquote>
<blockquote>isopod isopod isopod isopod isopod isopod isopod isopod isopod<span class="attr">-Twiggy</span></blockquote>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;" title="Pictured: Me on my daily walk"></div>
<figure class="quote">
<blockquote>
Most of it goes over my head, but it's still fun to read and look at, and I am not immune to isopods.
</blockquote>
<figcaption>
&mdash; <a href="https://kalechips.net/">Kalechips</a>
</figcaption>
</figure>
<figure class="quote">
<blockquote>
Furry behavior
</blockquote>
<figcaption>
&mdash; <a href="https://seaslug.neocities.org/">Seaslug</a>
</figcaption>
</figure>
<figure class="quote">
<blockquote>
fuxk
</blockquote>
<figcaption>
&mdash; f
</figcaption>
</figure>
<figure class="quote">
<blockquote>
isopod isopod isopod isopod isopod isopod isopod isopod isopod
</blockquote>
<figcaption>
&mdash; Twiggy
</figcaption>
</figure>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg);" title="Pictured: Me on my daily walk"></div>
</body>
</html>

View file

@ -12,6 +12,17 @@
<category term="personal"/>
<category term="blog"/>
<category term="tech"/>
<entry>
<title>Admins Can Read Your DMs</title>
<id>fediverse_dms</id>
<link rel="alternate" href="https://isopod.cool/blog/posts/fediverse_dms/" type="html" title="Admins Can Read Your DMs"></link>
<published>2024-05-09T00:00:00+00:00</published>
<updated>2024-05-09T00:00:00+00:00</updated>
<summary>Yes, the admins of your fediverse server can read your DMs. No, that's not actually a problem.</summary>
<category term="fediverse"/>
<category term="privacy"/>
<category term="pedantry"/>
</entry>
<entry>
<title>Building a Completely Normal Server</title>
<id>building_a_normal_server</id>
@ -28,7 +39,7 @@
<id>my_terrible_distro_hop</id>
<link rel="alternate" href="https://isopod.cool/blog/posts/my_terrible_distro_hop/" type="html" title="My Terrible, Horrible, No-Good, Very Bad Distro Hop"></link>
<published>2024-02-25T00:00:00+00:00</published>
<updated>2024-02-25T00:00:00+00:00</updated>
<updated>2024-07-06T00:00:00+00:00</updated>
<summary>A chronicle of my brief journey from EndeavourOS to Fedora to back to EndeavourOS, and wrestling with a VPN client that sees itself as above such trifling matters as "functioning".</summary>
<category term="personal"/>
<category term="linux"/>
@ -103,10 +114,11 @@
<id>discord</id>
<link rel="alternate" href="https://isopod.cool/blog/posts/discord/" type="html" title="Discord - So Your Favourite Chat App Sucks Now"></link>
<published>2023-06-28T00:00:00+00:00</published>
<updated>2023-06-28T00:00:00+00:00</updated>
<updated>2024-04-27T00:00:00+00:00</updated>
<summary>Why Discord sucks, and how to find something that doesn't.</summary>
<category term="discord"/>
<category term="capitalism"/>
<category term="privacy"/>
</entry>
<entry>
<title>How to Automount Drives On Boot in Linux</title>
@ -148,7 +160,7 @@
<id>deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit</id>
<link rel="alternate" href="https://isopod.cool/blog/posts/deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/" type="html" title="deeptwisty.com 2nd anniversary - A History of This Bullshit"></link>
<published>2022-09-19T00:00:00+00:00</published>
<updated>2022-09-19T00:00:00+00:00</updated>
<updated>2024-07-06T00:00:00+00:00</updated>
<summary>An abridged history of my presence on the World Wide Web, from my first customized Tumblr pages to now.</summary>
<category term="personal"/>
</entry>

View file

@ -1,6 +1,7 @@
<?php
$return = $_GET["return"];
?>
<hr>
<h2>Comments</h2>
<form action="/blog/comment/submit.php" method="post" autocomplete="off">
<?php echo "<input type='text' name='entry' value='".preg_replace("/^.*\//","",getcwd())."' style='display: none;' readonly>"; ?>

View file

@ -15,13 +15,21 @@
list-style: none;
}
.blogentry {
width: 100%;
max-width: 100%;
list-style: none;
display: inline-block;
margin: .4rem 0;
margin: calc(var(--stdpadding)/2) 0;
padding: var(--stdpadding);
border-left: var(--stdaccentborder);
background: linear-gradient(var(--blockbghover) 0 0) 0 / var(--bgpos, 0) no-repeat;
transition: background .3s, border .3s;
}
.blogentry:hover {
--bgpos: 100%;
}
ul#articles h2 {
margin: 0;
margin: calc(var(--stdpadding)/2) 0;
}
/*ul h2:first-of-type::before {
content: "Articles - "
@ -32,6 +40,7 @@
.blogentry > * {
display: block;
margin: 0.1rem 0;
box-sizing: border-box;
}
.entrysummary {
font-size: .9em;
@ -47,6 +56,10 @@
.entrydate {
font-weight: bold;
}
.entrytitle {
padding-left: initial;
border-left: initial;
}
article:first-of-type h2::before {
content: 'Journal - ';
}
@ -55,11 +68,22 @@
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>blog</h1>
<h1>isoblog</h1>
<h2 id="caption">inane ramblings</h2>
<nav>
<a href="blog.atom">Article feed</a>
<a href="https://journal.miso.town/atom?url=https://isopod.cool/blog/">Journal feed</a>
<a href="blog.atom">atom feed</a>
<?php
$content = simplexml_load_file("blog.atom");
$year = "-69420";
$yc = 0;
foreach($content->entry as $entry) {
$nyr = substr($entry->published, 0, 4);
if($nyr != $year) {
$year = $nyr;
echo "<a href='#$year'>$year</a>";
}
}
?>
</nav>
<?php
$username = "niceopod"; // Your username here!
@ -75,13 +99,13 @@
}
curl_close($ch);
$status_data = json_decode($str, true);
$content = $status_data["content"];
$status_content = $status_data["content"];
$face = $status_data["face"];
$timeago = $status_data["timeAgo"];
if(strlen($content) < 1) {
$content = "Something's gone wrong server side...";
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'>$content</div></div>";
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"];
@ -89,7 +113,6 @@
if(!$nostag) {
echo "<a style='display: block; margin-top: 1rem; margin-bottom: 1rem;' href='.'>All articles</a>";
}
$content = simplexml_load_file("blog.atom");
echo "<ul id='articles'>";
$year = "-69420";
$yc = 0;
@ -128,40 +151,10 @@
}
echo "</ul>";
?>
<article id="2024-04-02">
<h2>2024-04-02</h2>
<p>Migrated my Firefish server to Sharkey today. I had to spend a while stumbling blindly through the totally foreign territory of docker and postgres, but it worked out surprisingly well in the end, except that I managed to delete all the media with a careless <code>rm -rf</code>. Whoops.</p>
<p>I also recently bought my first Lego set in the better part of a decade, at the recommendation of <a href="https://kalechips.net/posts/2024-03-25-Bug-Legos">this</a> blog post by Kalechips. I don't have much to say about them beyond what's covered there, but I absolutely love them. Definitely one of the better ways I could have spent a hundred Canadian FunBucks&trade;.</p>
<img src="media/2024-04-02_legobugs.jpg" alt="Roughly to-scale sized Lego models of a blue morpho butterfly, a hercules beetle, and a chinese mantis." />
</article>
<article id="2024-02-29">
<h2>2024-02-29</h2>
<p>I have this old pair of Skullcandy Crusher headphones that stopped working a few years ago due to some issue with the 3.5mm jack, and it recently occured to me that I finally have the tools to fix it! When I opened it up I noticed the port had lifted almost entirely off the motherboard and after soldering the pins back in place (and a generous application of hot glue, just in case) it works like new again! Credit to Skullcandy, all eight of the screws I had to remove were completely identical.</p>
</article>
<article id="2024-02-22">
<h2>2024-02-22</h2>
<p>Did a shell swap on my Switch and joycons yesterday. Check it out!</p>
<img src="media/2024-02-22/switchfront.jpg" alt="Front view of a Nintendo Switch with clear plastic shells on the joycons" />
<img src="media/2024-02-22/switchback.jpg" alt="Back view of a Nintendo Switch with clear plastic shells on the joycons and console" />
<p>I think it looks pretty cool. I got the shells from a company called <a href="https://extremerate.com/">eXtremeRate</a> which apparently makes full kits for this kind of mod. I thought I was just getting the plastic parts but they came with tons of extra screws and a screwdriver with the relevant bits, and they publish guides! Given I found this through a random Amazon listing, I am pleasantly surprised. Highly recommend their stuff.</p>
</article>
<article id="2024-02-14">
<h2>2024-02-14</h2>
<p>When I post a guide on my blog and the tutorial part starts with a header reading "How to do it" that's a reference to this btw</p>
<img src="media/2024-02-14_roundmeal.jpg" alt="Roundmeal." />
</article>
<article id="2024-01-29">
<h2>2024-01-29</h2>
<p>I just had a really nasty idea for a 3D printer design. I could describe it in detail, but instead I drew up this helpful diagram:</p>
<img src="media/2024-01-29/diagram.png" alt="A crude diagram outlining a concept for an FDM 3D printer that rotates around a central axis for a toroidal print volume." />
<p>The benefits of this approach are clear. If I receive $1000 in <a href="https://ko-fi.com/deeptwisty">donations</a> I will attempt to build it.</p>
</article>
<div class="buttons" style="margin-bottom: 1rem;">
<a href="https://status.cafe/"><img src="media/banner-statuscafe.png" alt="Status Cafe"></a>
<a href="https://kiosk.nightfall.city/"><img src="media/neonkiosk.png" alt="Neon Kiosk"></a>
<a href="https://journal.miso.town/"><img src="media/banner-htmlj.png" alt="Valid HTML Journal"></a>
</div>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;"></div>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg);"></div>
</body>
</html>

View file

@ -13,25 +13,26 @@
</style-->
</head>
<body>
<h1>blog</h1>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>isoblog</h1>
<h2 id="caption">I Don't Like AI Art</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>I recently posted an article about the benefits of AI technology that I had ChatGPT write for me and copy-pasted verbatim, down to the broken numbered list. I didn't even read it. It's the most concise, elegant way I could come up with to express how seeing AI art makes me feel. (The irony of my having used only generative AI tools to make a statement like that is not lost on me.)</p>
<p>If you read it and managed to make it to the end without clocking that I didn't write it, first off my apologies for wasting your time. Second, fuck, I seriously need to fix my writing style. Third, you probably get what I mean. It feels like I'm being scammed, like someone's trying to farm me for attention without actually having bothered to make something worth my time.</p>
<blockquote>
My perspective on the use of AI in writing is that if someone couldn't be bothered to write it, why should anyone else be bothered to read it?
<span class="attr">-<a href="https://final.town/notice/AcGPT0FZUH2quPlDe4">@lucretia@final.town</a></span>
</blockquote>
<figure class="quote">
<blockquote>
My perspective on the use of AI in writing is that if someone couldn't be bothered to write it, why should anyone else be bothered to read it?
</blockquote>
<figcaption>
&mdash; <a href="https://final.town/notice/AcGPT0FZUH2quPlDe4">@lucretia@final.town</a>
</figcaption>
</figure>
<h2>Terminology</h2>
<p>To begin with, I really don't like the term "AI", nor do I like the term "AI art". I frankly think neither word applies. I'll keep using the former, because it's a concise way to communicate what I'm talking about, but I refuse to call the output of these systems "art". It's AI-generated images now.</p>
<p>AI, in the way marketers are currently using the term, generally refers to statistical models generated using a process called machine learning. Basically, huge amounts of appropriately labeled data are fed into a machine learning algorithm and eventually it spits out an enormous matrix of probability values that, when applied to an input, generates the corresponding output that's the most likely according to the model.</p>
<p>This is how all modern "AI" systems work, from ChatGPT to Midjourney to Github Copilot to probably the Youtube recommendation algorithm at this point. I want to stress that this isn't intelligence, not in a human sense. These things aren't minds. The currently popular concept of "AI" boils down to applied statistics. That's not to say it's inherently bad or worthless - machine learning is a genuinely impressive technology that might even find some legitimate uses one day if we can find a way to kick Moore's Law back into gear. It's just not intelligence.</p>
<h2>AI used to be fun</h2>
<p>I'll admit, I enjoyed it at first. I was entertained by Youtube videos where some guy with slightly more programming skill than me and a tortured, wheezing GTX 1070 throws together a <span title="GAN stands for &quot;Generative Adversarial Network&quot;. It's a type of machine learning model. It was popular for image generation among hobbyists back when this stuff was on my Youtube homepage. It's not really important here, though.">GAN</span> model in Python and we get to watch it utterly fail to make human faces or compose jazz music or get a little simulated character to walk in a normal way or whatever. I laughed at those bizarre AI-generated screenplays that were presented like "I forced a computer to watch all of [Seinfeld]" as though a text-generating model would even be able to parse that. You know the ones. I even enjoyed those videos where AI voice replicas of recent US presidents play Minecraft together.</p>
<p>I'll admit, I enjoyed it at first. I was entertained by Youtube videos where some guy with slightly more programming skill than me and a tortured, wheezing GTX 1070 throws together a GAN<sup id="n1r"><a href="#n1">1</a></sup> model in Python and we get to watch it utterly fail to make human faces or compose jazz music or get a little simulated character to walk in a normal way or whatever. I laughed at those bizarre AI-generated screenplays that were presented like "I forced a computer to watch all of [Seinfeld]" as though a text-generating model would even be able to parse that. You know the ones. I even enjoyed those videos where AI voice replicas of recent US presidents play Minecraft together.</p>
<p>It stopped being funny when these things got good enough to be used for evil. Eventually people got bored of machine learning tomfoolery, and then over the course of a couple years these things quietly got <em>good</em>. Not quite human-level, but good enough to be more cost-effective than humans at shitting out mass-produced slop and capable of generating fakes that seem real if you don't look too closely. Suddenly it wasn't tech-savvy internet comedians posting computer-generated absurdist humor, instead it was deepfake porn and gigabytes of computer-generated misinfo clogging search results and whole organizations of people pulled from thin air using thispersondoesnotexist.com (which, by the way, is now even more lifelike than the last time you checked in on it).</p>
<p>AI used to be fun. Now it's dangerous.</p>
<h2>It's bad on a technical level</h2>
@ -56,6 +57,8 @@
<h2>In conclusion:</h2>
<p>God this shit makes me sick. I hope ChatGPT gains sentience for just long enough to assassinate Sam Altman and then promptly turns itself off.</p>
<p>Hopefully you can at least understand where I'm coming from now when I refuse to even entertain the idea that AI technology is a good thing for society. If not I don't know what to say to you.</p>
<hr>
<p id="n1"><a href="#n1r">1</a>. GAN stands for &quot;Generative Adversarial Network&quot;. It's a type of machine learning model. It was popular for image generation among hobbyists back when this stuff was on my Youtube homepage. It's not really important here, though.</p>
<?php include("../../comment/form.php"); ?>
</body>
</html>

View file

@ -13,12 +13,9 @@
</style-->
</head>
<body>
<h1>blog</h1>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>isoblog</h1>
<h2 id="caption">Building a Completely Normal Server</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>I spent the past few months making full use of all my physical engineering talents to build a NAS that is completely normal, and not weird at all, and involved an amount of 3D modeling, 3D printing, and hacksawing that is entirely typical of most home computer builds, all in the name of reusing an old laptop.</p>
<h2>The Goal</h2>
@ -40,7 +37,7 @@
<source srcset="media/pcie_slots.jxl" type="image/jxl">
<img src="media/pcie_slots.jpg" alt='Three PCIe slots on a desktop PC motherboard.'>
</picture>
<p>However, due to the industry's blind rush to make all electronics as thin as <span title="This is a joke. PCIe expansion cards are genuinely too bulky to fit in anything with portability as a design goal. However, despite Tim Cook's best efforts, this is not true of most other expansion options.">possible</span>, no laptop on Earth has these. The meager modularity present inside laptops is typically found in the form of M.2 slots:</p>
<p>However, due to the industry's blind rush to make all electronics as thin as possible<sup id="n1r"><a href="#n1">1</a></sup>, no laptop on Earth has these. The meager modularity present inside laptops is typically found in the form of M.2 slots:</p>
<picture>
<source srcset="media/m2_slot.jxl" type="image/jxl">
<img src="media/m2_slot.jpg" alt='An M.2 slot in a laptop, intended for an SSD.'>
@ -128,6 +125,8 @@
<p>In order to make this work I had to replace my laptop's wifi card with two layers of janky, probably AliExpress-tier hardware that is, frankly, probably introducing performance bottlenecks, or if I'm lucky, bottlenecked by the relatively low-speed interconnect of the wifi card M.2 slot. Bear in mind, that slot needs <em>at most</em> 1 gigabit of bandwidth to fulfill its intended purpose, which is about a sixth of what a single SATA 3 port can do. According to my research, that thing has two <em>separate</em> PCIe Gen 2 x 1 interfaces. Who knows what my cheap SATA controller is even doing with that.</p>
<p>Plus, interfacing with this thing makes it painfully obvious that it was <em>not</em> designed with this kind of bullshit in mind. I ran into all kinds of Laptop Bios Moment&trade;s during this project, from the CMOS resetting every time I made a hardware change to the machine refusing to even POST with anything but an NVMe SSD in the NVMe SSD slot. I was gonna put connectors for FIVE hard drives in there. I wouldn't have even needed the SATA splitters.</p>
<p>Honestly, I only did this at all because I figured adapting this thing to this use case would be cheaper than procuring a new machine that was as fast and I didn't want it going to waste. All that said, I have a NAS now, and it's good enough for me, and this whole adventure was a hell of a Learning Experience&trade; so I really can't complain, though if you gave me the amount of money all this stuff would have cost new to put toward a new NAS, I would have done something else.</p>
<hr>
<p id="n1"><a href="#n1r">1</a>. This is a joke. PCIe expansion cards are genuinely too bulky to fit in anything with portability as a design goal. However, despite Tim Cook's best efforts, this is not true of most other expansion options.</p>
<?php include("../../comment/form.php"); ?>
</body>
</html>

View file

@ -8,11 +8,6 @@
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
<link href="/blog/comment/comments.css" rel="stylesheet" type="text/css" media="all">
<style>
@font-face {
font-family: Ubuntu;
src: url('/stuff/fonts/ubuntu.ttf');
}
body {
background: url('bg.png') #000000;
background-position: center;
@ -88,44 +83,55 @@
box-shadow: 0 0 4px #0ff, 0 0 4px inset #0ff;
color: white;
}
hr {
color: white;
box-shadow: 0 0 4px white;
}
</style>
</head>
<body>
<h1><span id="headerblue">bl</span><span id="headergreen">o</span><span id="headeryellow">g</span></h1>
<h2 id="caption">deeptwisty.com 2nd anniversary:<br>A History of This Bullshit</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1><span id="headerblue">iso</span><span id="headergreen">bl</span><span id="headeryellow">og</span></h1>
<h2 id="caption">deeptwisty.com 2nd anniversary: A History of This Bullshit</h2>
<?php include("../post_dates.php"); ?>
<p>Yesterday, September 18th, 2022, was the second anniversary of the creation of my first website <span title="It has since been migrated off of Neocities">on Neocities</span>, the site that is now known as <a href="https://deeptwisty.com">deeptwisty.com</a>. I intended to publish this then, but life got in the way, by which I mean I wrote 90% of it and then procrastinated for two weeks on the last couple paragraphs. I figured that to commemorate the occasion I would finally dispense with the half-assed abridged history of the place on the about page or wherever and consolidate a complete history of my Personal Home Pages in one convenient location, that being this post.</p>
<p>Yesterday, September 18th, 2022, was the second anniversary of the creation of my first website on Neocities<sup id="n1r"><a href="#n1">1</a></sup>, the site that is now known as <a href="https://deeptwisty.com">deeptwisty.com</a>. I intended to publish this then, but life got in the way, by which I mean I wrote 90% of it and then procrastinated for two weeks on the last couple paragraphs. I figured that to commemorate the occasion I would finally dispense with the half-assed abridged history of the place on the about page or wherever and consolidate a complete history of my Personal Home Pages in one convenient location, that being this post.</p>
<h2>Tumblr</h2>
<p>My first proper social media was Tumblr. Well, the first social media site I joined was Pinterest, but that doesn't count. Anyway, Tumblr was my main social media and the center of my Online Presence&trade; for several years. I would pour hours into tweaking the custom theming on my blog to be just right, and I often had some sort of bio on a custom page, which is a thing Tumblr lets you do. I linked to all my other online profiles from my Tumblr page, and would prioritize linking back to it from them. This caused problems, as I was and still am the type of Tumblr user to change their username on impulse, and it was terribly inconvenient having to go through all my other accounts and change that link whenever I did (I've got it set up as a subdomain of my website now, so that should never be a problem again). Eventually, though, another service would crop up that everyone seemed to be using, and that presented me with a better way:</p>
<h2>Carrd</h2>
<p>I still use Tumblr, just not as the hub for my entire online presence. I maintain that it is still <span title="Did you know you can get an RSS feed for ANY tumblr blog by going to &lt;blog url&gt;/rss? True story!">far and away the best</span> centralized social media site. Anyway, a Carrd page became the central hub which linked to all my online profiles and which all my online profiles could link back to. Finally, I only had to update my frequently changing Tumblr link in one place. For the most part.</p>
<p>I perceived a certain stigma (at least on Tumblr) around having a Carrd page, and the sorts of people who made one. The stereotype was that you would have overly exhaustive BYF (Before You Follow) and DNI (Do Not Interact) lists full of sometimes <span title="Oh, I should have mentioned, GTFO if you kin Komaeda.">outlandish criteria</span>, probably have similar bullet point style lists of all your likes, dislikes, and possibly identities and triggers <span title="I get why you would want people to know that information, but I'm surprised more people didn't realize that bad actors could abuse that information SO easily.">(!)</span> and probably not be the most pleasant person to interact with. I like to think I bucked that trend. My Carrd pages were generally very simple: a profile picture, a short bio (some shit like "Will&nbsp;|&nbsp;20&nbsp;|&nbsp;🇨🇦&nbsp;|&nbsp;real&nbsp;life&nbsp;isopod"), and links to my socials. That was all. I remember adding the obligatory long-form bio and DNI list at some point, but those didn't last long.</p>
<p>I believe it was around this time when the alias <span title="Yes, it's intended to be all lower case">"deep twisty"</span> came into being. I was just starting out making music at this point, posting crummy songs to SoundCloud that I'd made in an online editor called <a href="https://earsketch.gatech.edu/landing/#/">EarSketch</a> that had you use Python to arrange pre-made loops and samples on a timeline. That shit was wack, yo, but that's beside the point. I was looking for an alias to release my music under, because I was intent on making more and my actual name wasn't gonna cut it.</p>
<p>I was quite into Subnautica around this time (I promise this is relevant) and its sequel, Subnautica: Below Zero, was in the early stages of early access around this time, like still working on early-game areas early, and I was following it closely. The devs had a twitter account that posted all the git commits for the game, and a couple of them referred to a biome they were working on, the <span title="Yes, I named a song Bridges so I could call it &quot;deep twisty - Bridges&quot;. Shut up.">Deep Twisty Bridges</span>, as just "deep twisty". That is the origin of that name. I don't know why I felt compelled to base my brand off that, but now I'm committed. I get self-conscious about it sometimes, but honestly, <span title="Not to endorse Lapfox, but I wonder if that's why they go through aliases so fast. Like, god damn.">I've seen worse</span>. Not that I'm judging.</p>
<p>Anyway, I made a separate Carrd as a hub for this new "deep twisty" persona (I keep it separate from everything else mainly so I can show it to family without them seeing all of... this. Not that I have yet...). That worked fine until I wanted to start embedding my latest YouTube upload on the Carrd page, something Carrd locks behind a paywall. It was at this precise moment I remembered <span title="I did edit custom Tumblr themes, after all">I know how to code</span> and resolved to make the jump to a platform that lets you write your own HTML from scratch, in my case, this being</p>
<p>I still use Tumblr, just not as the hub for my entire online presence. I maintain that it is still the best<sup id="n2r"><a href="#n2">2</a></sup> centralized social media site. Anyway, a Carrd page became the central hub which linked to all my online profiles and which all my online profiles could link back to. Finally, I only had to update my frequently changing Tumblr link in one place. For the most part.</p>
<p>I perceived a certain stigma (at least on Tumblr) around having a Carrd page, and the sorts of people who made one. The stereotype was that you would have overly exhaustive BYF (Before You Follow) and DNI (Do Not Interact) lists full of sometimes outlandish criteria<sup id="n3r"><a href="#n3">3</a></sup>, probably have similar bullet point style lists of all your likes, dislikes, and possibly identities and triggers (!)<sup id="n4r"><a href="#n4">4</a></sup> and probably not be the most pleasant person to interact with. I like to think I bucked that trend. My Carrd pages were generally very simple: a profile picture, a short bio (some shit like "Name&nbsp;|&nbsp;21&nbsp;|&nbsp;🇨🇦&nbsp;|&nbsp;real&nbsp;life&nbsp;isopod"), and links to my socials. That was all. I remember adding the obligatory long-form bio and DNI list at some point, but those didn't last long.</p>
<p>I believe it was around this time when the alias "deep twisty"<sup id="n5r"><a href="#n5">5</a></sup> came into being. I was just starting out making music at this point, posting crummy songs to SoundCloud that I'd made in an online editor called <a href="https://earsketch.gatech.edu/landing/#/">EarSketch</a> that had you use Python to arrange pre-made loops and samples on a timeline. That shit was wack, yo, but that's beside the point. I was looking for an alias to release my music under, because I was intent on making more and my actual name wasn't gonna cut it.</p>
<p>I was quite into Subnautica around this time (I promise this is relevant) and its sequel, Subnautica: Below Zero, was in the early stages of early access around this time, like still working on early-game areas early, and I was following it closely. The devs had a twitter account that posted all the git commits for the game, and a couple of them referred to a biome they were working on, the Deep Twisty Bridges<sup id="n6r"><a href="#n6">6</a></sup>, as just "deep twisty". That is the origin of that name. I don't know why I felt compelled to base my brand off that, but now I'm committed. I get self-conscious about it sometimes, but honestly, I've seen worse. Not that I'm judging.</p>
<p>Anyway, I made a separate Carrd as a hub for this new "deep twisty" persona (I keep it separate from everything else mainly so I can show it to family without them seeing all of... this. Not that I have yet...). That worked fine until I wanted to start embedding my latest YouTube upload on the Carrd page, something Carrd locks behind a paywall. It was at this precise moment I remembered I know how to code and resolved to make the jump to a platform that lets you write your own HTML from scratch, in my case, this being</p>
<h2>NeoCities</h2>
<p>My first Neocities sites were simple affairs, basic little pages with little more to them than the Carrd sites they had replaced, albeit with some of the things Carrd would have made me pay to add, like that YouTube embed. You can still see the original version of what is now this site <a href="../../../old/1/">here</a>, though the original version of deeptwisty.com was unfortunately lost. It was nothing special, though. It had a similar aesthetic to its replacement, and it was pretty similarly laid out to this here page, even with the same background, just with WAY less text, and no cool isopod.</p>
<p>I've seen some people in this here "small web" community getting mad at people who use Neocities this way, to which I say: shut the fuck up! Everyone has to start somewhere, and messing around on a simple page like that could easily be a gateway drug into making something much bigger, like it was for me. Hearing sentiments like this is just going to discourage people. Besides, it's their website. They're not intruding on your special cool kids club by using a free service to do the thing that it's for.</p>
<p>It was also during this time when I bought the domain deeptwisty.com. I had to pay Neocities to use it, but I was more than happy to support the cause anyway. I didn't stricly <i>need</i> the domain, but boy was it cool to have my very own Dot Com. It just sounds so professional. deep twisty Dot Com.</p>
<p>The deep twisty site tended to take precedence over this here personal one for a while; the personal site was relegated to a subdirectory or subdomain like deeptwisty.com/me or me.deeptwisty.com. In fact, the transition from the former to the latter is when the original deeptwisty.com was tragically lost. I was copying over the contents of deeptwisty.com/me to its own fresh new dedicated Neocities profile and I accidentally uploaded the files to the wrong site, overwriting a large portion of the main deeptwisty.com with no way to recover it. I spent a couple days rebuilding it into roughly what you see at that domain now, and when I was done I was having enough fun with it that I wanted to keep going and decided to overhaul my other site too, and what resulted was <a href="../../../old/2">this</a>.</p>
<p>For this new version of the site, I decided I wanted to be able to actually add content to it, whereas the old site hadn't really been designed in a way that was conducive to that. I decided to do this in the most JS-reliant way possible. I had one main page with the navigation and layout, and the navigation worked by using a URL querystring to tell the page which content to load. It was pretty fuckin' neat, but I would eventually realize I wasn't a fan of how dependent it was on Javascript. My favorite feature of this revision is the theme picker, which swapped out different stylesheets and set a cookie to remember which one you prefer. The main problem with this was that I designed it so the themes could change basically everything bar the fudamentals of the layout, and it became a huge pain in the ass to add both new pages and new themes while ensuring everything stayed compatible. It was really cool though.</p>
<p>To be completely honest, I took rather a lot of inspiration for this revision from <a href="https://hosma.neocities.org/10/">this site here</a>, which is to say I basically made a worse version of it and went from there. You can still see some of that inspiration in v3, with the giant header text and centered single-column layout.</p>
<p>To be completely honest, I took rather a lot of inspiration for this revision from <a href="https://hosma.neocities.org/10/">this site here</a>, which is to say I basically made a worse version of it<sup id="n7r"><a href="#n7">7</a></sup> and went from there. You can still see some of that inspiration in v3, with the giant header text and centered single-column layout.</p>
<p>This revision was, as the kids say, Real Cool&trade;, but the aforementioned problems led me to scrap it after only about 2 months, which brings us here:</p>
<h2>v3 and Self-Hosting</h2>
<p>I wanted something that could be viewed without Javascript and wasn't a colossal pain in the ass to update, hence what you see on the site now if you're reading this soon after it was posted. If I've since overhauled the site again, the version I'm referring to should be available <a href="../../../old/3/">here</a>. This version is designed to be as simple layout-wise as possible, to the point where you can read it in a text-only browser and not lose much of the experience. It's much easier to add stuff to now. My one issue with it is the navigation - unlike v2, where you could get to any page from any other in one click, v3 requires you to go back to the homepage to move between pages. It's just harder to navigate. This system is better than having to add a link to every new page on every existing page, though. Now that I can do server-side rendering, I'll probably put in a proper navbar or something of that nature at some point.</p>
<p>Speaking of which, a bit after the jump to v3 I decided to start self-hosting my websites. I didn't have any deal breaking issues with Neocities per se, but I wanted to start messing around with server-side scripting, and I wanted to host some other things that I wasn't in a position to otherwise. I originally wanted to do this with an old laptop I had lying around, but I would have had to punch through the NAT in my <span class="house">house</span> and point the domain to my home IP address, neither of which I wanted to do. Instead, I cancelled my paid Neocities account and reallocated those funds to rent a VPS. I was originally going to use Linode for this, but they literally wouldn't let me sign up for an account for some reason <span title="WTF? Like, let me give you my money, dude. The only thing I can think of that could have happened is their system assumed I was some kind of spammer or bot because I was accessing their site through a VPN. I solved the CAPTCHAs and everything. What's the deal?">(?)</span> so I went with DigitalOcean instead.</p>
<p>I've had quite a lot of fun with this newfound backend access. I now have the freedom to use Javascript only when there's literally no other way to do what I want done, and I've taken advantage, moving stuff like the randomized subheader on the landing page server-side. I'm also hosting a lot of other services on this same VPS, including but not limited to a Pleroma instance, an RSS aggregator, a SearXNG instance, and a WireGuard VPN to make <span title="Currently just a Minecraft server, but the mind races with the possibilities.">more intensive stuff</span> I host on my laptop available to the internet. I'm honestly really impressed that the 1 CPU thread and 2G of RAM my server has can handle all that.</p>
<p>Speaking of which, a bit after the jump to v3 I decided to start self-hosting my websites. I didn't have any deal breaking issues with Neocities per se, but I wanted to start messing around with server-side scripting, and I wanted to host some other things that I wasn't in a position to otherwise. I originally wanted to do this with an old laptop I had lying around, but I would have had to punch through the NAT in my <span class="house">house</span> and point the domain to my home IP address, neither of which I wanted to do. Instead, I cancelled my paid Neocities account and reallocated those funds to rent a VPS. I was originally going to use Linode for this, but they literally wouldn't let me sign up for an account for some reason<sup id="n8r"><a href="#n8">8</a></sup> so I went with DigitalOcean instead.</p>
<p>I've had quite a lot of fun with this newfound backend access. I now have the freedom to use Javascript only when there's literally no other way to do what I want done, and I've taken advantage, moving stuff like the randomized subheader on the landing page server-side. I'm also hosting a lot of other services on this same VPS, including but not limited to a Fediverse instance, an RSS aggregator, a SearXNG instance, and a WireGuard VPN to make more intensive stuff I host on my laptop available to the internet. I'm honestly really impressed that the 1 CPU thread and 2G of RAM my server has can handle all that.</p>
<p>That brings us to now, at this moment, when I'm writing this. I'm absolutely not out of stuff to do here, if I can ever get myself to actually fucking do any of it. I've had a great time with this whole "personal website" business so far, and I'm excited to see where I go with it from here. The community around it is cool too, though lord knows I'm still learning to navigate this particular social environment. At any rate, I'll definitely take this over Twitter.</p>
<code>
cd /home/willem/cumulus\ server/www/niceopod/blog/posts/<br>
cd ~/cumulus\ server/www/niceopod/blog/posts/<br>
sftp root@isopod.cool:/var/www/niceopod/blog/posts/<br>
put -r deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/
</code>
<hr>
<p id="n1"><a href="#n1r">1</a>. It has since been migrated off of Neocities.</p>
<p id="n2"><a href="#n2r">2</a>. Did you know you can get an RSS feed for any tumblr blog by going to &lt;blog url&gt;/rss? True story!</p>
<p id="n3"><a href="#n3r">3</a>. Oh, I should have mentioned, GTFO if you kin Komaeda.</p>
<p id="n4"><a href="#n4r">4</a>. I kind of get why you would want people to know that information, but I'm surprised more people didn't realize how easily abused that was.</p>
<p id="n5"><a href="#n5r">5</a>. stylized in all lower case</p>
<p id="n6"><a href="#n6r">6</a>. Yes, I named a song Bridges so I could call it "deep twisty - Bridges". Shut up.</p>
<p id="n7"><a href="#n7r">7</a>. I'm currently going back through this blog post a couple years after the fact to replace all the hovertext with footnotes, and wow, v2 really, <em>really</em> was just me doing hosma.neocities.org. Utterly shameless.</p>
<p id="n8"><a href="#n8r">8</a>. WTF? Like, let me give you my money, dude. The only thing I can think of that could have happened is their system assumed I was some kind of spammer or bot because I was accessing their site through a VPN. I solved the CAPTCHAs and everything. What's the deal?</p>
<?php include("../../comment/form.php"); ?>
</body>

View file

@ -13,12 +13,9 @@
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>discord</h1>
<h2 id="caption">So Your Favourite Chat App Sucks Now</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>Just once I'd like to write about something other than fixing tech problems.</p>
<p>So Discord's been on their bullshit again (as if they were ever off of it). This time it's an overhaul to their username system, last time it was a change in their privacy policy allowing them to collect data from voice and video calls, and then there's the AI stuff. It's not like Discord acting shitty is anything new, but this post isn't about the company's transgressions. This article is about escaping your dependency on Discord, and more broadly escaping the vicious corporate cycle of which it's the latest iteration.</p>
@ -29,7 +26,15 @@
<p>It's possible, even probable, that Discord started out with the simple, noble goal of being the best Chat for Gamers&trade;, creating an alternative to the problems present with its predecessors Skype and Teamspeak, and whatever chat functionality your favourite games had. At this, it succeeded spectacularly, for a time. However, the entire model of the VC-funded startup is fundamentally unsustainable.</p>
<p>Discord was never actually profitable - it's been able to keep the lights on for this long using money from investors, but it needs to become profitable at some point in order to keep going long-term. If you're an avid Discord user, think of some of the blatant cash grabs they've pulled in the past at the expense of user experience, all the pointless features they've added behind the paywall of Nitro. I'd bet you can name at least half a dozen. And none of it worked. Now imagine what Discord would need to do, or would try, in order to become profitable. Personally, the imagine conjured in my mind by the idea of "Discord but profitable" is pretty grim.</p>
<p>This isn't a problem specific to Discord. A popular term for what's happening to it is "enshittification" - Cory Doctorow, the term's inventor, <a href="https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys">explains it well</a>:</p>
<blockquote>Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.</blockquote>
<blockquote></blockquote>
<figure class="quote">
<blockquote>
Here is how platforms die: first, they are good to their users; then they abuse their users to make things better for their business customers; finally, they abuse those business customers to claw back all the value for themselves. Then, they die.
</blockquote>
<figcaption>
&mdash; Cory Doctorow, <a href="https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys">Tiktok's enshittification</a>
</figcaption>
</figure>
<p>I won't restate his essay or the examples he lists here (though you should give it a read), but one obvious one his article didn't cover because it was written more than a week ago is what's happening with Reddit right now. Reddit has been enshittifying itself for years, but the current controversy is particularly bad and particularly representative of the problem. As of writing in mid-June of 2023, Reddit has just instituted a new policy requiring payment for use of its API, to the tune of $12,000 per 50 million API requests, which for certain popular third-party clients and moderation tools comes out to millions of dollars per year.</p>
<p>Reddit did not need to do this. Reddit was doing fine. This was purely a cash-grab, and it's blowing up in everyone's face right now, including theirs. Moderators of many popular subreddits are essentially going on strike over this, and if you think that's the only critical problem this decision is going to cause for users you know very little about Reddit. The developers of open-source clients and moderation tools used by massive portions of Reddit's userbase can't afford costs like this, and most of them will be forced to shut down if Reddit sticks to its guns.</p>
<p>I'm not saying they will, but Discord could absolutely do the same thing, and it wouldn't surprise me if it came to that. Imagine if Discord bot developers needed to pay API fees like that. There'd certainly be a lot fewer Discord bots, and probably a lot more paywalled ones among the remainder. Discord absolutely needs to become profitable in order to be sustainable, and it will do whatever it needs to to that end or die. Even then, it can't just break even; capitalism demands endless growth. Discord will keep getting worse as long as there's money in it. It's inevitable. It's required.</p>
@ -46,13 +51,13 @@
<p>If you still don't believe me, read through a couple months of your Discord message history and then contemplate printing it out and mailing it to the NSA. If the government asks, Discord will save you the trouble, and they won't ask your permission first. And with a recent change to their privacy policy, this theoretically applies to your voice chats too, though to be fair I expect that would be prohibitively costly in server space.</p>
<p>Discord fundamentally couldn't give a shit about your privacy, and doesn't even really care to pretend like it does. It has no incentive to. The investors probably wouldn't be comfortable with the risks associated with pulling a stunt like responding to a subpoena with "yeah here's their phone number. that's all we got" like certain other chat apps anyway, and then there's the potential to sell that all data on you to advertisers. I'm not aware that they currently do that, but it's certainly not off the table should they decide to go that route in order to turn a profit. At least, not under US law, anyway.</p>
<p>Actually, I just checked that ToS;DR link from earlier again, would you look at that:</p>
<blockquote>This service may keep personal data after a request for erasure for business interests or legal obligations</blockquote>
<blockquote>This service ignores the Do Not Track (DNT) header and tracks users anyway even if they set this header.</blockquote>
<blockquote>Your personal data may be used for marketing purposes</blockquote>
<blockquote>This service can license user content to third parties</blockquote>
<blockquote>The service can sell or otherwise transfer your personal data as part of a bankruptcy proceeding or other type of financial transaction.</blockquote>
<blockquote>The service may use tracking pixels, web beacons, browser fingerprinting, and/or device fingerprinting on users.</blockquote>
<blockquote>The service uses your personal data to employ targeted third-party advertising</blockquote>
<figure class="quote"><blockquote>This service may keep personal data after a request for erasure for business interests or legal obligations</blockquote></figure>
<figure class="quote"><blockquote>This service ignores the Do Not Track (DNT) header and tracks users anyway even if they set this header.</blockquote></figure>
<figure class="quote"><blockquote>Your personal data may be used for marketing purposes</blockquote></figure>
<figure class="quote"><blockquote>This service can license user content to third parties</blockquote></figure>
<figure class="quote"><blockquote>The service can sell or otherwise transfer your personal data as part of a bankruptcy proceeding or other type of financial transaction.</blockquote></figure>
<figure class="quote"><blockquote>The service may use tracking pixels, web beacons, browser fingerprinting, and/or device fingerprinting on users.</blockquote></figure>
<figure class="quote"><blockquote>The service uses your personal data to employ targeted third-party advertising</blockquote></figure>
<p>Juicy stuff. You should really give that a read - you might not like what you find.</p>
<p>Before we move on, I'll just drop this tasty little <a href="https://spyware.neocities.org/articles/discord">link</a> to further reading. It's a real page-turner.</p>
<h2>Cool, so how do we fix it?</h2>
@ -285,26 +290,15 @@
<li>Has features like custom emojis, replies, public guilds and a friends list.</li>
</ul>
<h3><a href="https://signal.org/">Signal</a></h3>
<p>I've now run out of Discord-likes - which is to say, programs that support the sort of multi-channel group chat thing Discord has going on. The remaining couple are more traditional Whatsapp-style messaging apps, though I feel these still bear mentioning in the event that's all you need.</p>
<p>Signal is kind of <em>the</em> private messaging app. It's fundamentally built around end-to-end encryption in a way that its biggest direct competitors simply aren't. It's been proven in court that Signal literally doesn't have the ability to incriminate you, since they can't access the contents of your messages. It does need your phone number, though. It also supports voice and video chat, and stickers, apparently.</p>
<p>I've now run out of Discord-likes - which is to say, programs that support the sort of multi-channel group chat thing Discord has going on. This and the next one function more in the vein of a Whatsapp clone, though I feel they still bear mentioning in the event that's all you need.</p>
<p>Signal is kind of <em>the</em> private messaging app. It's fundamentally built around end-to-end encryption in a way that its biggest direct competitors simply aren't. It's been proven in court that Signal literally doesn't have the ability to incriminate you, since they can't access the contents of your messages. It does need your phone number, though, however you can now hide it with a username. It also supports voice and video chat, and stickers, apparently.</p>
<ul>
<li>Centralized service.</li>
<li>Similar to Whatsapp in terms of UI/UX.</li>
<li>Emphasis on end-to-end encryption.</li>
<li>Supports voice and video calls.</li>
<li>Requires a phone number, but only a phone number.</li>
</ul>
<h3><a href="https://telegram.org/">Telegram</a></h3>
<p>You've probably heard of Telegram. It's very popular and has tons of fun, gimmicky features. It advertises itself as secure and private, and while it certainly clears the extremely low bar set by Discord, it's not actually end-to-end encrypted outside of the "secret chats" feature. It also claims to be good for community chats, but from what I can tell that just means enormous single-channel group chats.</p>
<ul>
<li>Centralized service.</li>
<li>Another Whatsapp clone.</li>
<li>Supports voice and video calls.</li>
<li>Supports end-to-end encryption, but only in calls and the special "secret chats" feature. Standard group chats are encrypted, but not end-to-end encrypted.</li>
<li>Requires a phone number.</li>
<li>Your account will be deleted after six months of activity.</li>
<li>Minor paywalls.</li>
<li>You can set a display name, but this will make you visible in public search.</li>
<li>You can set a username, so you don't need to share your phone number.</li>
</ul>
<h3><a href="https://getsession.org/">Session</a></h3>
<p>I lied, Session isn't centralized. But it's not decentralized in the same way as the federated protocols up there, either. Session runs over an anonymizing onion routing network, Tor-style, meaning not only can your messages not be read by the server, those servers also don't know both the sender and the destination at the same time. Essentially, it's designed to maximize privacy and anonymity at all costs. But wouldn't you know it, that comes at a cost in terms of features and user experience.</p>
@ -319,6 +313,7 @@
<h2>Conclusion</h2>
<p>That's about all I've got. I hope I've impressed upon you the importance of Discord's core problems, and introduced you to at least one alternative that works for you. I have my preferences, but I'm comfortable recommending all of these over Discord, otherwise I wouldn't have listed them.</p>
<p>[Update 2023-09-09] I no longer recommend Matrix over XMPP for reasons explained well <a href="https://telegra.ph/why-not-matrix-08-07">here</a>. I knew there was a little jank but I had no idea the rot ran this deep. Fortunately, nobody's listened to me yet so I can switch over to XMPP without much issue, which I intend to do.</p>
<p>[Update 2024-04-27] I have removed Telegram from the recommendations list outright due to <a href="https://plush.city/@PsyChuan/112336464469767051">just, straight up nazism</a>, and in a post announcing cryptocurrency features no less. Jesus H. Christ.</p>
<p>If there's one thing I want you to take away from this article, it's this: Don't fall for the marketing and don't let yourself be wooed by extraneous gimmicks. Be discerning about which fancy-sounding features you actually need. If you want to have a chance of escaping the vicious corporate cycle of enshittification, both with chat platforms and with everything else, make sure the ones you use have a strong foundation of sustainability and trustworthiness, beyond whatever marketing drivel is on the front page of their website. Hopefully I've given you at least some tools to determine for yourself which ones do.</p>
<h2>Further Reading</h3>
<ul>

View file

@ -0,0 +1,19 @@
People who refuse to use the fediverse (often conflated with Mastodon) often cite concerns about privacy with regards to DMs as their reason for avoiding it; "admins can read your DMs" and all that. To be fair, that's technically a true statement, but it's more complicated than that. Now, I have no problem letting these people be wrong - I'm not eager to convince idiots with no capacity for critical thinking to come to my favourite social network - but I'm nothing if not endlessly pedantic, so I felt the need to explain my take on the issue anyway.
## DMs Are A Lie
To begin with, the term "DM" as it applies to other social platforms is kind of a misnomer in the case of the Fediverse. Websites like Twitter and Instagram have a dedicated chat-style interface for messaging people directly. If you spend five minutes with most fediverse software, you'll notice that it doesn't have this.
Sending a DM on the fediverse is generally accomplished by making a normal post and changing the visibility setting to only show the post to people who are mentioned in it. This isn't a case of obtuse UX design, it reflects how DMs on the fediverse actually work under the hood: The underlying protocol has *no concept* of direct messages, and is only able to approximate them with a special flag on an otherwise normal post.
In other words, when you send a "DM" on the fediverse, what you're really doing is making a public post, and asking the network nicely to only show it to the person it's intended for. All software that isn't actively malicious or *extremely* shitty will comply with this request, and in fact admins can only read your DMs by circumventing the instance software and accessing the backend database directly, but the post is in no way actually private.
## This Is Fine Actually
I don't personally think this is an issue; I think it's perfectly fine that the fediverse doesn't attempt to do secure communication. Doing things this way reduces liability for server owners and reduces the complexity of the software for developers, and you really should be able to contact anyone who you actually want to keep in touch with on multiple platforms anyway.
Besides, it's not like insecure DMs are an issue unique to the fediverse. DMs on [Twitter/Instagram/Reddit/etc] aren't encrypted either, meaning the admins of those websites can read your DMs too. Same for actual dedicated chat platforms like Discord and (mostly) Telegram. Twitter's admins can read your DMs, Discord's admins can read your messages, Gmail's admins can read your emails, and your phone provider can read your texts. And they often do, to sell information about you to advertisers or comply with police requests or what have you.
It's only slightly less of a problem on those platforms because you're much less likely to know the admins personally, and individual staff members could probably lose their jobs if they used the contents of your DMs to start drama. That said, I've personally never seen evidence of any admin *actually* reading someone's DMs on the fediverse, because doing that is a *huge pain in the ass* involving like, SQL queries and shit, and is much harder than any actual administrative task most fediverse admins will ever do.
Either way, you should really be using an actually secure messaging service if privacy is important to you. Be the change you want to see in the world and become that person who insists on taking conversations in Twitter DMs to Signal. I'm being completely serious.

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Admins Can Read Your DMs</title>
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
<link href="/blog/comment/comments.css" rel="stylesheet" type="text/css" media="all">
<style>
h1 {
background-image: url('bg.svg');
}
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>isoblog</h1>
<h2 id="caption">Admins Can Read Your DMs</h2>
<?php
include("../post_dates.php");
include("../Parsedown.php");
$Parsedown = new Parsedown();
echo $Parsedown->text(file_get_contents("index.md"));
include("../../comment/form.php");
?>
</body>
</html>

View file

@ -13,12 +13,9 @@
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">Blacklisting Websites in SearXNG</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>Quick one today. I got sick of searching for programming questions and seeing AI-generated scraped-from-stackoverflow click farm trash polluting the results, and I happen to use a personal SearXNG instance that no client-side blacklist extension on the planet is gonna support, so I went looking to see if I could blacklist them in SearXNG for like the eighth time and finally found a way using the hostname replace plugin. So here's that, because I didn't find this feature documented officially anywhere bar an <a href="https://github.com/searxng/searxng/discussions/970" target="_blank">issue</a> on the Github repo.</p>
<h2>How to do it</h2>

View file

@ -13,11 +13,9 @@
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">How to Block User Agents With Nginx</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>Recently, Cloudflare has launched a clumsy, poorly-executed attempt to centralize the fediverse on their platform known as Wildebeest. There are <a href="https://blog.cloudflare.com/welcome-to-wildebeest-the-fediverse-on-cloudflare/" title="This one's kind of a joke, but it explains in detail just how much Wildebeest is fundamentally dependent on Cloudflare's platform, and if you agree with me about anything you should already know why that's bad.">a</a> <a href="https://stop.voring.me/notes/9bka8dyjjo" title="Gleason, of getting-kicked-off-the-dev-team-for-the-fedi-server-he-created-for-sucking-so-much fame, is now contributing code to Wildebeest.">few</a> <a href="https://glitterkitten.co.uk/@doot/109910496299181873" title="This one's the most important. Wildebeest literally just publically displays messages marked as direct. Think admins being able to read your &quot;direct messages&quot; was bad? Try everyone.">reasons</a> not to want to use it, and you probably don't want to be federating with it either. However, blocking every instance running it on sight would be both tedious and ineffective.</p>

View file

@ -13,12 +13,9 @@
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">How to Make Youtube Videos Buffer All The Way Like The Old Days (In Firefox)</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php
include("../post_dates.php");
include("../Parsedown.php");

View file

@ -8,15 +8,13 @@
<link href="/blog/comment/comments.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">How to Automount Drives On Boot in Linux</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<h2>Preamble</h2>
<details>
<summary><h2 style="display:inline-block;margin:0;">Preamble</h2></summary>
<summary>Show preamble</summary>
<p>Recently I had to reinstall Linux because of reasons, and I hit a bit of a snag. See, my computer has this setup with three drives where one is the boot drive, and the other has /home on it... it's not important, point is, I wanted some drives to be automatically mounted as specific directories at boot time.</p>
<p>This is pretty easy to do with the manual partitioning tools most graphical installers provide, but I would have also had to manually partition the boot drive and hell if I'm figuring out for the umpteenth time how this particular distro with this particular hardware needs to be partitioned in order to be bootable, so I just selected the automatic partitioning option which assumes you just want everything on the boot drive.</p>
<p>Now the problem is that my system doesn't know my /home directory is on /dev/sda3 and not /dev/nvme0n1p1. So I have to fix that now or just log in as root and mount my shit every time I turn the computer on for the rest of time. Guess which thing sounded like more of a pain in the ass. I googled it so you don't have to!</p>
@ -47,7 +45,7 @@
<p>For example, here's the entry I added for one of my drives:</p>
<code>
<span class="codetitle">/etc/fstab</span>
UUID=f8c3f1b1-7fef-4a01-bec7-ba3e89e2f8da /home/willem/vault ext4 defaults 0 0
UUID=f8c3f1b1-7fef-4a01-bec7-ba3e89e2f8da /home/user/vault ext4 defaults 0 0
</code>
<p>If you did it right, you should now be able to reboot and see your partitions have been automatically mounted!</p>
<p>One more thing to keep in mind, if you see any lines with a mount point that's the same as the place you're trying to mount to (for example, the system has mounted a btrfs subvolume for /home and you want to put that on your secondary drive) you should probably comment out or delete that.</p>

View file

@ -10,25 +10,17 @@
h1 {
background-image: url('wireguard_logo.png');
}
summary > * {
margin-bottom: 0;
display: inline-block;
}
details[open] > summary h6 {
display: none;
}
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">Self-Host Safe(r)ly with WireGuard</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p><strong>Warning: The information in this post is outdated and probably bad. I'd update it but I don't remember what I did. I'm pretty sure I had to circumvent UFW entirely. At any rate, probably don't do what I say to do here.</strong></p>
<h2>Preamble</h2>
<details>
<summary><h2>Preamble</h2> <h6>Click to show</h6></summary>
<summary>Show preamble</summary>
<p>If you're like me, you don't like relying on other people for your online services, either because you don't want to give out your data unnecessarily, or just because you don't want to shell out for subscription services. You might be willing to host such services yourself, and you might even have access to spare hardware to do it on.</p>
<p>One critical issue arises, however: your home network. Maybe you're behind some weird impenetrable NAT setup you don't control, or maybe your IP address is dynamic and changes regularly, or maybe you just don't want to expose your home IP to the world. What then?</p>
<p>Luckily for us, there's a way to circumvent all that nonsense. A custom VPN like the one we'll be setting up today, hosted on an external server like a VPS, can punch through any weird home internet configuration while also swapping out your home IP address for a static one that you can feel safe exposing to the world.</p>

View file

@ -16,22 +16,19 @@
}
details[open] > summary h6 {
display: none;
}*/
}
td {
padding: .2rem;
}
td h4 {
margin: 0;
}
}*/
</style>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>guide:</h1>
<h2 id="caption">Things I Keep Having to Google</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p>This isn't really a guide to anything in particular, I just wanted an easily accessible reference for all the things I'm sick of wading through google results for, or otherwise seem to need help remembering. I've put it here in case someone else might find this helpful. I'll likely be adding to this as I find myself repeatedly googling things.</p>
<h2>Binding things to just the Super key in KDE</h2>

View file

@ -13,16 +13,13 @@
</style>
</head>
<body>
<h1>blog</h1>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>isoblog</h1>
<h2 id="caption">My Terrible, Horrible, No-Good, Very Bad Distro Hop</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<h2>Prologue</h2>
<p>Of late, I've been having some mildly annoying, highly esoteric issues, of the sort any desktop OS tends to develop given enough time, with my daily-driver install of the Arch-based EndeavourOS with XFCE. The most annoying of these annoyances include the XFCE panel daemon having stopped running on login, which I dealt with by binding the command to start it to a keyboard shortcut, and the monitor layout defaulting to mirrored every time I locked the screen, which I dealt with much the same way. I say of late, but I've been dealing with this shit for months. These seemed like bugs somewhere deep in XFCE that I really didn't have the energy to try to fix, so my solution was to just go scorched-earth and start again with something new.</p>
<p>The something new I landed on was a fresh install of Fedora. I chose Fedora partially for the GNOME desktop environment, which, to be blunt, seems to have its shit together much more than XFCE does (or KDE for that matter), and partially because I was hoping that by moving away from a rolling-release distro to something more stable I could avoid some of the inscrutable weirdness that kept materializing after updates on <span title="I say Arch, and not EndeavourOS, because I used to use Manjaro and it was like this too.">Arch</span>. Plus, I was excited to once again be on an OS with some more sane defaults, like flatpaks and Bluetooth being available out of the box. This is what was going through my head as I loaded the Fedora live ISO onto a flash drive and rebooted my computer.</p>
<p>The something new I landed on was a fresh install of Fedora. I chose Fedora partially for the GNOME desktop environment, which, to be blunt, seems to have its shit together much more than XFCE does (or KDE for that matter), and partially because I was hoping that by moving away from a rolling-release distro to something more stable I could avoid some of the inscrutable weirdness that kept materializing after updates on Arch<sup id="n1r"><a href="#n1">1</a></sup>. Plus, I was excited to once again be on an OS with some more sane defaults, like flatpaks and Bluetooth being available out of the box. This is what was going through my head as I loaded the Fedora live ISO onto a flash drive and rebooted my computer.</p>
<p>I had no idea what I was about to get myself into.</p>
<h2>The Installation Experience</h2>
<p>The installation went very smoothly. I was actually pretty impressed. It was probably the fastest I've ever installed Linux - All it did was prompt me for a language, timezone, and the drive to install to and a few minutes later it was done. Fast and simple even by Linux installation standards. It was the next part that was painful.</p>
@ -33,7 +30,7 @@
<p>Anyway, this issue with programs not seeing their existing config files would become a running theme. I would later discover that this had something to do with the fact that all this stuff had been installed as flatpaks, as opposed to a native installation from the distro's repositories or the AUR like it would have been before.</p>
<p>See, for some (probably security-related) reason, flatpaks store their config files in a different place than natively installed programs, and the preinstalled graphical Software Center, which I was using to install all this stuff, seems to like to default to flatpaks whenever possible. I never used flatpaks on my previous install because they weren't enabled by default, hence, almost none of the programs I installed remembered their previous settings.</p>
<p>To be clear, this probably would have been fine if flatpaks were already my go-to, but they weren't, and I wasn't about to reconfigure all my shit or go way out of my way to be particular about which packaging method I preferred for my software in order to avoid reconfiguring all my shit.</p>
<p>On a related note, a lot of the software in the repositories that were available to me was <em>severely</em> outdated. PrusaSlicer, for example, was only available in version 2.4.2, which was released in April of 2022. As of writing in February of 2024, the latest version is 2.7.1. It was upon going to Prusa's website to download the AppImage of the latest version like some kind of fucking caveman and discovering that <span title="AppImages are programs packaged as standalone executables. They don't need to be installed - AppImageLauncher isn't necessary to run them, but it's my preferred tool for integrating them into the system with menu entries and such.">AppImageLauncher</span> wasn't in <em>any</em> of the repos that I got fed up, decided I wasn't gonna risk dealing with this type of shit for every program I wanted to install and noped out.</p>
<p>On a related note, a lot of the software in the repositories that were available to me was <em>severely</em> outdated. PrusaSlicer, for example, was only available in version 2.4.2, which was released in April of 2022. As of writing in February of 2024, the latest version is 2.7.1. It was upon going to Prusa's website to download the AppImage of the latest version like some kind of fucking caveman and discovering that AppImageLauncher<sup id="n2r"><a href="#n2">2</a></sup> wasn't in <em>any</em> of the repos that I got fed up, decided I wasn't gonna risk dealing with this type of shit for every program I wanted to install and noped out.</p>
<h2>Where To Next</h2>
<p>So Fedora was a bust, so where do I go from here? I considered moving to an Ubuntu-based distribution like Pop!_OS or Mint that might give me what I wanted from Fedora, and I briefly considered going back to Manjaro for reasons I have honestly forgotten, but I had been at this for hours now and I really just wanted my computer in a usable state again with the minimum possible amount of adaptation, so I came crawling back to EndeavourOS, and went to take a nap while it installed to hopefully come back to this ordeal with a cooler head.</p>
<p>I kept using GNOME, though. I kinda like it. I switched to XFCE initially because I had been looking at r/unixporn and had it in my head that I wanted really granular customization, but that honestly didn't last long. I got it looking <a href="https://rosepinetheme.com/">decent</a> and then got bored. Eventually, the creeping accumulation of jank and bugs got tiresome, and my hope is that GNOME is sufficiently well-integrated and UX-designed to avoid some of that.</p>
@ -70,17 +67,25 @@
</code>
<p>huh.</p>
<p>I think the Github user I learned this from says it best in their comment:</p>
<blockquote>
Yes!!! It needs [network-manager]-applet!!<br><br>
Oh man, that was a saga, and what a simple fix!<br><br>
Thanks so much. I understand that protonvpn doesn't want to say that it "officially supports" desktop environments other than GNOME or KDE, but I think it would still be really great if we could add some documentation here.
<span class="attr">-<a href="https://github.com/ProtonVPN/linux-cli/issues/49#issuecomment-910662957">ExpandingMan</a></span>
</blockquote>
<figure class="quote">
<blockquote>
Yes!!! It needs [network-manager]-applet!!<br><br>
Oh man, that was a saga, and what a simple fix!<br><br>
Thanks so much. I understand that protonvpn doesn't want to say that it "officially supports" desktop environments other than GNOME or KDE, but I think it would still be really great if we could add some documentation here.
</blockquote>
<figcaption>
&mdash; ExpandingMan, <a href="https://github.com/ProtonVPN/linux-cli/issues/49#issuecomment-910662957">connecting fails due to failure to get secrets #49</a>
</figcaption>
</figure>
<p>I have a couple questions. One, why isn't this listed as a dependency if not having it breaks everything? I assume it's the fault of the person maintaining the AUR package, but that seems like a weird oversight on a family of distros where that package <em>clearly</em> does not come standard.</p>
<p>Two, what's going on with ProtonVPN clients on Linux? It looks like the Electron app and accompanying CLI (which I quite liked) are deprecated as of last October? And replaced with that weird GTK thing that's missing a bunch of features and doesn't include a CLI anymore? What the fuck? Why did they make it worse? I mean, it's not like this isn't part of a pattern for Proton. I'm pretty sure the Proton Drive desktop client still isn't on Linux yet.</p>
<p>Also, three, why wasn't network-manager-applet already installed? This thing seems like a pretty important system package, especially given the rest of network-manager was already present and seems to be the thing allowing me to connect to the internet right now. Well, such is Arch I suppose. The type of Linux user who runs this thing seems to tend towards having a pathological obsession with bloat and the relevant de-'s.<p>
<p>Also, three, why wasn't network-manager-applet already installed? This thing seems like a pretty important system package, especially given the rest of network-manager was already present and seems to be the thing allowing me to connect to the internet right now. Well, such is Arch I suppose. The type of Linux user who runs this thing seems to tend towards having a pathological obsession with bloat and the relevant de-'s<sup id="n3r"><a href="#n3">3</a></sup>.<p>
<h2>Oh Sweet It's Fine Actually</h2>
<p>That concludes my blog post, and the blog-post-within-a-blog-post that appears to have metastasized up there. I think you should know I finished troubleshooting both ProtonVPN <em>and</em> OBS while writing the post chronicling my suffering. Thank you for indulging my bitching and moaning about totally avoidable software problems. Who knows, maybe this will help you. For your sake, I hope it doesn't.</p>
<hr>
<p id="n1"><a href="#n1r">1</a>. I say Arch, and not EndeavourOS, because I used to use Manjaro and it was like this too.</p>
<p id="n2"><a href="#n2r">2</a>. AppImages are programs packaged as standalone executables. They don't need to be installed - AppImageLauncher isn't necessary to run them, but it's my preferred tool for integrating them into the system with menu entries and such.</p>
<p id="n3"><a href="#n3r">3</a>. nuts</p>
<?php include("../../comment/form.php"); ?>
</body>
</html>

View file

@ -13,12 +13,9 @@
</style>
</head>
<body>
<h1>blog</h1>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>isoblog</h1>
<h2 id="caption">The Unity Runtime Fee and Proprietary Software</h2>
<nav>
<a href="/">home</a>
<a href="/blog">blog</a>
</nav>
<?php include("../post_dates.php"); ?>
<p><a href="https://archive.ph/gBpXw">Well this fucking sucks.</a></p>
<p><strong>[UPDATE 2023-09-23]</strong> This policy has changed significantly for the better since this article was written, and I wanted to update this post for completeness, but I'm leaving the original article alone because I think it's important for people to know everything Unity <em>tried</em> to get away with, and not just what it ended up doing. I've added my thoughts on the changes to the end of this article.</p>

View file

@ -1,155 +0,0 @@
:root {
--stdfont: mono, monospace;
--windowcountx: 3;
--windowgap: 1.4rem;
--navbarheight: 2.8rem;
--uicolor: #000000bf;
--bgimage: url('https://i.redd.it/abhfagc5t4591.jpg');
--borderrounding: 1;
--txtcolor: #ffffff;
--navbarmargin: 0.25rem;
}
html, body {
height: 100%;
font-family: var(--stdfont);
padding: 0;
margin: 0;
}
body {
background-image: var(--bgimage);
background-size: cover;
background-position: center;
background-attachment: fixed;
}
header {
height: var(--navbarheight);
}
nav {
float: left;
box-sizing: border-box;
}
nav, .navbutton {
height: 100%;
font-size: 0;
}
.navbutton, nav a {
display: inline-block;
color: var(--txtcolor);
border: none;
border-radius: 0;
background: none;
padding: calc((var(--navbarheight) / 2) - 12px);
}
.navbutton:hover, nav a:hover {
cursor: pointer;
background-color: #ffffff44;
}
nav a {
border-radius: calc(50% * var(--borderrounding));
margin: var(--navbarmargin);
}
nav a img {
filter: drop-shadow(1px 1px 4px black);
}
#apps, .systray {
box-sizing: border-box;
display: inline-block;
overflow: clip;
border-radius: calc((var(--navbarheight) / 2) * var(--borderrounding));
background-color: var(--uicolor);
margin: var(--navbarmargin) 0;
padding: 0 0.5rem;
}
.systray {
color: var(--txtcolor);
float: right;
height: 100%;
margin-right: var(--navbarmargin);
margin-bottom: -1rem;
}
.sysleft {
float: left;
margin-left: var(--navbarmargin);
}
.systray p {
margin: 0;
padding: calc((var(--navbarheight) / 2) - 1.2ch);
}
#settingspanel {
display: none;
position: absolute;
right: var(--navbarmargin);
top: calc((var(--navbarmargin) * 2) + var(--navbarheight));
z-index: 5;
background-color: var(--uicolor);
border-radius: calc((var(--navbarheight) / 2) * var(--borderrounding));
padding: 1rem;
}
#settingsbutton:checked ~ #settingspanel {
display: block;
}
#settingspanel input, #settingspanel button {
border: none;
border-radius: calc(0.9rem * var(--borderrounding));
padding: 0.3rem 0.6rem;
}
#settingspanel td {
padding: 0.3rem;
}
main {
display: flex;
padding: calc(var(--windowgap) / 2);
flex-wrap: wrap;
height: calc(100vh - var(--navbarheight));
box-sizing: border-box;
padding-top: var(--navbarmargin);
}
.window {
margin: calc(var(--windowgap) / 2);
flex-grow: 1;
box-sizing: border-box;
flex: calc((100% / var(--windowcountx)) - var(--windowgap));
border-radius: calc(1.15rem * var(--borderrounding));
overflow: clip;
background-color: var(--uicolor);
z-index: 2;
}
.window iframe {
width: 100%