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%;
height: calc(100% - 2.2rem);
border: none;
}
.windowdecoration {
display: block;
width: 100%;
height: 2.2rem;
}
.closewindow {
display: block;
float: right;
margin: 0.3rem;
height: 1.6rem;
width: 1.6rem;
padding: calc(.8rem - 12px);
border: none;
color: red;
background: none;
border-radius: calc(50% * var(--borderrounding));
z-index: 500000;
}
.closewindow:hover {
cursor: pointer;
color: black;
background-color: red;
}
.CboxOpenBtn img {
opacity: 0;
transition-duration: 0.2s;
}
.CboxOpenBtn:hover img {
opacity: 1;
}

View file

@ -1,78 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>niceopodOS</title>
<link href="desktop.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
<header>
<nav>
<a href="https://deeptwisty.com/"><img src="deeptwisty.png" style="width:24px;height:24px;"/></a>
<div id="apps" class="systray">
<button class="navbutton" onclick="openwindow('about')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 24 24" width="24" fill="currentColor"><path d="M4 0h12a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4zm0 2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H4zm1.229 16H4a2 2 0 0 1-.813-.172 5.58 5.58 0 0 1 3.347-3.758 1 1 0 1 1 .733 1.86A3.579 3.579 0 0 0 5.229 18zm9.512 0a3.658 3.658 0 0 0-2.097-2.066 1 1 0 1 1 .712-1.868 5.659 5.659 0 0 1 3.437 3.77A1.993 1.993 0 0 1 16 18h-1.26zM10 4a4 4 0 0 1 4 4v2a4 4 0 1 1-8 0V8a4 4 0 0 1 4-4zm0 2a2 2 0 0 0-2 2v2a2 2 0 1 0 4 0V8a2 2 0 0 0-2-2z"></path></svg></button>
<button class="navbutton" onclick="openwindow('blog')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-1.5 -1.5 24 24" width="24" fill="currentColor"><path d="M13.89 10.808l3.616-3.616a3 3 0 0 0-4.243-4.242L11.77 4.444l.598 2.23.896-.896a1 1 0 1 1 1.415 1.414L11.66 10.21l2.23.598zm-1.633 1.633l-2.23-.598-2.74 2.74 2.66.169 2.31-2.311zm-2.12-6.364L5.71 10.502l.163 2.665 4.86-4.86-.598-2.23zM5.403 16.466L1.95 19.92a1 1 0 0 1-1.414-1.414l3.45-3.45-.326-5.331 8.19-8.19a5 5 0 1 1 7.07 7.072l-8.198 8.198-5.318-.34z"></path></svg></button>
<button class="navbutton" onclick="openwindow('links')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-3 -3 24 24" width="24" fill="currentColor"><path d="M3.19 9.345a.97.97 0 0 1 1.37 0 .966.966 0 0 1 0 1.367l-2.055 2.052a1.932 1.932 0 0 0 0 2.735 1.94 1.94 0 0 0 2.74 0l4.794-4.787a.966.966 0 0 0 0-1.367.966.966 0 0 1 0-1.368.97.97 0 0 1 1.37 0 2.898 2.898 0 0 1 0 4.103l-4.795 4.787a3.879 3.879 0 0 1-5.48 0 3.864 3.864 0 0 1 0-5.47L3.19 9.344zm11.62-.69a.97.97 0 0 1-1.37 0 .966.966 0 0 1 0-1.367l2.055-2.052a1.932 1.932 0 0 0 0-2.735 1.94 1.94 0 0 0-2.74 0L7.962 7.288a.966.966 0 0 0 0 1.367.966.966 0 0 1 0 1.368.97.97 0 0 1-1.37 0 2.898 2.898 0 0 1 0-4.103l4.795-4.787a3.879 3.879 0 0 1 5.48 0 3.864 3.864 0 0 1 0 5.47L14.81 8.656z"></path></svg></button>
<button class="navbutton" onclick="openwindow('stats')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-5 -4 24 24" width="24" fill="currentColor"><path d="M1 0a1 1 0 0 1 1 1v14a1 1 0 0 1-2 0V1a1 1 0 0 1 1-1zm12 4a1 1 0 0 1 1 1v10a1 1 0 0 1-2 0V5a1 1 0 0 1 1-1zM7 8a1 1 0 0 1 1 1v6a1 1 0 0 1-2 0V9a1 1 0 0 1 1-1z"></path></svg></button>
<button class="navbutton" onclick="openwindow('stuff')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -4 24 24" width="24" fill="currentColor"><path d="M10.83 2H17a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h5c1.306 0 2.417.835 2.83 2zM17 4H9.415l-.471-1.334A1.001 1.001 0 0 0 8 2H3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1z"></path><path d="M1 5h18v2H1z"></path></svg></button>
<button class="navbutton" onclick="openwindow('more')"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-9 -2 24 24" width="24" fill="currentColor"><path d="M3 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 2a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 14a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0-5a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"></path></svg></button>
</div>
</nav>
<div class="systray"><p>niceopodOS alpha v1.0</p></div>
<div class="systray"><p id="date"><script type="text/javascript">const d = new Date; document.write(`${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`);</script></p></div>
<div class="systray" style="padding: 0;">
<input id="settingsbutton" type="checkbox" style="display: none;">
<label for="settingsbutton" class="navbutton"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 24 24" width="24" fill="currentColor"><path d="M20 8.163A2.106 2.106 0 0 0 18.926 10c0 .789.433 1.476 1.074 1.837l-.717 2.406a2.105 2.105 0 0 0-2.218 3.058l-2.062 1.602A2.104 2.104 0 0 0 11.633 20l-3.29-.008a2.104 2.104 0 0 0-3.362-1.094l-2.06-1.615A2.105 2.105 0 0 0 .715 14.24L0 11.825A2.106 2.106 0 0 0 1.051 10C1.051 9.22.63 8.54 0 8.175L.715 5.76a2.105 2.105 0 0 0 2.207-3.043L4.98 1.102A2.104 2.104 0 0 0 8.342.008L11.634 0a2.104 2.104 0 0 0 3.37 1.097l2.06 1.603a2.105 2.105 0 0 0 2.218 3.058L20 8.162zM14.823 3.68c0-.063.002-.125.005-.188l-.08-.062a4.103 4.103 0 0 1-4.308-1.428l-.904.002a4.1 4.1 0 0 1-4.29 1.43l-.095.076A4.108 4.108 0 0 1 2.279 7.6a4.1 4.1 0 0 1 .772 2.399c0 .882-.28 1.715-.772 2.4a4.108 4.108 0 0 1 2.872 4.09l.096.075a4.104 4.104 0 0 1 4.289 1.43l.904.002a4.1 4.1 0 0 1 4.307-1.428l.08-.062A4.108 4.108 0 0 1 17.7 12.4a4.102 4.102 0 0 1-.773-2.4c0-.882.281-1.716.773-2.4a4.108 4.108 0 0 1-2.876-3.919zM10 14a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-2a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"></path></svg></label>
<div id="settingspanel">
<table>
<thead>
<tr><td colspan="2" style="text-align: center;">Settings</td></tr>
</thead>
<tbody>
<tr>
<td><label for="bginput">Wallpaper</label></td>
<td><input placeholder="Image URL" value="https://i.redd.it/abhfagc5t4591.jpg" id="bginput"></td>
</tr>
<tr>
<td><label for="bcinput">Text Color</label></td>
<td><input placeholder="Hex Code" value="#ffffff" id="tcinput"></td>
</tr>
<tr>
<td><label for="bcinput">UI Color</label></td>
<td><input placeholder="Hex Code" value="#000000bf" id="bcinput"></td>
</tr>
<tr>
<td><label for="brinput">Rounding</label></td>
<td><input type="number" step="0.05" min="0" max="1" placeholder="Value from 0-1" value="1" id="brinput"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><script type="text/javascript">
function update() {
changeRootVar('bgimage', `url(${document.getElementById('bginput').value})`);
changeRootVar('txtcolor', `#${document.getElementById('tcinput').value.replace('#', '')}`);
changeRootVar('uicolor', `#${document.getElementById('bcinput').value.replace('#', '')}`);
changeRootVar('borderrounding', document.getElementById('brinput').value);
}
window.onload = function() { update(); };
</script>
<button onclick="update();">Apply</button></td>
</tr>
</tbody>
</table>
</div>
</div>
</header>
<main id="desktop">
<noscript><div class="window" style="display: flex; justify-content: center; align-items: center; flex-direction: column; background-color: #00000077; color: whitesmoke;"><h1>Shockingly, this page doesn't work without Javascript.</h1><h3 style="margin-top: 0">Sorry about that.</h3><p>You can view a normal homepage without all the flashy interactive junk <a href="index.html">here</a>.</p></div></noscript>
</main>
<!--img src="images/isopod_with_aviators.png" style="z-index: 1; position: absolute; right: 22%; top: 59%; width: 6rem; transform: rotate(-20deg);" />
<a target="_blank" href="https://wobble.town/visit/93" style="z-index: 1; position:absolute; top: 63%; right: 19%; font-size: 0;" title="charles"><img src="https://wobble.town/visit/93/wobble.gif" style="width: 48px; image-rendering: pixelated; filter:hue-rotate(20deg) brightness(110%) drop-shadow(1px 1px 0 #00000088);"></a-->
<script src="desktop.js"></script>
<script type="text/javascript">
window['CboxReady'] = function (Cbox) {
Cbox('button', '3-3517193-ZPAfDN');
}
</script>
<script src="https://static.cbox.ws/embed/2.js" async></script>
</body>
</html>

View file

@ -1,36 +0,0 @@
let activeWindowCount = 0;
const desktop = document.getElementById('desktop');
function changeRootVar(name, value) {
document.documentElement.style.setProperty(`--${name}`, value);
}
function updateWindowCountX() {
if(activeWindowCount <= 4) {
document.documentElement.style.setProperty('--windowcountx', '2');
} else if(activeWindowCount <= 9) {
document.documentElement.style.setProperty('--windowcountx', '3');
} else {
document.documentElement.style.setProperty('--windowcountx', '4');
}
}
function openwindow(name) {
if(activeWindowCount < 9) {
let newWindow = document.createElement('div');
newWindow.innerHTML = '<div class="windowdecoration"><button class="closewindow" onclick="closewindow(this)"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-6 -6 24 24" width="24" fill="currentColor"><path d="M7.314 5.9l3.535-3.536A1 1 0 1 0 9.435.95L5.899 4.485 2.364.95A1 1 0 1 0 .95 2.364l3.535 3.535L.95 9.435a1 1 0 1 0 1.414 1.414l3.535-3.535 3.536 3.535a1 1 0 1 0 1.414-1.414L7.314 5.899z"></path></svg></button></div>'
let newWindowContent = document.createElement('iframe');
newWindow.className = 'window';
newWindowContent.src = `${name}/`;
newWindow.appendChild(newWindowContent);
desktop.appendChild(newWindow);
activeWindowCount = activeWindowCount + 1;
//updateWindowCountX();
}
}
function closewindow(window) {
window.parentElement.parentElement.remove();
activeWindowCount = activeWindowCount - 1;
//updateWindowCountX();
}

View file

@ -1,8 +0,0 @@
body {
background: none;
padding: 0;
margin: 0;
}
img {
max-width: 100%;
}

View file

@ -1,398 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Changelog</title>
<link href="../style.css" rel="stylesheet" type="text/css" media="all">
<link href="../embedded.css" rel="stylesheet" type="text/css" media="all">
<style type="text/css">
body {
color: unset;
text-shadow: unset;
}
h2:first-of-type {
margin-top: 0;
}
h2 {
font-size: medium;
}
h1 {
display: none;
}
</style>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
</head>
<body style="background: none;">
<h1>isopod.cool changelog</h1>
<article>
<h2>2023-02-09</h2>
<ul>
<li>Deprecated this changelog in favor of an rss-bridge feed of git commits to the website, because it's easier and I'm lazy</li>
</ul>
</article>
<article>
<h2>2023-02-08</h2>
<ul>
<li>Added my Matrix account to the links page</li>
</ul>
</article>
<article>
<h2>2023-02-03</h2>
<ul>
<li>Added <a target="_blank" href="https://vincentsdungeon.com/links.html">Vincent's Dungeon/links</a> to the links page</li>
</ul>
</article>
<article>
<h2>2023-1-12</h2>
<ul>
<li>New <a target="_blank" href="../blog/posts/guide_things_i_keep_having_to_google">blog post</a>!
<ul><li>This one's more of a reference than an article, so it will likely be updated as time goes on.</li></ul>
</li>
<li>Added flatworm friday</li>
</ul>
</article>
<article>
<h2>2023-1-05</h2>
<ul>
<li>Renamed the site from "niceopod" to just "isopod.cool"</li>
<li>widened everything slightly to accommodate the longer title</li>
</ul>
</article>
<article>
<h2>2023-1-04</h2>
<ul>
<li>Added <a target="_blank" href="quotes/">/etc/quotes/</a></li>
</ul>
</article>
<article>
<h2>2022-12-16</h2>
<ul>
<li>Renamed /more/ to /etc/</li>
</ul>
</article>
<article>
<h2>2022-12-15</h2>
<ul>
<li>Created an <a target="_blank" href="../stuff/firefoxrss/feed.php">RSS bridge</a> for Firefox release notes</li>
<li>Also I rearranged <a target="_blank" href="../stuff/">/stuff/</a> a bit and created an RSS filter script there. I guess I forgot to mention that</li>
<li>Added <a target="_blank" href="https://wearemagonia.bandcamp.com/album/triangle-unicode-lp">We Are Magonia - Triangle Unicode</a> to the music page</li>
</ul>
</article>
<article>
<h2>2022-12-08</h2>
<ul>
<li>Added <a target="_blank" href="https://hypem.com/merch-table">Hype Machine Merch Table</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-12-04</h2>
<ul>
<li>Added <a target="_blank" href="https://github.com/awesome-selfhosted/awesome-selfhosted">Awesome Selfhosted</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-11-27</h2>
<ul>
<li>Added an RSS feed for the <a target="_blank" href="../guestbook">guestbook</a></li>
<li>Added <a target="_blank" href="https://jort.link/">jort.link</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-11-25</h2>
<ul>
<li>Added a list of services I host to <a target="_blank" href="../stuff">/stuff</a></li>
</ul>
</article>
<article>
<h2>2022-11-11</h2>
<ul>
<li>Added <a target="_blank" href="https://trilobites.info/">trilobites.info</a>, <a target="_blank" href="https://based.cooking/">based.cooking</a>, <a target="_blank" href="https://landchad.net/">LandChad.net</a>, and <a target="_blank" href="https://invidious.io/">Invidious</a> to the links page</li>
<li>Organized the links page somewhat</li>
</ul>
</article>
<article>
<h2>2022-11-06</h2>
<ul>
<li>Added <a target="_blank" href="https://alula.github.io/SpaceCadetPinball">Space Cadet Pinball</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-10-27</h2>
<ul>
<li>Added a bunch of cool automated Halloween stuff</li>
</ul>
</article>
<article>
<h2>2022-10-18</h2>
<ul>
<li>Added <a target="_blank" href="https://www.darkpattern.games/">Dark Pattern Games</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-10-15</h2>
<ul>
<li>Added bot protection to the guestbook</li>
</ul>
</article>
<article>
<h2>2022-10-01</h2>
<ul>
<li>Added a server-side rendered navbar to all the pages</li>
</ul>
</article>
<article>
<h2>2022-09-29</h2>
<ul>
<li>Added some buttons</li>
</ul>
</article>
<article>
<h2>2022-09-20</h2>
<ul>
<li>Added <a target="_blank" href="https://heavenpierceher.bandcamp.com/album/ultrakill-imperfect-hatred">Heaven Pierce Her - ULTRAKILL: Imperfect Hatred</a> to the music page</li>
<li>Updated the layout on said music page to have two items per row instead of one</li>
</ul>
</article>
<article>
<h2>2022-09-19</h2>
<ul>
<li>New <a target="_blank" href="../blog/posts/deeptwistycom_2nd_anniversary_-_a_history_of_this_bullshit/">blog post</a>!</li>
</ul>
</article>
<article>
<h2>2022-09-07</h2>
<ul>
<li>Added <a target="_blank" href="https://github.com/viraptor/reverse-interview">Reverse Interview</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-09-04</h2>
<ul>
<li>Added <a target="_blank" href="https://newretrowave.bandcamp.com/album/synthicate">LAZERPUNK - Synthicate</a> to the music page</li>
</ul>
</article>
<article>
<h2>2022-08-31</h2>
<ul>
<li>Removed the Cbox widget from most pages, as it was really only intended as an interim replacement for my old freegb guestbook anyway</li>
</ul>
</article>
<article>
<h2>2022-08-27</h2>
<ul>
<li>Added a <a target="_blank" href="../guestbook/">guestbook</a>!</li>
</ul>
</article>
<article>
<h2>2022-08-25</h2>
<ul>
<li>New <a target="_blank" href="../blog/posts/guide_self_host_safely_with_wireguard/">blog post</a>! It's a guide on configuring WireGuard to do port forwarding through a VPN.</li>
</ul>
</article>
<article>
<h2>2022-08-18</h2>
<ul>
<li>Changed the background of the links page</li>
<li>All me.deeptwisty.com URLs now return a 301 redirect to the corresponding location on isopod.cool</li>
</ul>
</article>
<article>
<h2>2022-08-10</h2>
<ul>
<li>Made elements with hover-text display a special cursor when hovered over, so you know to wait for it to appear.</li>
<li>Added a webgarden and a <a target="_blank" href="greenhouse/">greenhouse page</a>!</li>
<li>Updated the <a target="_blank" href="../about/uses/">uses</a> page to include the VPS this site is hosted on.</li>
</ul>
</article>
<article>
<h2>2022-08-08</h2>
<ul>
<li>Updated some configurations server-side to reduce bandwidth consumption</li>
<li>Added <a target="_blank" href="../images/plant1-2.png">this thing</a> from <a target="_blank" href="https://lu.tiny-universes.net/webgarden/adopt.html">here</a>!</li>
<li>Added <a target="_blank" href="https://newlambda.neocities.org/stuff/adopt.html">benlet</a>.</li>
</ul>
</article>
<article>
<h2>2022-08-07</h2>
<ul>
<li>Added a couple buttons</li>
</ul>
</article>
<article>
<h2>2022-08-01</h2>
<ul>
<li>Moved the status.cafe widget on my blog page server-side</li>
<li>Added a couple buttons to the links page, also removed my Twitter and Neocities.</li>
</ul>
</article>
<article>
<h2>2022-07-30</h2>
<ul>
<li>Rewrote the random caption function on the landing page in PHP</li>
</ul>
</article>
<article>
<h2>2022-07-29</h2>
<ul>
<li>Moved the site to a VPS and moved domains from me.deeptwisty.com to isopod.cool (me.deeptwisty.com still works though)</li>
</ul>
</article>
<article>
<h2>2022-07-25</h2>
<ul>
<li>Added <a target="_blank" href="https://jsrn.net/howoldisit/">How old is it?</a> to the links page</li>
<li>Added <a target="_blank" href="https://8mb.video/">8mbvideo</a> to the links page</li>
<li>Moved /about/software to <a target="_blank" href="../about/uses/">/about/uses</a> and added info about my hardware setup to it</li>
<li>Added a button</li>
</ul>
</article>
<article>
<h2>2022-07-23</h2>
<ul>
<li>Added <a target="_blank" href="https://12ft.io/">12ft.io</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-07-21</h2>
<ul>
<li>Added <a target="_blank" href="../images/isopod3.png">this little guy</a> from <a target="_blank" href="https://dokodemo.neocities.org/adopt.html">here</a>!</li>
</ul>
</article>
<article>
<h2>2022-07-20</h2>
<ul>
<li>Added some buttons</li>
</ul>
</article>
<article>
<h2>2022-07-19</h2>
<ul>
<li>Added a <a target="_parent" href="../about/software/">page</a> for programs I use!</li>
<li>Added <a target="_blank" href="https://www.youtube-nocookie.com/embed/bjbN2RyZXHI">Matt Gray - The Last Ninja 2 (C64) OST</a> to the music page.</li>
</ul>
</article>
<article>
<h2>2022-07-16</h2>
<ul>
<li>Re-formatted the changelog to be a valid HTML Journal, you know, in case you want to <a target="_blank" href="https://journal.miso.town/atom?url=https://isopod.cool/etc/changelog.php">subscribe</a> to it. For some reason.</li>
</ul>
</article>
<article>
<h2>2022-07-15</h2>
<ul>
<li>Updated every page to have &lt;html lang="en"&gt; instead of &lt;html&gt; or &lt;html lang=""&gt;</li>
</ul>
</article>
<article>
<h2>2022-07-14</h2>
<ul>
<li>The changelog is now its own page for easier portability between revisions, embedded here in an iframe.</li>
<li>...as is the to-do list.</li>
<li>Added an <a target="_blank" href="https://journal.miso.town/">HTML Journal</a> to the blog page for shorter entries that I don't feel warrant an entire page.</li>
<li>Updated the blog post list to be compliant with m15o's <a target="_blank" href="https://blog.miso.town/">HTML Blog</a> spec, mostly to automate feed generation.</li>
<li>The old RSS feed for the blog is now deprecated and will no longer be updated.</li>
</ul>
</article>
<article>
<h2>2022-07-04</h2>
<ul>
<li>Added <a target="_blank" href="buttons/getvlcnow.png">VLC button</a> to this page</li>
</ul>
</article>
<article>
<h2>2022-07-01</h2>
<ul>
<li>Added a to-do list for the site to this page</li>
</ul>
</article>
<article>
<h2>2022-06-30</h2>
<ul>
<li>Added <a target="_blank" href="https://www.inaturalist.org/">iNaturalist</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-06-25</h2>
<ul>
<li>Added a little popup to the homepage and /stuff that bugs you to switch to firefox if you're not using it. Please for the love of GOD use firefox.</li>
<li>Added a new <a target="_blank" href="buttons/niceopod_button_2.png">button</a> for my site!</li>
</ul>
</article>
<article>
<h2>2022-06-24</h2>
<ul>
<li>Renamed /misc to /more</li>
</ul>
</article>
<article>
<h2>2022-06-20</h2>
<ul>
<li>Added <a target="_blank" href="https://imgflip-is-dead.crabdance.com/">Imgflip is DEAD</a> to the links page
</li>
</ul>
</article>
<article>
<h2>2022-06-18</h2>
<ul>
<li>Added my buttons to this page (please don't hotlink!)</li>
</ul>
</article>
<article>
<h2>2022-06-17</h2>
<ul>
<li>Added <a target="_blank" href="https://www.1001freefonts.com/snailets.font">Snailets</a> to the links page
</li>
</ul>
</article>
<article>
<h2>2022-06-14</h2>
<ul>
<li>Redesigned the website again! It works when you disable Javascript now!</li>
</ul>
</article>
<article>
<h2>2022-06-12</h2>
<ul>
<li>Renamed /misc to /stuff</li>
<li>Added my address to the stats page</li>
</ul>
</article>
<article>
<h2>2022-05-29</h2>
<ul>
<li>Added <a target="_blank" href="https://regexr.com/">RegExr</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-05-25</h2>
<ul>
<li>Added an <a target="_blank" href="https://isopod.cool/feed.xml" target="_blank">RSS feed</a> for the blog!</li>
<li>Demoted the link to isopod.cool v1 from having its own section on the homepage to being relegated to /misc/</li>
</ul>
</article>
<article>
<h2>2022-05-23</h2>
<ul>
<li>Added <a target="_blank" href="https://switching.software/">switching.software</a> and <a target="_blank" href="https://www.allaboutbirds.org/cams/">Cornell Lab Bird Cams</a> to the links page</li>
</ul>
</article>
<article>
<h2>2022-05-22</h2>
<ul>
<li>Added <a target="_blank" href="https://status.cafe/users/niceopod">status.cafe</a> widget to the home and blog pages</li>
<li>Added a changelog</li>
</ul>
</article>
<article>
<h2>2022-05-21</h2>
<ul>
<li>Added <a target="_blank" href="../stats">stats table</a> page</li>
<li>Added a cbox channel </li>
<li>New blog post!</li>
</ul>
</article>
</body>
</html>

View file

@ -39,8 +39,10 @@
<p><a href="../old/1/">v1</a> - Old, slow, basically just a carrd page on steroids. Made heavy use of <code>float</code> initially. Ugh.</p>
<p><a href="../old/2/">v2</a> - Slick as hell but entirely Javascript-dependent. This is where my webpage became a website.</p>
<h2>Quiz results</h2>
<a href="https://casiopea.neocities.org/isopod/isopodquiz.html"><img src="images/isopod_quiz_result.png"></a>
<a href="https://ouroboreas.neocities.org/quizzes/crackships/quiz"><img src="images/crackship_quiz_result.png" height="100px"></a>
<div>
<a href="https://casiopea.neocities.org/isopod/isopodquiz.html"><img src="images/isopod_quiz_result.png"></a>
<a href="https://ouroboreas.neocities.org/quizzes/crackships/quiz"><img src="images/crackship_quiz_result.png" height="100px"></a>
</div>
<h2>Buttons</h2>
<div class="buttons">
<a target="_blank" href="https://easyussr.neocities.org/torrenting.html"><img src="buttons/piracy.gif" alt="Piracy Now!"></a>
@ -87,16 +89,7 @@
<img src="buttons/niceopod_button.png" alt="niceopod"-->
<a target="_blank" href="https://deeptwisty.com/"><img src="buttons/deeptwisty_button.png" alt="deep twisty"></a>
</div>
<h2>TODO</h2>
<ul>
<li>Add a changelog to this page by parsing the atom feed</li>
<li>Make a cool 404 page</li> <!-- Line Item -->
<li>Add my CD collection to the music page</li>
<li>Make a page for games I like</li>
<li>Write another blog post</li>
<li>Update privacy policy</li>
</ul>
<div id="leftsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;"></div>
<div id="leftsidebg" style="background-image: url(bg.jxl), url(bg.jpg);"></div>
</body>

View file

@ -10,10 +10,10 @@ error_reporting(E_ALL);
<title>#quotes</title>
<link href="../../style.css" rel="stylesheet" type="text/css" media="all">
<style type="text/css">
body {
background-color: #36393f;
color: #d7d5d9;
font-family: sans-serif;
:root {
--bgcolor: #313338;
--fontcolor: #d7d5d9;
--stdfont: sans-serif;
}
a {
color: #1c9cee;
@ -26,6 +26,7 @@ error_reporting(E_ALL);
.pfp {
border-radius: 50%;
height: 3rem;
box-shadow: none;
}
.message {
display: flex;
@ -39,6 +40,10 @@ error_reporting(E_ALL);
margin: auto;
border-top: 1px solid #42464d;
}
h4 {
padding-left: initial;
border-left: none;
}
</style>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
</head>
@ -57,13 +62,13 @@ error_reporting(E_ALL);
$this->color = $c;
}
}
$will = new User("w_pfp", "President of the Universe", "00ffb7");
$vivi = new User("v_pfp", "quote unquote \"mouth frog\"", "ff009e");
$sad = new User("s_pfp", "first spider of the universe ඞ", "f1c40f");
$mage = new User("m_pfp", "> ඞ", "faaaaa");
$will = new User("w_pfp", "President Glup Shitto", "00ffb7");
$vivi = new User("v_pfp", "vivi_", "ff009e");
$sad = new User("s_pfp", "first Mithrun of the universe ඞ", "f1c40f");
$mage = new User("m_pfp", "beatboxing puppy fan", "faaaaa");
$celian = new User("c_pfp", "ᘛ⁐̤ᕐᐷ𝕤𝕝𝕦𝕥ಡඞ𐐘𐑀", "73fbff");
$thom = new User("t_pfp", "Tomato ඞ", "567c2d");
$goon = new User("g_pfp", "hatchgoon", "2c9c91");
$goon = new User("g_pfp", "horny (short for hornworm)", "2c9c91");
$portals = new User("p_pfp", "portalsandart ඞ", "5a397d");
$joy = new User("j_pfp", "JoyTheBoi ඞ", "a2ff00");
function echo_message($person, $message, $first_in_exchange = false) {
@ -77,6 +82,18 @@ error_reporting(E_ALL);
}
?>
<?php
echo_message($mage, "explodes and dies and gets it all over you", true);
echo_message($vivi, "dont compare yourself to jesus just because you thought of making a number a tumblr sexyman", true);
echo_message($vivi, "that would be skibidiphobic", true);
echo_message($mage, "Why did he turn into a card this is some objectum tf shit", true);
echo_message($vivi, "It's almost like he's transgender");
echo_message($celian, "I hate weezer and their child<br>fortunately I have killed weezer", true);
echo_message($will, "furries can be trusted to decide who should live and who should die", true);
echo_message($celian, "I'm a slut for polls", true);
echo_message($celian, "i dont like homosexuality", true);
echo_message($vivi, "internalized frog-phobia", true);
echo_message($mage, "I think it's fucked up you can't just kill people", true);
echo_message($mage, "babygirl you piss so bad what the fuck", true);
echo_message($joy, "There's something about digitally altered screams of anguish that really stick in my mind", true);
echo_message($mage, "I would change it to daddy's little slut or something. To inflict maximum damage. But rat slut amongus family is good...", true);
echo_message($celian, "I think you just hate my water-soluble swag", true);

View file

@ -181,8 +181,8 @@
<?php if($return == "botcheckfailed") { echo "<td></td><td><span class='error'>You failed the bot check!</span></td>"; } ?>
<tr>
<td>Bot test (type <u>isopod</u>)<span style="color:red;">*</span></td>
<td><input type="text" name="botcheck"></td>
<td>Bot test (six-letter scientific term for a roly-poly or woodlouse)<span style="color:red;">*</span></td>
<td><input type="text" name="botcheck" placeholder="*.cool"></td>
</tr>
<?php if($return == "success") { echo "<td></td><td><span class='success'>Successfully posted!</span></td>"; } ?>

136
index.php
View file

@ -9,6 +9,28 @@
margin-top: 0;
margin-bottom: 0;
}
main {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
main > :is(div, nav) {
width: 100%;
}
#webrings > div {
margin: var(--stdpadding);
}
#webrings div :is(a, span) {
padding: initial;
margin: initial;
background: none;
border-left: none;
}
#guys {
position: fixed;
bottom: 0;
@ -16,7 +38,7 @@
font-size: 0;
}
#guys > * {
margin-right: 0.5rem;
margin-right: var(--stdpadding);
}
#bubblecolumn {
position: absolute;
@ -27,27 +49,6 @@
background-image: url(images/bubblecolumn1.gif);
background-repeat: repeat-y;
}
main {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
#webrings {
display: grid;
grid-template-columns: auto auto;
gap: 1rem;
}
#webrings > div {
display: flex;
align-items: center;
justify-content: center;
}
#webrings > div > * {
margin: 0 1rem;
white-space: nowrap;
}
#bucketfish, .bflink {
--red: #ffcaca;
--orange: #ffedc1;
@ -89,11 +90,6 @@
position: relative;
}
#v3 {
font-size: .5em;
vertical-align: super;
white-space: nowrap;
}
@media (prefers-reduced-motion) {
#bubblecolumn {
display: none;
@ -106,16 +102,19 @@
#rightsidebg {
box-shadow: none;
}
@media (max-width: 43rem) {
h1 {
font-size: 13.5vw;
}
h1 + h2#caption {
font-size: 1.1em;
}
#webrings {
grid-template-columns: auto;
}
main {
justify-content: initial;
height: initial;
}
#guys {
position: initial;
bottom: initial;
left: initial;
}
body {
display: flex;
flex-direction: column;
justify-content: space-between;
}
}
@ -142,7 +141,19 @@
if(!preg_match('/(headless.*)/i', $_SERVER['HTTP_USER_AGENT'])) {
$captions = array();
$seasonal = false;
switch(date('m')) {
switch(date('m')) {
case 6:
$captions = array(
'your gay',
'the fuck is a gender',
'trnasgener',
'This site uses $_GAY_COOKIE_EQUIVALENT',
'Supports LGBT!',
'Banned in Florida!',
'Are you cis or are you normal'
);
$seasonal = true;
break;
case 10:
$captions = array(
'Boo!',
@ -180,7 +191,8 @@
'MySite.html',
'Over Construction',
'Real isopod hours',
'Version 3.0: the Not-Reliant-On-Javascript Update',
'Version 3.1: The Accent Borders Update',
'Version 3.1: The Tables Don\'t Look Like Shit Anymore Update',
'depytwisty',
'[object Object]',
'* You found the [Moss]!',
@ -216,7 +228,6 @@
'cringe',
'don\'t smoke cigarettes kids they\'ll make your lungs sus',
'real life isopod',
'',
'holy fucking bingle',
'AI (Aquatic Isopod) generated',
'crubge',
@ -230,8 +241,9 @@
'Delicious!',
'trnasgener',
'Opinionated!',
'vewified',
'Verified',
'Eurorack compatible!',
'Hackable!',
'HiDPI!',
'COUNTER',
'TUEADAY',
'PLACEHIM',
@ -273,12 +285,6 @@
$tit = "certified Good Website by blåhaj";
echo "<style type='text/css'>#blahaj { animation: spin 5s linear infinite; height: 1em; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @media (prefers-reduced-motion) { #blahaj { animation: none; } }</style>";
break;
case 'Verified':
$cap = '<img src="https://social.isopod.cool/emoji/isomojis/verified.png" style="height: 1em;"/>';
break;
case 'vewified':
$cap = '<img src="https://social.isopod.cool/emoji/isomojis/vewified.png" style="height: 1em;"/>';
break;
case 'Kind of dragon free!':
$cap = '<span class="minecraftsplash">Kind of dragon free!</span>';
break;
@ -309,25 +315,25 @@
<?php include('nav.php'); ?>
<main>
<div>
<h1 style="margin-top: 0;">isopod.cool<span id="v3">v3</span></h1>
<h1 style="margin-top: 0;">isopod dot cool<sup>v3.1</sup></h1>
<h2 id="caption"><?php echo $cap; ?></h2>
<nav id="webrings">
<div style="font-family: sans-serif; font-weight: bold;">
<a href="https://hotlinewebring.club/bathynomus/previous" style="color: white; text-decoration: none;"></a>
<i><a href="https://hotlinewebring.club/" style="color: white; text-decoration: none;">HOTLINE WEBRING</a></i>
<a href="https://hotlinewebring.club/bathynomus/next" style="color: white; text-decoration: none;"></a>
</div>
<div>
<a href="https://melonland.net/surf-club.html" style="color: #ff74ff;"><span style="color: #e7ad59;">melon</span><span style="color: #c0ea32;">ring</span></a>
<a href="https://brain.melonking.net/surf-club-random" style="color: #ff74ff;"><span style="color: #864cff;">?</span></a>
</div>
<div>
<a href="https://webring.bucketfish.me/redirect.html?to=prev&name=isopod" class="bflink"></a>
<a href="https://webring.bucketfish.me" id="bucketfish"><span style="--n:-10000ms;">b</span><span style="--n:-9900ms;">u</span><span style="--n:-9800ms;">c</span><span style="--n:-9700ms;">k</span><span style="--n:-9600ms;">e</span><span style="--n:-9500ms;">t</span><span style="--n:-9400ms;"> </span><span style="--n:-9300ms;">w</span><span style="--n:-9200ms;">e</span><span style="--n:-9100ms;">b</span><span style="--n:-9000ms;">r</span><span style="--n:-8900ms;">i</span><span style="--n:-8800ms;">n</span><span style="--n:-8700ms;">g</span></a>
<a href="https://webring.bucketfish.me/redirect.html?to=next&name=isopod" class="bflink"></a>
</div>
</nav>
</div>
<nav id="webrings">
<div style="font-family: sans-serif; font-weight: bold;">
<a href="https://hotlinewebring.club/bathynomus/previous" style="color: white; text-decoration: none;"></a>
<a href="https://hotlinewebring.club/" style="color: white; text-decoration: none; font-style: italic;">HOTLINE WEBRING</a>
<a href="https://hotlinewebring.club/bathynomus/next" style="color: white; text-decoration: none;"></a>
</div>
<div>
<a href="https://melonland.net/surf-club.html" style="color: #ff74ff;"><span style="color: #e7ad59;">melon</span><span style="color: #c0ea32;">ring</span></a>
<a href="https://brain.melonking.net/surf-club-random" style="color: #ff74ff;"><span style="color: #864cff;">?</span></a>
</div>
<div>
<a href="https://webring.bucketfish.me/redirect.html?to=prev&name=isopod" class="bflink"></a>
<a href="https://webring.bucketfish.me" id="bucketfish"><span style="--n:-10000ms;">b</span><span style="--n:-9900ms;">u</span><span style="--n:-9800ms;">c</span><span style="--n:-9700ms;">k</span><span style="--n:-9600ms;">e</span><span style="--n:-9500ms;">t</span><span style="--n:-9400ms;"> </span><span style="--n:-9300ms;">w</span><span style="--n:-9200ms;">e</span><span style="--n:-9100ms;">b</span><span style="--n:-9000ms;">r</span><span style="--n:-8900ms;">i</span><span style="--n:-8800ms;">n</span><span style="--n:-8700ms;">g</span></a>
<a href="https://webring.bucketfish.me/redirect.html?to=next&name=isopod" class="bflink"></a>
</div>
</nav>
<!--script type="text/javascript">document.write('<a href="desktop.html">$login<span class="blinking" >_</span></a>');</script-->
</main>

View file

@ -5,46 +5,14 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Links</title>
<link href="../style.css" rel="stylesheet" type="text/css" media="all">
<style>
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 1rem;
}
table td {
padding: 0.25rem;
}
table h2, table h3 {
margin: 0.5rem 0;
}
table td:first-child {
padding-right: 1rem;
}
#statstable tr:nth-child(2n+1) {
background-color: #ffffff11;
}
@media only screen and (hover: none) {
td:nth-child(2) {
margin-bottom: 1rem;
}
table {
margin-top: 0 !important;
}
}
</style>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>outbound links</h1>
<h2 id="caption">the sequel to google (under construction)</h2>
<h2>Neighbours</h2>
<table>
<tr>
<td colspan="2">
<h2>Neighbours</h2>
</td>
</tr>
<tr>
<td colspan="2">
<div class="buttons">
@ -62,9 +30,9 @@
</div>
</td>
</tr>
<tr>
<td colspan="2"><h2>Utility</h2></td>
</tr>
</table>
<h2>Utility</h2>
<table>
<tr>
<td><a href="https://easyussr.neocities.org/torrenting.html">Easy USSR</a></td>
<td>A comprehensive beginner's guide to <span class="serif">Legally Acquiring Media</span></td>
@ -248,13 +216,17 @@
<td><a href="https://www.unconsentingmedia.org/">Unconsenting Media</a></td>
<td>Similar to doesthedogdie but for sexual violence in particular</td>
</tr>
<tr>
<td><a href="https://caniplaythat.com/">Can I Play That?</a></td>
<td>An accessibility-focused videogame review site</td>
</tr>
<tr>
<td><a href="https://spyware.neocities.org/">Spyware Watchdog</a></td>
<td>An index of popular programs that meet an un-eroded definition of "spyware".</td>
</tr>
<tr>
<td colspan="2"><h2>Fun</h2></td>
</tr>
</table>
<h2>Fun</h2>
<table>
<tr>
<td><a href="https://emoji.supply/kitchen/">Emoji Kitchen</a></td>
<td>A litany of different emoji fusions. Some of my favourites are <img src="media/scorpionshark.png" style="height: 2rem;" />, <img src="media/bacteriabird.png" style="height: 2rem;" />, and <img src="media/caution.png" style="height: 2rem;" /></td>
@ -331,15 +303,18 @@
<td><a href="https://xkcd.com/">XKCD</a></td>
<td>A webcomic of romance, sarcasm, math, and language.</td>
</tr>
<tr>
<td colspan="2"><h2>Articles</h2></td>
</tr>
</table>
<h2>Articles</h2>
<table>
<tr>
<td colspan="2"><a href="https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys">Cory Doctorow - Tiktok's enshittification</a></td>
</tr>
<tr>
<td colspan="2"><a href="https://kalechips.net/posts/2022-09-09-Mobile-Compatibility">Kalechips - Your website needs to work on phones</a></td>
</tr>
<tr>
<td colspan="2"><a href="https://axbom.com/the-creepy-sound-of-online-trackers/">Axbom - The Creepy Sound of Online Trackers</a></td>
</tr>
<tr>
<td colspan="2"><a href="https://www.youtube.com/watch?v=5pYeoZaoWrA">Folding Ideas - This is Financial Advice ()</a></td>
</tr>
@ -347,8 +322,11 @@
<td colspan="2"><a href="https://www.youtube.com/watch?v=8BIcAZxFfrc">hbomberguy - Vaccines and Autism: A Measured Response ()</a></td>
</tr>
<tr>
<td colspan="2"><h2>More stuff</h2></td>
<td colspan="2"><a href="https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes/">Seirdy - A look at search engines with their own indexes</a></td>
</tr>
</table>
<h2>More Stuff</h2>
<table>
<tr>
<td><a href="https://web.archive.org/web/20230817122434/https://links.yesterweb.org/">Yesterlinks</a></td>
<td>A user-curated directory of nearly 600 off-the-beaten-path websites, formerly hosted by the Yesterweb project.</td>
@ -371,6 +349,6 @@
<div style="text-align:right">
<a style="text-decoration: none;" href="https://cd5k.net/tau/">&tau;</a>
</div>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;" title="Pictured: My internet connection"></div>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg);" title="Pictured: My internet connection"></div>
</body>
</html>

View file

@ -90,7 +90,7 @@
<a style="--img: url(covers/the_last_ninja_2_c64_ost.jpg);" target="_blank" href="https://www.youtube-nocookie.com/embed/bjbN2RyZXHI" ><span>Matt Gray - The Last Ninja 2 (C64) OST</span></a>
<a style="--img: url(covers/aeon_core.jpg);" target="_blank" href="https://perctrax.bandcamp.com/album/aeon-core" ><span>Scalameriya - Aeon Core</span></a>
</div>
<div id="leftsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;" title="Fun fact: I own music on vinyl but not a record player!"></div>
<div id="leftsidebg" style="background-image: url(bg.jxl), url(bg.jpg); --distancefromcenter: -10%;"></div>
<br>
</body>

12
nav.php
View file

@ -5,28 +5,24 @@ $host = $_SERVER['HTTP_HOST'];
function echolink($url, $name) {
global $host;
if("/$url/" != $_SERVER['REQUEST_URI']) {
echo "<a href='https://$host/$url/'>$name</a>";
echo "<a href='https://$host/$url/'>$name</a> ";
} else {
echo "<span>$name</span>";
echo "<span>$name</span> ";
}
}
echo "<input type='checkbox' id='navtoggle'>";
echo '<label for="navtoggle"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-5 -7 24 24" width="32" fill="currentColor"><path d="M1 0h12a1 1 0 0 1 0 2H1a1 1 0 1 1 0-2zm0 8h12a1 1 0 0 1 0 2H1a1 1 0 1 1 0-2zm0-4h12a1 1 0 0 1 0 2H1a1 1 0 1 1 0-2z"></path></svg></label>';
echo "<nav id='main-nav' style='--rowcount: 3;'><div>";
echo "<nav id='main-nav'>";
if($_SERVER["DOCUMENT_ROOT"] !== getcwd()) {
echo "<a href='https://$host/'>home</a>";
}
echolink("about", "about");
echolink("uses", "uses");
echolink("music", "music");
echo "</div><div>";
echolink("blog", "blog");
echolink("links", "links");
echolink("stuff", "stuff");
echolink("guestbook", "guestbook");
echo "</div><div>";
echolink("stats", "stats");
echolink("greenhouse", "greenhouse");
echolink("etc", "etc");
echo "</div></nav>";
echo("</nav>")
?>

View file

@ -6,21 +6,16 @@
<title>Stats</title>
<link href="../style.css" rel="stylesheet" type="text/css" media="all">
<style>
#statstable {
#statstable {
width: 100%;
border-collapse: collapse;
}
#statstable td {
width: 50%;
padding: 0.3rem;
#statstable td:first-child {
padding-left: calc(var(--stdpadding) / 2);
}
#statstable tr:nth-child(2n+1) {
background-color: #ffffff11;
}
@media only screen and (hover: none) {
#statstable td {
width: initial;
}
#statstable td:first-child {
font-weight: bold;
}
@ -63,7 +58,7 @@
</tr>
<tr>
<td>CDs owned</td>
<td>92</td>
<td>164</td>
</tr>
<tr>
<td>Consoles modded</td>
@ -112,10 +107,12 @@
'[]',
'I lost it in the accident',
'Listed <a href="https://genders.wtf">here</a>',
'AMD Ryzen 7 5700G, 32GB DDR4-3600 RAM, AMD Radeon RX 6600XT GPU, 500GB NVMe SSD, 1TB SATA SSD, 4TB HDD',
'AMD Ryzen 7 5700G, 32GB DDR4-3600 RAM, AMD Radeon RX 6600XT GPU, 500GB NVMe SSD, 2TB NVMe SSD, 4TB HDD',
'I forgor 💀',
'<i>Bathynomus Giganteus</i>',
'I\'ll figure it out later'
'I\'ll figure it out later',
'gay',
'//TODO'
);
echo $boogeraids[array_rand($boogeraids)];
?></td>
@ -130,7 +127,7 @@
</tr>
<tr>
<td>Font family</td>
<td style="font-family: mono, monospace;">mono</td>
<td style="font-family: b612_mono, mono, monospace;"><a href="https://b612-font.com/">mono</a></td>
</tr>
<tr>
<td>Sodium glutamate</td>
@ -144,6 +141,10 @@
<td>Efficiency rating</td>
<td>80+ Gold</td>
</tr>
<tr>
<td>Wattage rating</td>
<td>1000W</td>
</tr>
<tr>
<td>Home address</td>
<td>12h 28m 24.97s, +31° 28 37.7</td>
@ -185,7 +186,7 @@
</tr>
<tr>
<td>Number I'm thinking of</td>
<td><?php echo rand(0, 69420); ?></td>
<td><?php echo rand(0, 69421); ?></td>
</tr>
<tr>
<td>Personality</td>

View file

@ -6,34 +6,9 @@
<title>Items</title>
<link href="../style.css" rel="stylesheet" type="text/css" media="all">
<style>
td {
padding-top: .25rem;
padding-bottom: .25rem;
}
td:nth-child(2) {
padding-left: 1rem;
}
.indent-1 td:first-child {
border-left: 3px solid white;
}
.indent-1 td {
padding-left: 2rem;
}
@media only screen and (hover: none) {
.indent-1 td {
border-left: 3px solid white;
}
td:first-child {
font-weight: bold;
}
}
details[open] > summary {
margin-bottom: .5rem;
}
td h2 {
margin-top: .75rem;
margin-bottom: .75rem;
}
details ul {
margin: 0;
padding-left: 1.5rem;
@ -45,10 +20,8 @@
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>stuff</h1>
<h2 id="caption">things too!</h2>
<h2>Utilities</h2>
<table>
<tr>
<td colspan="2"><h2>Utilities</h2></td>
</tr>
<tr>
<td><a href="rssfilter.php">rssfilter.php</a></td>
<td>Basic RSS and Atom feed filtering utility. Accepts regex.</td>
@ -57,16 +30,16 @@
<td><a href="firefoxrss/feed.php">firefoxrss</a></td>
<td>RSS bridge for Firefox release notes.</td>
</tr>
<tr>
<td colspan="2"><h2>Downloads</h2></td>
</tr>
</table>
<h2>Downloads</h2>
<table>
<tr>
<td nowrap><a href="EnchantedToolsPack_v1.zip">EnchantedToolsPack_v1.zip</a></td>
<td>Custom resourcepack for Minecraft that uses functionality from <a href="https://optifine.net/home">Optifine</a> to add custom textures for enchanted tools and weapons. Confirmed working with 1.19.</td>
</tr>
<tr>
<td colspan="2"><h2>Scripts</h2></td>
</tr>
</table>
<h2>Scripts</h2>
<table>
<tr>
<td>webpkiller/</td>
<td><details><summary>Automatic .webp converters</summary>Various scripts intended for use as the default program for opening .webp files. They automatically replace the .webp image with a .png one and open that instead. Incompatible with animated .webp images.</details></td>
@ -116,9 +89,9 @@
<td><a href="dirtomp3.sh">dirtomp3.sh</a></td>
<td>Bash script that uses ffmpeg to convert a music library to mp3s.</td>
</tr>
<tr>
<td colspan="2"><h2>Other</h2></td>
</tr>
</table>
<h2>Other</h2>
<table>
<tr>
<td><a href="neon_boost_times.html">neon_boost_times.html</a></td>
<td>A table of my level times in Neon Boost.</td>

395
style.css
View file

@ -1,33 +1,127 @@
@font-face {
font-family: b612_mono;
src: url(stuff/fonts/B612_Mono/B612Mono-Regular.ttf);
}
@font-face {
font-family: b612_mono;
src: url(stuff/fonts/B612_Mono/B612Mono-Bold.ttf);
font-weight: bold;
}
@font-face {
font-family: b612_mono;
src: url(stuff/fonts/B612_Mono/B612Mono-Italic.ttf);
font-style: italic;
}
@font-face {
font-family: b612_mono;
src: url(stuff/fonts/B612_Mono/B612Mono-BoldItalic.ttf);
font-weight: bold;
font-style: italic;
}
:root {
--stdfont: mono, monospace;
--stdfont: b612_mono, mono, monospace;
--bgcolor: #222222;
--fontcolor: gainsboro;
--fontcolor: #dcdcdc;
--linkcolor: #df1955;
--linkhover: #00ffd5;
--blockbg: #fff1;
--blockbghover: #fff2;
--stdshadow: #000;
/* ALL colors should be defined here.
If there's a color value somewhere else, move it here so it can be responsive */
--stdaccentborder: 3px solid var(--fontcolor);
--bodywidth: min(90vw, 80ch);
--stddropshadow: 4px 4px 8px black;
--navbarheight: 2.5rem;
--stdpadding: 1rem;
--navbarheight: calc(var(--stdpadding) * 2.5);
}
html, body {
height: 100%;
}
body {
font-family: var(--stdfont);
background-color: var(--bgcolor);
color: var(--fontcolor);
font-family: var(--stdfont);
max-width: var(--bodywidth);
margin: auto;
padding-top: var(--navbarheight);
padding-bottom: 1rem;
overflow-x: hidden;
text-shadow: 1px 1px 3px black;
background-color: var(--bgcolor);
box-sizing: border-box;
}
header {
width: 100%;
/* Headings */
h1 {
margin-top: calc(var(--navbarheight) + var(--stdpadding));
font-size: 3em;
background-image: url('images/isopod.php');
background-size: contain;
background-position: right;
background-repeat: no-repeat;
padding-bottom: calc(var(--stdpadding) * 2);
margin-bottom: calc(var(--stdpadding) * -2);
}
h1 + h2#caption {
font-weight: normal;
padding-top: 0;
margin-top: -1.4em;
}
h1, h2, h3, h4, h5, h6 {
text-shadow: 1px 1px 3px var(--stdshadow);
border-left: var(--stdaccentborder);
padding-left: var(--stdpadding);
}
/* Links */
a {
color: var(--linkcolor);
}
a:hover {
color: var(--linkhover);
}
/* Nav */
nav {
display: flex;
flex-wrap: wrap;
max-width: 100%;
align-items: center;
justify-content: center;
}
nav#main-nav {
position: absolute;
top: 0;
left: 0;
right: 0;
height: var(--navbarheight);
}
nav a, nav span, body > a{
padding: calc(var(--stdpadding) / 2) calc(var(--stdpadding) / 4 * 3);
margin: calc(var(--stdpadding) / 2) calc(var(--stdpadding) / 4);
}
nav a, body > a {
border-left: var(--stdaccentborder);
border-color: #0000;
background: linear-gradient(var(--blockbghover) 0 0) 0 / var(--bgpos, 0) no-repeat;
transition: background .3s, border .3s;
}
nav a:hover, body > a:hover {
--bgpos: 100%;
border-left: var(--stdaccentborder);
}
body > a {
display: block;
margin-left: 0;
padding-left: 1rem;
font-weight: bold;
font-size: 1.25em;
border-left: var(--stdaccentborder);
text-shadow: 1px 1px 3px var(--stdshadow);
}
/* Background image type beat */
#leftsidebg, #rightsidebg {
position: fixed;
z-index: -10;
@ -36,7 +130,7 @@ header {
background-position: center;
background-size: cover;
--shadowsize: 3rem;
--distancefromcenter: calc((var(--bodywidth) / -2) - 2rem);
--distancefromcenter: calc((var(--bodywidth) / -2) - (var(--stdpadding) * 3));
}
#leftsidebg {
right: calc(50% - var(--distancefromcenter));
@ -48,94 +142,8 @@ header {
left: calc(50% - var(--distancefromcenter));
box-shadow: var(--shadowsize) 0 var(--shadowsize) calc(0rem - var(--shadowsize)) black inset;
}
h1 {
font-size: 4.3em;
margin: 0;
padding: 0 3rem 3rem 3rem;
background-image: url(images/isopod.php);
background-repeat: no-repeat;
background-size: contain;
text-shadow: 2px 2px 5px black;
text-align: center;
font-weight: bold;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}
h4 {
font-size: 1em;
}
h5 {
font-size: 0.85em;
}
h1 > a {
color: inherit;
text-decoration: inherit;
}
h1 > a:hover {
color: inherit;
}
h1 + h2#caption {
font-weight: 500;
margin-top: -4.2rem;
margin-right: -20rem;
text-align: center;
font-size: 1.2em;
z-index: 2;
text-shadow: 1px 1px 3px black;
}
h2#caption + * {
margin-top: 3rem;
}
h2#caption + nav {
margin-top: 0;
}
h2 + h5, h3 + h5 {
margin-top: -1.5rem;
}
nav {
display: flex;
flex-wrap: wrap;
max-width: 100%;
align-items: center;
justify-content: center;
margin-bottom: 1rem;
}
nav > * {
margin: 0;
padding: 0 .5em;
}
a {
color: var(--linkcolor);
}
a:hover {
color: var(--linkhover);
}
input#navtoggle {
display: none;
}
label[for='navtoggle'] {
display: none;
}
#main-nav {
position: absolute;
top: 0;
left: 0;
right: 0;
height: var(--navbarheight);
}
#main-nav > div {
padding: 0;
display: flex;
align-items: center;
justify-content: center;
}
#main-nav > div > * {
padding: 0 1em;
}
/* 88x31 button container */
.buttons {
text-align: center;
font-size: 0;
@ -156,23 +164,8 @@ label[for='navtoggle'] {
z-index: 5;
transform: translate(-2px, -2px);
}
.embed {
display: block;
width: 100%;
border: none;
}
img, picture, video {
max-width: 100%;
}
summary:hover {
cursor: pointer;
}
[title] {
text-decoration: underline;
}
[title]:hover {
cursor: help;
}
/* Code snippets */
code {
background-color: black;
padding: 0.15rem;
@ -198,41 +191,59 @@ code {
border-bottom: 1px solid #00ffd5;
display: block;
}
tr:hover {
background-color: #2222227c;
/* Tables */
table {
border-collapse: collapse;
}
table.highlightrows tr:nth-child(2n+1) {
background-color: #ffffff11;
td {
padding: calc(var(--stdpadding) / 2);
}
table.highlightrows tr:nth-child(2n+1):hover {
background-color: #ffffff11;
tr > td:first-child {
padding-left: 0;
}
blockquote {
padding: 1rem 1.5rem;
tr.indent-1 td {
padding-left: calc(var(--stdpadding));
}
tr.indent-1 td:first-child {
border-left: var(--stdaccentborder);
}
/* Quotations */
figure.quote {
padding: calc(var(--stdpadding) * 1.5);
margin: 0;
border-left: 3px solid white;
background-color: #fff1;
margin-bottom: 1rem;
margin-bottom: initial;
border-left: var(--stdaccentborder);
background-color: var(--blockbg);
margin-bottom: var(--stdpadding);
}
blockquote .attr {
display: block;
margin-left: 3rem;
margin-top: 1rem;
figure.quote blockquote {
margin: 0;
}
figure.quote figcaption {
margin-left: calc(var(--stdpadding) * 3);
margin-top: var(--stdpadding);
}
/* Misc */
img, picture, video {
max-width: 100%;
}
summary:hover {
cursor: pointer;
}
[title] {
text-decoration: underline;
}
[title]:hover {
cursor: help;
}
hr {
width: 30%;
}
.CboxOpenBtn img {
opacity: 0;
transition-duration: 0.2s;
}
.CboxOpenBtn:hover img {
opacity: 1;
}
.emph {
font-style: italic;
}
/* Funsies */
.serif {
font-family: serif;
}
@ -257,7 +268,6 @@ hr {
color: yellow;
display: inline-block;
}
.house {
color: cornflowerblue;
}
@ -283,20 +293,36 @@ hr {
83%{color: rgb(255,0,255); text-shadow: 0 0 4px rgb(211, 0, 211);}
91%{color: rgb(255,0,127); text-shadow: 0 0 4px rgb(211, 0, 105);}
}
/* If user is on mobile */
@media only screen and (hover: none) {
:root {
font-size: 1rem;
nav#main-nav {
position: initial;
top: initial;
left: initial;
right: initial;
height: initial;
margin-top: calc(var(--stdpadding) / 2);
}
h1 {
font-size: 4em;
padding-left: unset;
padding-right: unset;
margin-top: initial;
}
h1 + h2#caption {
margin-right: unset;
margin-top: -3.5rem;
nav a, nav span {
flex-grow: 1;
}
:is(main,body) > code {
nav a, body > a {
border-left: 3px solid var(--fontcolor);
background-color: var(--blockbg);
}
nav a, body > a, nav span {
padding: calc(var(--stdpadding) / 2) calc(var(--stdpadding) / 4 * 3);
margin: 0 0 calc(var(--stdpadding) / 2) 0;
}
body > a {
margin-left: 0;
}
:is(main,body,pre) > code {
border-width: .1rem;
}
@media (max-width: 43rem) {
@ -320,53 +346,25 @@ hr {
td {
display: block;
}
#main-nav {
position: fixed;
left: 0;
right: 0;
top: calc(-.2rem - (3rem * var(--rowcount)));
z-index: 75;
background-color: var(--bgcolor);
transition-duration: .5s;
box-shadow: none;
height: fit-content;
}
#main-nav > * {
height: 3rem;
width: 100%;
border-bottom: 1px solid #ffffff22;
}
#main-nav > *:last-child {
border-bottom: none;
}
label[for='navtoggle'] {
display: block;
z-index: 100;
filter: drop-shadow(2px 2px 6px black);
position: fixed;
top: 0;
left: 0;
padding: .5em;
}
#navtoggle:checked ~ #main-nav {
top: 0;
box-shadow: 0 0 5rem 1rem black;
}
#navtoggle ~ label[for='navtoggle'] > svg {
transition-duration: .5s;
}
#navtoggle:checked ~ label[for='navtoggle'] > svg {
transform: rotate(90deg);
}
#greenhouselink {
display: none;
}
@media (prefers-contrast: more) {
#leftsidebg, #rightsidebg {
display: none;
}
}
}
/* TODO: Light theme
@media (prefers-color-scheme: light) {
:root {
--bgcolor: #dffffa;
--fontcolor: #222222;
--blockbg: #0001;
--blockbghover: #00000022;
--stdshadow: #19191977;
}
}
*/
@media (prefers-contrast: more) {
body {
color: white;
@ -379,4 +377,15 @@ hr {
a {
color: #00ffd5;
}
}
/* TODO: Low contrast theme */
/*@media (prefers-contrast: less) {
}*/
@media (prefers-reduced-motion) {
* {
transition-duration: 0s !important;
}
}

75
uses/compier/index.php Normal file
View file

@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My Computer</title>
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>the comp<em title="Is that a Homestar Runner reference?">ier</em></h1>
<h2 id="caption">my main computer</h2>
<p>My main PC is an ever-shifting, questionably arranged agglomeration of components selected as if at random, designed and assembled by yours truly circa March of '22. Apparently, I have a lot to say about it.</p>
<h2>Internals</h2>
<h3>CPU - AMD Ryzen 7 5700G</h3>
<p>I chose the 5700G mainly for its inclusion of an integrated GPU, not because I wanted to use it, but because I wanted it as a fallback in case my dedicated GPU failed. In fact, I tested and Blender renders perform <em>worse</em> when I use both GPUs in parallel instead of just the one.</p>
<p>This chip was also cheaper than the 5800 with the same number of cores and, presumably, similar performance by all other metrics. It took me until after the system was built to realize that its other significant difference from the 5800 is that it lacks PCIe 4 support and is bottlenecking every other PCIe device in my machine.</p>
<h3>CPU Cooler - Noctua NH-U12A</h3>
<p>Admittedly, a bit overkill for the 65-watt chip it's attached to. I bought it because I was getting thermal throttling with the stock cooler, but when I took it off to put the new cooler on I discovered I hadn't mounted the stock cooler properly to begin with. The stock cooler, mounted correctly, would probably have sufficed, but frankly that mounting system was dogshit anyway. SecuFirm&trade; gang 4 lyfe.</p>
<p>Now that I have it, this cooler is great. Nothing specific to say, it just works and works <em>very</em> well. I wouldn't be surprised if this was the first and last CPU cooler I ever buy. My one complaint is that the fan clips are kind of annoying to deal with.</p>
<h3>Motherboard - Gigabyte B550 AORUS PRO AC</h3>
<p>Nothing much to say here that you couldn't get from the product page on Newegg. Plenty of I/O and has yet to cause any problems with operation. I chose it partly for the included wireless functionality, which now mostly gets used for my bluetooth Xbox controller ever since I upgraded to a wired connection.</p>
<p>I recommend this motherboard if for some reason you're building an AM4 system in $CURRENT_YEAR, but be warned that the screws holding the M.2 heatsinks down are made of cheese and <em>will</em> snap off if over-torqued. Don't ask me how I know. Also, the included Wi-Fi antenna is fugly and has an absolutely pathetic mounting magnet.</p>
<h3>RAM - G.Skill Ripjaws V 2x16GB DDR4-3600 CL18</h3>
<p>Good RAM. No complaints. I thought for a while that the XMP profiles weren't compatible with my CPU or something, but an update to my motherboard's BIOS solved that.</p>
<h3>Boot SSD - Samsung 980 500GB (NVMe)</h3>
<p>Used solely to store my OS and programs. Far bigger than necessary for that purpose, but no issues so far. Plenty fast and all that. I initially assumed it had DRAM, then I learned it didn't, <em>then</em> I learned that it's one of those drives that leeches off of your system memory instead of having an onboard cache, so make of that what you will.</p>
<h3>Secondary SSD - WD Blue 2TB (NVMe)</h3>
<p>This drive is mounted as /home, for convenient OS reinstalls and such-like. It's a fairly new addition, so I can't remark on its performance, but it certainly wasn't DOA. This one also uses your system memory as a cache, but that's fine. I've got plenty to go around.</p>
<p>The drive that used to fill this role was a WD Blue 1TB SATA SSD that started off serving the same purpose as an aftermarket upgrade to my old laptop, but got transplanted wholesale when I upgraded to the new system. That drive still functions, but since it holds all my most sensitive and irreplacable files, I elected to replace it for Peace Of Mind&trade; after my PSU exploded, and opted for a cheeky capacity upgrade while I was at it. Plus, this one was on sale for like, $90 off!</p>
<h3>HDD - WD Black 4TB (7200RPM)</h3>
<p>This drive was purchased pursuant to the goal of never running out of storage on my computer again, following an upbringing spent gaming on laptops with tiny little SSDs in them. I mostly fill it with Legally Obtained&trade; movies and Steam games I don't play very often. Absolutely no complaints thus far.</p>
<h3>GPU - ASUS Dual Radeon RX 6600 XT</h3>
<p>Fine, enough edging. I know this is the part everyone cares about. It's a fine GPU, it performs admirably at 1080p in all my favourite games but can get a little overwhelmed at 1440p with all the shaders on in Minecraft, the encoder is what you'd expect from AMD and the Blender performance leaves something to be desired. I've had some odd stability issues with it in the past but that might have been due to the apparently faulty power supply I was running. It certainly isn't a thermal issue.</p>
<p>I want it on record here that if I ever buy a 3090 or whatever the biggest baddest new $1000+ AAA-cruncher is and I haven't won the lottery, I am to be taken out back and shot like a lame horse. Frankly, I probably need some sense beaten into me if I'm buying lottery tickets to begin with.</p>
<h3>Case - Corsair Carbide Series 110R</h3>
<p>A decent enough mid-tower case, chosen primarily for the inclusion of a 5.25" bay for an internal optical drive. Good airflow characteristics and adequate cable management, but it can be a little cramped to build in, especially if you're running an exotic setup like a modular PSU with a 3.5" HDD at the same time. I realized after buying it that the glass side panel is tinted, necessitating the use of internal lighting, which I initially elected not to buy, to see inside at all.</p>
<h3>Power Supply - EVGA SuperNOVA G6 1000W</h3>
<p>This power supply is, bluntly, <em>comically</em> over-spec'd for the system it's in. I could run two graphics cards off of this thing if I wanted. I could run two of my <em>entire computer</em> off of this thing, it even has a second CPU power connector.</p>
<p>This turbo level of overkill-itude is (mostly) intentional. My last PSU was a much more sensible Seasonic Focus GX-650 rated for 650 watts, but despite being, by all accounts, the correct power supply for my use case, it still died suddenly with a loud POP two and a half years into Seasonic's 10-year Worry-Free Warranty&trade;. The RMA process was good, at least.</p>
<p>I wanted to get something less likely to suffer the same fate this time around, but having just lost a well-reviewed unit from a reputable brand with a good efficiency rating and a generous yet sensible rated wattage to nothing but bad luck, the only thing I could really do to maybe accomplish this other than just getting luckier was to buy something so overbuilt that it no longer regards my machine running at full bore as a significant load, hence this absolute goliath of a PSU. The original plan was to get a slightly more reasonable 850 watt unit instead, but this one was on a really good sale. I basically paid 850-watt money for it.</p>
<p>As of writing, the day after installing it in my system, my plan has yet to backfire. Time will tell if I made the right call.</p>
<h3>Optical Drive - LG WH14NS40 Blu-Ray Burner</h3>
<p>It was really important to me that my computer have a disc drive, and this was the cheapest unit on PCPartPicker that supported all the major formats. Like most of the parts in my computer, it functions reliably as advertised without significant issue and I don't have much to say on the matter. I've gotten plenty of use out of it - I have a decently large collection of CDs that I've ripped using this drive.</p>
<h2>Peripherals</h2>
<h3>Mouse - Logitech G602</h3>
<p>I've had this mouse for something like six years. I've had it for so long I've forgotten how long it's been. High-quality, long-lasting, and it probably helps that it takes AAs. I wish the software for it worked on Linux, though.</p>
<p>I generally prefer wired peripherals where possible, but the RF dongle this mouse uses has been rock-solid for me, as long as I don't keep it behind a bunch of EMI-blocking metal panels.</p>
<h3>Keyboard - Keychron V3 and Q0</h3>
<p>I would have just gotten a 100% keyboard, but they didn't have it in the chassis colour I wanted so I ended up with a TKL and separate numpad instead. I'm a huge fan of both, what with the open-source firmware and hot-swappable switches and all. I especially like the extra included keycaps for use with a Mac, not because I intend to use it with a mac, but because it lets me finally get rid of the fucking Windows logo on my keyboard.</p>
<p>Unless I lose them in a house fire or something, I think these units probably constitute my "endgame", as keyboard enthusiasts say. They have every feature I care about and every upgrade or change I can see myself caring to make is maximally easy. This is one of those things that I shelled out for with the intent of never, ever replacing it.</p>
<h3>Gamepad - Xbox One wireless controller</h3>
<p>I bought this several years ago when I was still running Windows because I wanted maximum compatibility for minimum effort. It still works now that I'm on Linux, using bluetooth and with xpadneo installed. It's decent, no complaints, I'm sure it could be better but I don't use it enough to justify caring.</p>
<h3>Monitors - MSI MAG274QRFW 27" 1440p 180Hz (2x)</h3>
<p>Another "endgame" purchase. Very good monitors, if I replace them it'll be because they broke. I truly don't care for OLEDs - they get burn-in, for god's sake, I thought we moved on from that in the early 2000's when LCDs became commonplace.</p>
<p>These are mounted on a cheap, AmazonBasics-tier VESA monitor stand that came with a huge metal foot that kind of defeated the purpose, but that I have since replaced with a much more compact combination of 3D-printed brackets and wood screws.</p>
<h3>Webcam - Logitech C925e</h3>
<p>It's a USB webcam. The picture is good enough - better than most laptops - but it does some annoying auto-adjustment stuff that makes chroma-key shenanigans difficult at times. Standout features are the privacy shutter, indicator light when the camera is in use, and screw mount. I'm sure the microphone is adequate in a pinch, but I have no reason to use it.</p>
<h3>Microphone - Audio-Technica AT2020 USB+</h3>
<p>Very good microphone. Probably as good as I'll ever need. Superb sound quality; my friends in voice chat complain whenever they hear me on anything else. I'd have gotten the XLR version but I did not yet own an audio interface and didn't want to shell out just for this.</p>
<p>In what is becoming a running theme, it sits on a perhaps unbefitting $20 no-name mic arm from Amazon, with matching cheap shock mount and pop filter. They work, though. The springs on the arm are loud and, as my friends are keen to point out every time, quite audible through the mic.</p>
<h3>Audio Interface - Arturia Minifuse 2</h3>
<p>Bought to accompany a synthesizer, I have also used this interface to great effect for the purpose of digitizing cassette tapes. I only learned after buying it that both analog inputs are mono, which kind of makes sense and I assume is normal, but it would have been nice to know beforehand.</p>
<h2>Photos</h2>
<picture>
<source srcset="images/pc1.jxl" type="image/jxl">
<img src="images/pc1.jpg" alt="My computer tower. The CPU heatsink, graphics card, and RAM are prominently visible through the glass side panel. An optical drive is also visible on the front.">
</picture>
<picture>
<source srcset="images/pc2.jxl" type="image/jxl">
<img src="images/pc2.jpg" alt="Closer shot of the inside of my compter with the glass side panel removed. My shoddy cable management is on full display.">
</picture>
<div id="rightsidebg" style="background-image: url(bg.jxl), url(bg.jpg);"></div>
</body>
</html>

View file

@ -5,350 +5,73 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My setup</title>
<link href="../../style.css" rel="stylesheet" type="text/css" media="all">
<style>
details {
margin-top: 1ch;
}
details#winrant>summary::before {
content: "Show ";
}
details[open]#winrant>summary::before {
content: "Hide ";
}
summary {
text-align: right;
}
li,
summary {
margin-bottom: 1ch;
}
@media only screen and (hover: none) {
body > ul {
padding-left: 5vw;
}
}
/*
:root {
--bgsize: 3rem;
}
li {
background-size: var(--bgsize);
background-repeat: no-repeat;
background-position-x: 0;
transition-duration: 0.5s;
margin-bottom: 0.5rem;
}
li:hover {
background-position-x: calc(0rem - var(--bgsize));
}
summary > h2 {
display: inline-block;
}
summary > h2 > a {
text-decoration: none;
}
summary {
background-size: contain;
background-repeat: no-repeat;
padding: 0 1rem;
}
details:nth-child(2n + 1) > summary{
text-align: right;
background-position: right;
}*/
</style>
<link href="/style.css" rel="stylesheet" type="text/css" media="all">
<?php include($_SERVER['DOCUMENT_ROOT'] . '/seasonal.php'); ?>
</head>
<body>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/nav.php'); ?>
<h1>stuff i use</h1>
<h2 id="caption">If your setup is different you're objectively stupid</h2>
<h2>Hardware</h2>
<ul>
<li>
My main computer is a desktop PC I built myself. I made some choices I regret, but nothing critical. I'm proud
of it.
<details>
<summary>System specs</summary>
<ul>
<li><b>AMD Ryzen 7 5700G CPU</b>. Chosen for the integrated graphics, which should come in handy if I'm ever
without a working GPU, and because it's cheaper than the 5800 with the same core count. Little did I know
it's the only component in my system with no PCIe 4 support.</li>
<li><b>Noctua NH-U12A CPU Cooler</b>. Admittedly, a bit overkill. I bought it because the 5700G's stock
cooler was significantly underperforming. Imagine my shock when I took the old cooler off to discover I
had installed it wrong and it wasn't making even CLOSE to full contact! Whoops...</li>
<li><b>Gigabyte B550 AORUS PRO AC Motherboard</b>. Bit of a fancy one. It's a wi-fi board, but I've since
upgraded to a wired connection. It still comes in handy for my bluetooth gamepad, though.</li>
<li><b>G.Skill 2 x 16GB DDR4-3600 CL18 Memory</b>. Great memory. I originally thought the XMP profiles weren't
compatible with my CPU, but it turns out I just had to update my BIOS.</li>
<li><b>Samsung 980 500GB NVMe Boot SSD</b>. It's a fine drive, but in retrospect it's way bigger than I
needed for just a boot drive and I wish I had chosen one with DRAM.</li>
<li><b>WD Blue 1TB SSD</b>. This was originally a storage upgrade for my old laptop. I set it as the mount
point for my /home directory when I installed Linux on that machine, and transplanted it over to the new
one to keep all my stuff with very little hassle.</li>
<li><b>WD Black 4TB 7200RPM HDD</b>. Fits my entire Steam library in less than half its capacity with loads
of space left over for all the, uhm, Linux ISOs I could want. My case has room for one more 3.5" drive,
and if I outgrow two of these I might just have to build a NAS.</li>
<li><b>AMD Radeon RX 6600XT GPU</b>. I knew I was going to be using Linux when I designed the computer, so I
wanted to avoid Nvidia and their less than stellar Linux drivers if possible. Unfortunately, Blender performance
isn't too great and it is somewhat prone to crashing during Cycles renders, but it's better than nothing and the gaming performance is stellar.
</li>
<li><b>Corsair 110R ATX Mid-tower Case</b>. Chosen because it was one of the only aesthetically tolerable
cases I could find with a 5.25" drive bay. It provides surprisingly good airflow for a solid front panel.
Getting the PSU hooked up with the drive cage in proved difficult, though.</li>
<li><b>Seasonic Focus Plus 650w 80+ Gold PSU</b>. I'd heard good things about Seasonic, and my experience
thus far corroborates them. I'm very glad I didn't choose a <a
href="https://www.youtube-nocookie.com/embed/aACtT_rzToI">Gigabyte model</a>.</li>
<li><b>LG WH14NS40 Blu-Ray/DVD/CD Writer</b>. I really wanted my PC to be compatible with optical media, and
this was the cheapest unit available that supported every relevant format. Apparently this one has some
weird firmware issue that stops you from ripping 4k blu-rays? Good thing I don't own any of those. Or a 4k
display.</li>
<li><b>4x Arctic P12 Fans</b> plus the fan that came with my case. These fans are cheap, decent, and you can
daisy-chain them.</li>
<li><b>BTF 1m 60-LED ARGB Strip</b>. I told myself I didn't need lighting when designing the computer, then
bought this later when I realized I couldn't see through the tinted glass panel. I didn't want to overpay
for some PC-specific LED strip that might require proprietary software so I bought this generic one and an
adapter for the motherboard header. I control it with OpenRGB and a custom systemd service that turns it
off on shutdown. Weird that that isn't default behaviour.</li>
</ul>
</details>
<details>
<summary>Peripherals</summary>
<ul>
<li>My mouse is a <b>Logitech G602</b> wireless
mouse that I've had for god only knows how long. I don't normally go for wireless peripherals or
proprietary dongles, but Logitech's wireless dongles are really good and the quality of their products
makes it worth it.</li>
<li>My keyboard is a <b><span title="One thing about Keychron, their products are good but don't buy from their website. When I tried, my order got marked as &quot;fraudulent&quot; by their system and I had to prove to them my 200 US dollars came from a real person to get my keyboards. Save yourself the trouble and just buy their stuff from Amazon.">Keychron</span>
V3</b> (with knob) and accompanying <b>Keychron Q0</b> for a numpad, because
the V3 is tenkeyless and I refuse to give up that numpad life. I got Keychron's in-house brown switches and
they're quite nice, and I look forward to tricking out the QMK firmware with all sorts of crazy macros and
bindings. My favorite part, though, is that it ships with both Windows and Mac alt/option and super/command
keys, so I can swap them around in an unintended manner to <i>finally</i> rid the keyboard for my Linux
computer of those wretched Windows logos!</li>
<li>I also have a <a target="_blank"
href="https://m.media-amazon.com/images/I/61sf29vWJ-L._AC_SL1000_.jpg">very large enter key</a>, just
because.</li>
<li>I have two 1080p monitors, a <b>24" 165Hz Gigabyte model</b> and a <b>21.5" 75Hz HP one</b>. Both are
fine, but were I to replace them I would go for something larger at a slightly lower framerate, possibly
at 1440p. I would not buy the HP monitor again - not that it's bad, but HP Eye Ease&trade; isn't something I want and I can't figure out how to turn it off.</li>
<li>My webcam is a <b>Logitech C925e</b>. The picture quality is good, and the microphone quality is what
you'd expect out of a webcam. I'm a huge fan of the built-in privacy shutter. I'm just that sort of
paranoid.</li>
<li>The microphone is an <b>Audio-Technica AT2020 USB+</b>. The sound quality out of it is superb. I would
have bought the non-USB version, but I didn't want to shell out for an audio interface. It sits on some
random $20 mic arm off Amazon.</li>
<li>I also have an <b>Xbox One wireless controller</b>. I thought for the longest time it wouldn't work with
Linux because I was trying to connect it with a cable, but one day I attempted to connect it via bluetooth
out of desperation and it worked flawlessly!</li>
<li>I have this little wireless <b><a href="https://www.silverstonetek.com/en/product/info/expansion-cards/ES02-USB/">
doodad</a></b> from Silverstone that connects to an internal USB header and lets me turn my computer on and off via
a wireless remote, because I'm just that lazy.</li>
</ul>
</details>
<details>
<summary>Pictures</summary>
<picture>
<source srcset="images/pc1.jxl" type="image/jxl">
<img src="images/pc1.jpg" alt="My computer tower. The CPU heatsink, graphics card, and RAM are prominently visible through the glass side panel. An optical drive is also visible on the front.">
</picture>
<picture>
<source srcset="images/pc2.jxl" type="image/jxl">
<img src="images/pc2.jpg" alt="Closer shot of the inside of my compter with the glass side panel removed. My shoddy cable management is on full display.">
</picture>
</details>
</li>
<li>
I also have an old <b>HP Pavilion 15-dk0030nr gaming laptop</b> being used as a home server.
<details>
<summary>More details</summary>
<p>This is the laptop I upgraded from to my current PC. It's got an Intel i7-9750H, 32GB of RAM (upgraded from
8GB stock), a GTX 1660Ti Max-Q GPU, and entirely too much hard drive space. It's currently running TrueNAS and being used as a Jellyfin server,
backup location, and some other stuff probably. Learn more about it <a href="https://isopod.cool/blog/posts/building_a_normal_server/">here</a>.</p>
</details>
</li>
<li>
I host this website on a DigitalOcean droplet I rent with 4GB of RAM and 2 CPU cores running Ubuntu server.
<details>
<summary>More details</summary>
<p>I'd host more on the laptop if I wasn't so worried about uptime and latency and I could be bothered to move it all now.
This thing is running this website, an Akkoma instance, an RSS bridge, a SearXNG instance, WireGuard to
get the laptop past the NAT in my <span class="house">house</span>, a Forgejo instance, a Nextcloud instance, a Matrix server, and probably some other stuff I forgot about.</p>
</details>
</li>
<li>
My phone is a <b>Google Pixel 4a</b>.
<details>
<summary>More details</summary>
<p>I said I was going to wait until my old LG K61 became unusable before replacing it. I thought I'd failed to do that right up until
its replacement, a used flagship from the same time period, arrived and blew it out of the water in almost every way. I never noticed
up until now just how painfully unresponsive my old phone was. Mobile websites are, like, usable now!</p>
<p>Performance was never a consideration in buying the phone, though. I'm not a huge fan of the idea of using a Google device, but the Pixel line are the only devices supported by
Graphene OS. But why the 4a in particular? There are more recent, largely better models within my price range.
Mainly, I chose to get the specific model I did because it was the last Pixel device to be released with two important attributes: the presence of a headphone jack,
and the lack of 5G support.</p><p>The headphone jack, I think, is self-explanatory. I <i>never</i> intend to purchase a phone without one if I can avoid it. As for the 5G,
I had been watching a lot of, like, Mental Outlaw and shit and was paranoid about my phone being trackable with the beam forming technology that 5G employs.
(To be clear, it is kind of creepy how precise it is, but I think if it's being used against me by the government I have bigger problems.)
</p>
</details>
</li>
<li>I have a <b>Nintendo Switch</b> that, admittedly, doesn't see much use. Kirby and the Forgotten Land was good,
though. Unfortunately, I don't have one of the early ones that can be softhacked, otherwise I would have for
sure done so by now.</li>
<li>I've softmodded my <b>New 2DS XL</b> and you should too. It's <a href="https://3ds.hacks.guide/">really easy</a>.</li>
<li>I have two pairs of headphones: a modded <b>Beyerdynamic DT 770 Pro (80 Ohm)</b> from <a href="https://customcans.co.uk/">
Custom Cans</a>, and a pair of <a href="https://www.amazon.ca/gp/product/B07JH56Q7J?psc=1" target="_blank"><b>KZ ZSN</b></a>
wired earbuds.
<details>
<summary>More details</summary>
<p>The main factor that drove me to choose Beyerdynamic for my headphones was build quality. Durability was
already important to me, but after my previous headphones from Audio-Technica snapped after only a year I
was determined not to let that happen again. Supposedly this company's headphones are built really well.
Beyond that, these are studio headphones, and I wanted something that was good for musician-ing, on the rare
occasion I actually do that. From what I've been able to discern so far, they certainly live up to the "studio"
moniker. The audio quality is very nice. The one issue I have with these headphones is that they don't have a
removable cable, which is why I had mine modded. They've got a mini-XLR port now!</p>
<p>As for the earbuds, you should buy them. They are quite literally the best earbuds I've ever used. They're
cheap, the sound quality is good, and the build quality is absolutely stellar. I've spent three times as
much on headphones that are worse in every way.</p>
</details>
</li>
<li>I have a <b>Prusa MINI+</b> 3D printer. It's very nice.
<details>
<summary>More details</summary>
<p>I went with a Prusa because they had a reputation for quality, and this thing did not disappoint. The assembly instructions were good and the user experience is very smooth. It does a lot of things for you that I suspect would have been pain points for me had I bought a cheaper printer. I'm a huge fan of the ability to send it gcode files remotely using the built-in webserver. Also, PrusaSlicer is quite good.</p>
</details>
</li>
<li>I have a <b>Netgear GS305</b> unmanaged network switch for connecting all the devices in my room to ethernet. It works, no complaints.</li>
</ul>
<h1>my setup</h1>
<h2 id="caption">If yours is different you're objectively stupid</h2>
<h2>Computers</h2>
<a href="compier/" id="compier">comp<em title="Is that a Homestar Runner reference?">ier</em></a>
<p>My main PC, a mid-tower desktop "designed" and built by me, boasting a Ryzen 5700G, 32 gigs of DDR4, something like 6 terabytes of storage, a comically overbuilt PSU, and a graphics card. It runs <a href="#eos">arch, btw</a>.</p>
<h3 id="pavilion">pavilion</h3>
<p>An HP Pavilion gaming laptop that I've put TrueNAS on and heavily modified to accept an array of HDDs, boasting 32GB of aftermarket RAM and 64TB (raw) of <em>extremely</em> aftermarket spinning rust. Read about its conception and construction <a href="https://isopod.cool/blog/posts/building_a_normal_server/">here</a>.</p>
<p>It currently runs Jellyfin, an SMB share for backups and such-like, and eventually maybe some game servers.</p>
<h3>cumulus</h3>
<p>A 2-CPU, 4GB VPS that runs this website and like a dozen other things, most of which I even use!</p>
<h3 id="phone">Google Pixel 4a</h3>
<p>This counts as a personal computer.</p>
<p>I bought this phone for $200 refurbished, because it was the most recent Pixel with a headphone jack and I wanted to put <a href="#graphene">Graphene OS</a> on it, and I <em>refuse</em> to give a shit about raw performance in a <em>fucking smartphone</em>, or 5G for that matter.</p>
<p>As much as I don't believe in the importance of performance on smartphones, I must admit that when I upgraded to this from an LG K61, a phone from the same year that was worth $200 <em>new</em>, the difference in responsiveness was <em>significant</em>. I feel I mostly have incompetent web developers to thank for that, though.</p>
<h2>Consoles</h2>
<h3>New 2DS XL (Hacked)</h3>
<p>Did you know it's surprisingly easy to hack your 3DS? <a href="https://3ds.hacks.guide/">Do it now!</a></p>
<h3>Nintendo Switch</h3>
<p>Don't get the impression here that I love Nintendo or anything. I've had both of these consoles for years, since back when we knew they were litigious but they weren't like, sending paramilitary death squads after the Yuzu devs or whatever they're up to now of days.</p>
<p>Anyway, I've done a shell swap on my switch and joycons to make them clear! Check this dope shit out:</p>
<img src="images/switchfront.jpg" alt="Front view of a Nintendo Switch with clear plastic shells on the joycons" />
<img src="images/switchback.jpg" alt="Back view of a Nintendo Switch with clear plastic shells on the joycons and console" />
<h2>Other Hardware</h2>
<h3>Prusa MINI+</h3>
<p>I bought a Prusa because their printers have a reputation for quality, which this unit has certainly lived up to. It's been quite reliable, and when it fails, it's usually my fault in a really obvious way. It automates a lot of features that I suspect would have been pain points on a cheaper printer, up to and including uploading gcode to it directly over the network. This thing's easier to use than a regular 2D printer!</p>
<p>My one major issue is that the cantilevered gantry results in a slight inaccuracy in the Z axis, meaning the first layer is too high on one side of the bed and too low on the other. I suspect that this is why they didn't make it bigger, although it could also just be my fault for going and ordering the un-assembled kit version to save money on assembly.</p>
<p>I run mine with Prusa's satin textured bed plate for easier removal of PETG parts (I managed to damage the included smooth plate printing big stuff in PETG) and a hardened steel E3D Nozzle X&trade; for printing with filaments with abrasive additives. I'd like to upgrade the hotend to a Revo one at some point if I can find the money.</p>
<h3>CyberPower CP1500PFCLCD</h3>
<p>A UPS I bought to run my computer, server, and related paraphernalia off of. I got it for all the normal reasons you get a UPS (power outage protection and such-like) and it has thus far performed as advertised. It has yet to be put to the test in a real power outage, but it's kept my computer alive through a couple blips at this point. Highly recommend getting one.</p>
<h2>Software</h2>
<ul>
<li>
I use arch, btw. Well, <a href="https://endeavouros.com/" target="_blank">EndeavourOS</a>, but close enough.
<details>
<summary>More details</summary>
<details id="winrant">
<summary>furious tirade about Windows</summary>
<p>Seriously, fuck Windows and fuck Microsoft. I've watched them spend the past several years strong-arming
hardware manufacturers into making it harder and harder to install anything but their terrible product on
hardware YOU own in the name of "security". I first noticed it with secure boot, and they've continued
this trend recently with Pluton, a <span style="text-decoration:line-through;">anti-competition</span>
"security" chip built directly into the CPU. As far as I can tell, both of these things can be disabled in
the BIOS (for now), but how long until they can't? Honestly, at this point, I'm running Linux partially
out of sheer spite, as a middle finger to every corporation that thinks they have the right to control
what I do with my hardware.</p>
<p>Apple's even worse, mind you. Say what you will about performance and power efficiency, but I'm convinced
the main reason Apple has started making their own CPU architectures is as the nuclear option to finally
kill the Hackintosh. For as long as I've been alive Apple has spearheaded every anti-consumer movement in
every industry they're in. I swear, every time someone responds to a complaint about Windows or Android by
recommending an Apple product I get a little bit closer to snapping and beating Tim Cook to death with a
broken iMac. This isn't 1983, motherfucker. Buy something you can fix.</p>
</details>
<p>I have a long history with Linux. The first computer I ever owned was a Chromebook, and I wanted to play
<span title="Java Edition, mind. I could have played Pocket Edition anytime I wanted. Minecraft on anything but the PC used to suck big-time. Feature parity didn't exist. I think Chromebooks might even be able to run Minecraft Bedrock Edition now with the Android app support. Honestly, I think it would still be worth hacking proper Linux onto them to play the real deal.">Minecraft</span> on it, which Chromebooks famously can't do,
so naturally the logical solution was to install Linux on the thing with Crouton in order to run it. It was
incredibly sketchy, janky, and not exactly performant, but I got my Minecraft and that was what mattered. I
killed it 9 months in by overworking its poor little <span title="When I say overworked, I mean it. The thing was redlining basically all the time whenever I was doing about anything in the Linux environment, especially Minecraft. It would overheat so much so often I'm pretty sure I melted the adhesive keeping the bottom panel on, because by the end of its life that thing was in a pretty much constant state of nearly coming off.">passively
cooled</span> Celeron CPU, and after that I mostly stuck with Windows on the two HP laptops I had over the
next six years for software compatibility reasons, but I tried to switch back to Linux occasionaly.</p>
<p>I finally pulled it off in 2021, when I used a combination of upsetting news about Windows 11 and a
storage upgrade to my laptop as my excuse to switch. Software compatibility on Linux still isn't quite there
yet, but I didn't use a lot of Windows-only programs outside of Paint.NET and games anyway, and game
compatibility has improved leaps and bounds with Valve's Proton/Steam Play. Shame I can't play any of the
games I got for free on the Epic launcher, though.</p>
<p>So why EndeavourOS in particular? Mainly, it ships with my desktop environment of choice and it's based on
Arch so I get the AUR and to tell people I run Arch, btw. I used to use Manjaro for the same reasons but I
got sick of the long wait times for new package updates and generally just wanted a fresh start after I
installed Plymouth and then it broke, leaving my computer still bootable but breaking all my custom systemd
services for some reason. Before that I used System76's Pop!_OS on my laptop because it shipped with Nvidia
drivers preinstalled.</p>
</details>
</li>
<li>
<p>My phone runs <a href="https://grapheneos.org/">Graphene OS</a>. It's a hardened fork of the Android Open Source Project with all of Google's proprietary spyware stripped out. It's the only reason I bought a Pixel and it's very nice. I'd go into more detail, but the devs do a great job of that on their website.</p>
</li>
<li>
I use <a href="https://www.mozilla.org/en-US/firefox/new/" target="_blank">Firefox</a> as my main web browser
outside of testing. On mobile I use the <a href="https://f-droid.org/packages/org.mozilla.fennec_fdroid/">Fennec</a> fork.
<details>
<summary>More details</summary>
<p>I really like Firefox. It's customizable as hell, the dev tools are better, and it's designed to keep your
data private from the likes of Google and Facebook. No, I won't call them fucking meta.</p>
<p>On top of that, Firefox is genuinely incredibly important. It's the only modern browser left outside of
Safari that isn't built on top of Google's Chromium, and for that reason it's critical that it stays
significant because the alternative is Google (and MAYBE Apple) having the complete final say over every web
standard, and I shouldn't have to explain why that would be really, really bad.</p>
<p>Seriously, please switch to Firefox. It can import your data from other browsers like Chrome, so the
transition should be pretty well seamless. Although, if you're willing to get into the weeds a bit, I'd
recommend using this <a href="https://ffprofile.com/">profile generator</a> to fortify your browsing
experience even further.</p>
</details>
</li>
<li>For Chromium testing and the occasional poorly-built website that just doesn't want to run in Firefox, I use <a
href="https://github.com/ungoogled-software/ungoogled-chromium">Ungoogled Chromium</a>.</li>
<li>I currently use the News app on my self-hosted Nextcloud instance for RSS, with the default Android app.</li>
<li>Loathe as I am to admit it, Microsoft's Visual Studio Code is really good. Which is why I use <a
href="https://vscodium.com/" target="_blank">VSCodium</a>, an open-source build with all the telemetry
stripped out.
</li>
<li><a href="https://www.blender.org/" target="_blank">Blender</a> does goddamn everything. It's almost scary. I
use it for visual art, video creation, and modeling and have since mid-2020.</li>
<li>
<a href="https://www.reaper.fm/" target="_blank">REAPER</a> has the benefits of being both available for Linux
and sanely priced.
<details>
<summary>More details</summary>
<p>As of writing (2022-07-18), I haven't released any music made in REAPER yet, but I already like it a hell
of a lot more than LMMS, which is what I've used to make most of my music up until this point. LMMS is a
free DAW with some great built-in synth plugins and the ability to run Windows VST instruments on Linux
natively, and basically nothing else going for it. It's missing a lot of basic functionality that every
other DAW I've seen has and what is there is laid out in a really idiosyncratic way. That said, it's capable
of making some <a href="https://isopod.cool/old/2/audio/bridges.mp3">pretty good stuff</a>.</p>
<p>As for why REAPER in particular, it's the cheapest one there is by a good long way, especially for a
version without artificial limitations (<i>cough cough FL STUDIO</i>), and it's available for Linux. It does
have some problems remembering my settings for the one non-native plugin I currently use, but that seems to
be a problem with the LV2 plugin standard, so I can't really hold that against it.</p>
</details>
</li>
<li><a href="https://www.gimp.org/" target="_blank">GIMP</a> is, frankly, the best photo editor available on
Linux. I'm more comfortable in Paint.NET and would probably still be using it if I could get it running in WINE.
</li>
<li>The music player I currently use is <a href="https://wiki.gnome.org/Apps/Rhythmbox">Rhythmbox</a>. I also quite
like <a href="https://elisa.kde.org/" target="_blank">Elisa</a>, but that one doesn't conform to my theming in XFCE and it bugged me.</li>
<li>For everything that isn't music, I default to <a href="https://www.videolan.org/vlc/" target="_blank">VLC</a>.
It's a free and open-source everything player.</li>
<li>For basic PDF editing, I use Firefox. Did you know it can do that now? For more advanced stuff, the only option I'm aware of is <a href="https://www.scribus.net/">Scribus</a>.</li>
<li>I download my, uh, Linux ISOs with <a href="https://www.qbittorrent.org/" target="_blank">qBittorrent</a>.
uTorrent is adware, don't get anywhere near it.</li>
<li>I use <a href="https://syncthing.net/" target="_blank">Syncthing</a> to sync my photos, music library, etc.
between my phone and my PC. It's simple, reliable, and fully automatic. Eat your heart out, iTunes.</li>
<li><a href="https://www.zsh.org/" target="_blank">zsh</a> largely out of peer pressure from the greater Linux
community. I'm not enough of a power user to notice much of a difference compared to bash, but I do like being
able to customize my shell prompt.
<details>
<summary>More details</summary>
<ul>
<li>I use <a href="https://ohmyz.sh/">Oh My Zsh</a></li>
<li>and <a href="https://github.com/romkatv/powerlevel10k">Powerlevel10k</a> to do this.</li>
</ul>
</details>
</li>
<li><a href="http://guake-project.org/" target="_blank">Guake</a> and whatever other terminal emulator ships
with my distribution.
<details>
<summary>More details</summary>
I also have a <i>heavily</i> customized <a href="https://github.com/hykilpikonna/hyfetch">fetch</a> script I'm currently itching to show off:
<img src="images/2022-12-20_zsh.png" alt="A heavily customized HyFetch (neofetch with pride flags, essentially) featuring, among various stock readouts, fully custom GPU and GPU load and temperature readouts, a fully custom indicator of what media is playing, and a custom to-do list. All of this stuff is absolutely caked in dynamically drawn Unicode box drawing characters and ANSI control codes. The ASCII Manjaro logo has nonbinary pride flag colors. The color theme at play is gruvbox." title="My HyFetch config and accompanying zsh prompt, as of 2022-12-20. The zsh prompt is pretty much stock Powerlevel10k, but the HyFetch above it has been gutted and reassembled out of ANSI control codes and sed commands into something borderline unrecognizable. I'm pretty sure it's radioactive. It's slick as fuck though. The TODO and Playing segments are fully custom and drawn dynamically. I've also configured it to not show when logging in via ssh or the VSCode/kate integrated terminals. Don't ask why I enabled sshd on my home computer.">
</details>
</li>
</ul>
<h3 id="eos">Desktop Operating System - <a href="https://endeavouros.com/" target="_blank">EndeavourOS</a> (Linux)</h3>
<p>My <a href="#compier">main computer</a> runs EndeavourOS with the GNOME desktop environment. I chose it mostly to get the AUR, which has occasionally proved useful, but at this point I'm kind of stuck here because all the config files for my programs are in standard locations, god forbid, and everyone else is on flatpaks now, which fuck that all up for no good reason. I once <a href="https://isopod.cool/blog/posts/my_terrible_distro_hop/">failed to switch to Fedora</a> because of this.</p>
<p>I have a long history with Linux, dating back to 2015 with the first computer I ever owned: a Chromebook that I put Linux on to play Minecraft, which ChromeOS couldn't do in any meaningful capacity at the time. It took me all of nine months to blow it up doing that because it was passively cooled with a plastic shell and not designed to ever go above ~30% usage on the dinky little Celeron that was its excuse for a CPU. After that I got a real PC running Windows, which solved the Minecraft problem so I mostly stuck to that for the next six years, although I did make intermittent attempts to switch to Linux again.</p>
<p>I pulled it off for real in 2021, when I took a combination of upsetting news about the upcoming Windows 11 and an SSD upgrade to my <a href="#pavilion">laptop</a> as an opportunity to swap out my operating system as well. It went pretty well, all told; I wasn't using much Windows-exclusive software other than Paint.NET and some games, the latter of which now run great on Linux anyway thanks to Valve's efforts with Proton. Shame I can't play all my Epic Games Store freebies anymore, though.</p>
<p>My current desktop environment of choice, as previously mentioned, is GNOME. I used to run XFCE, and KDE before that, but I got sick of all my stuff occasionally breaking on me and wanted to see if GNOME would be sufficiently UX-designed that it would Just Work&trade; and Not Get In My Way&trade; and all that. So far so mostly good. I was worried about how well Wayland would work, but it's basically fine, with the exception of Discord not playing nice with regards to screensharing.</p>
<h3 id="graphene">Mobile Operating System - <a href="https://grapheneos.org/">Graphene OS</a> (Android)</h3>
<p>My <a href="#phone">phone</a> runs Graphene OS, a hardened, de-googled fork of the Android Open Source Project. I bought a Pixel specifically to run this and I'm glad I did. It's very nice. I'm especially a fan of the improved control over app permissions.</p>
<h3>Web Browser - <a href="https://www.mozilla.org/en-US/firefox/new/" target="_blank">Firefox</a></h3>
<p>I quite like Firefox. It's extremely customizable, especially if you know where to look, the devtools are better, and there's a wealth of privacy tools available that just kind of don't exist in Chrome (including <a href="https://arstechnica.com/gadgets/2024/05/google-starts-deprecating-older-more-capable-chrome-extensions-next-week/">adblockers</a> as of late). It can also edit PDFs now!</p>
<p>On top of being generally superior, I also use Firefox on principle. It's currently the only major browser outside of the Apple-exclusive Safari that isn't built atop Google's <a href="https://chrome.bathynomus.xyz">Chromium</a>, and I don't like the idea of Google having total monopolistic control over all web browsers.</p>
<p>Firefox is one of the only pieces of software I'll actively advocate switching to, so go do it. Do it now. It, like essentially all other browsers, can <a href="https://support.mozilla.org/en-US/kb/import-bookmarks-google-chrome">import your data</a> from its competition, and I'd also recommend using this <a href="https://ffprofile.com/">profile generator</a> to fortify it for maximum privacy while you're at it.</p>
<p>All that said, Mozilla is under questionable management at the moment and kind of in Google's pocket anyway, so maybe we shouldn't be relying completely on them to champion the free web. Maybe throw some money in the general direction of the <a href="https://servo.org/">Servo</a> project.</p>
<p>I use the <a href="https://f-droid.org/packages/org.mozilla.fennec_fdroid/">Fennec</a> fork of Firefox on mobile, and <a href="https://github.com/ungoogled-software/ungoogled-chromium">Ungoogled Chromium</a> for the occasional poorly-built website (usually streaming services, work stuff, or banks) that doesn't want to run in my weird paranoid Firefox config.</p>
<h3>RSS Reader - Nextcloud News</h3>
<p>It's not so much that I <em>like</em> Nextcloud's RSS reader, it's more that it's the best one I've found that syncs my feeds between devices and updates them regularly in the background. If I could find a nicer, more polished one, I'd probably switch to that. Let me know if you find one.</p>
<h3>IDE - <a href="https://vscodium.com/">VSCodium</a></h3>
<p>Microsoft's Visual Studio Code is, loathe though I may be to admit it, my favourite IDE I've ever used, which is why I use VSCodium, an open-source build of VSCode with all the telemetry and shit stripped out.</p>
<h3>3D Graphics - <a href="https://www.blender.org/">Blender</a></h3>
<p>Lucky that the only 3D graphics program available on Linux just so happens to also be the best one. I use this sucker for just about everything it can theoretically do, from CAD to video editing, and even some things that it's actually good at!</p>
<h3>Photo Editor - <a href="https://www.gimp.org/">GIMP</a></h3>
<p>Honestly, what were you expecting? If you want to edit raster graphics on Linux, GIMP is more or less the be-all-end-all, unless you want to do everything in the terminal with ImageMagick. I'd prefer to use Paint.NET or even my Legally Obtained DRM-free copy of Photoshop CS6, but somehow photo editors are one of the only things that are consistently incompatible with WINE. I've been meaning to give <a href="https://www.photopea.com/">Photopea</a> a shot.</p>
<h3>DAW - <a href="https://www.reaper.fm/">REAPER</a></h3>
<p>My primary motivation for choosing REAPER is that it's available for Linux. My secondary motivation is that it has a lot less of the bizarre idiosyncracies and feature omissions that I found limiting when I was using LMMS. It's also cheaper for a perpetual license than even the shittiest most artificially-limited versions of most of the other major DAWs, although it's not like I can run any of them anyway.</p>
<h3>Media Players - <a href="https://wiki.gnome.org/Apps/Rhythmbox">Rhythmbox</a>, <a href="https://mpv.io/">MPV</a>, <a href="https://www.videolan.org/vlc/">VLC</a></h3>
<p>I use Rhythmbox for music, MPV for video, and VLC for anything that doesn't open one of the other two when I click on it. All three are very boringly good at what they do, and all three are varying levels of fugly.</p>
<h3>Torrent Client - <a href="https://www.qbittorrent.org/">qBittorrent</a></h3>
<p>This is the program I use to download my, uh, Linux ISOs. And local copies of Wikipedia. At least one of those is actually true. I've got it configured to only work through my VPN. I don't know if my ISP would actually get on my case if I torrented anything... unscrupulous without it, but I'd rather not risk it.</p>
<h3><a href="https://syncthing.net/">Syncthing</a></h3>
<p>Syncthing is a peer-to-peer automatic file syncing program that I use to automatically sync files between my phone and PC, peer-to-peer style. It works really well and I really like it. I get my photos on my PC and my music library on my phone with zero effort!</p>
<h3>Shell - <a href="https://www.zsh.org/">zsh</a></h3>
<p>I switched to zsh largely due to ambient peer pressure from the wider Linux community, and I doubt I'm taking full advantage of its many advanced features, whatever those are, but I do quite like how conducive it is to customization with such programs as <a href="https://ohmyz.sh/">Oh My Zsh</a> and <a href="https://github.com/romkatv/powerlevel10k">Powerlevel10k</a>, and I miss its improved tab completion and command history functionality whenever I'm ssh'd into one of my servers.</p>
<div id="leftsidebg" style="background-image: url(bg.jxl), url(bg.jpg);"></div>
</body>