cringe is necessary for growth

Unfortunately, I cannot find the original source for this. This version I modified to add a representation of my own attempts to be cool ending up in cringe.

A common lie about the development of anything valued is that the people making it were cool the whole time, that they knew it would be perfect and loved. This leads to pushing people away from creation because they think they can’t do bad on the road to doing good.

Bad art is essential for good art, and this applies more broadly to just about anything. You don’t make progress on success, you make progress on iterative failure, repeatedly getting just a little closer every time, until you find success.

This is a video I made about a large collaborative piece of bad art that was deleted for profit, rather than serving as a place to continue to grow and learn from.

Unicode

Sloppy drawing of a stickfigure poking an open laptop with a stick while saying "C'mon. Do Unicode."
“I just got a new macbook and changed its hostname to 검은별. Surely this won’t cause any problems. Every program that uses a hostname uses unicode, right?”

Online privacy protection only works when we all participate

In a group chat I’m in, the following was said (details modified/removed to protect anonymity):

I haven’t searched for topic in Google. I searched on a privacy-protecting search engine. I talked about it with a coworker on an internal chat tool. And now, on my personal device, YouTube is showing me a video explaining topic.

Android devices in particular do listen to you1 and send data to various companies. While Google claims to only listen when directed and with permission, they are often caught listening without explicit permission. They have a strong incentive to collect as much data as they can, but I don’t think this is the cause.

Shadow profiles are like accounts, but created without permission for tracking purposes. They do not always uniquely identify a person, but they usually do. I am confident YouTube builds these and tracks connections between users (signed in or not), and tests their presumptions about identity by showing videos recently watched by someone related to you. It confirms these relationships by your interactions.2

That may also not be the cause, because ultimately, YouTube’s algorithms are a pattern-matching machine sifting through a hoard of data. Relatedness can be found in unknowable ways. It’s spooky to us because we cannot imagine how these connections are made, but they are nonetheless real – or made real by the machine.

They are definitely doing shady tracking because suggestions are too precise to only be accounted for by spurious connectivity.

Have you ever looked into browser fingerprinting?

It’s shockingly easy to identify users3 from standard data available to anyone. You as an individual can’t fight it because when you genericize your data using privacy protection features, you are put in a group of similar users so small that the remaining traces (like loading times) become enough to uniquely identify you anyhow.

As an individual4, use privacy protecting features whenever you can, because they only work when we all use them, but know that we must also fight back as a culture. We need systematic change to regain privacy, and that only happens with laws and social movements.

Lobbying is evil, but necessary in the world we live in. There are many organizations that call themselves privacy advocates, but most of these are actually fronts for business interests. Startpage’s Privacy Organizations You Should Follow is a list of organizations actually interested in preserving privacy instead of controlling access to privacy.

you keep saying “privacy protection features” like I know what that is

The easiest first step is to use a browser that protects you by default, like Vivaldi or LibreWolf5. Conversely, Chrome is the worst browser to use – it’s the most popular because of a concerted data collection effort by Google. Brave has a number of issues6, but is likewise strongly marketed as privacy-focused. All warfare marketing is based on deception.

Another easy step is to install a VPN. Use Private Internet Access, as they are the only VPN to consistently be proven by legal actions to not collect user data. (They’re also the cheapest!) Despite popular VPNs claiming to offer full privacy just by being installed, VPNs only hide one small part of how you are tracked online. They are a good tool, but do not offer that much protection, and they do slow your connection somewhat.

If you want to go all-in, I’ve stumbled across A Comprehensive Guide To Protecting Your Digital Privacy by Thessy Emmanuel. Even by a glance, I can tell it’s a pretty good resource, and it even covers things you may not expect like how cities track you.

Footnotes

  1. MSN is trying to block archival, but I managed to get a copy here, and made my own.
  2. I say this from personal experience. I have used a wide variety of devices in a variety of locations with different levels of privacy protection enabled. Across all of this, YouTube is able to accurately associate video recommendations with either no data – the first time YouTube is loaded – or very little, such as after watching a single video.
  3. The title of this article is misleading, but it is very thorough.
  4. I really need to write something about how and why individualism is a poisonous concept (archived copy). Ever heard of “divide and conquer”? That is the reason why most articles present options to you as an individual person, and frame things as your responsibility. By focusing on your choices, we absolve the guilt of those truly responsible for societal problems – companies, institutions, organizations.
  5. LibreWolf is superior in terms of privacy protection, but does have minor usability issues as a result, and I do not recommend it unless you are already comfortable dealing with minor technical issues from time to time.
  6. You’ll notice quote the rebuttal to the claims made at the top of this forum thread. Some of these are accurate, some may not be. I chose this as my source to highlight these issues because to me, it is more important to acknowledge that Brave has regularly made bad decisions and then reversed them, while Vivaldi and LibreWolf have not made these blunders in the first-place. A team truly devoted to making the best browser for you does not keep making these kinds of mistakes and having to error-correct, they make good decisions from the start.

Updated 2025-06-23: Well, this is unexpectedly timely.. here’s a video talking about VPNs specifically, and how they don’t protect you nearly as much as VPN companies pretend they do:

– The Hated One

How to check if ANY browser is installed in Linux (even more updated)

Updated: 2025-06-12
(If you just want to know my solution, skip to Reading .desktop Files.)

Linux is a very powerful operating system that gets more user-friendly by the year, but it still has glaring holes. Today, I discovered there is no reliable method to finding out if a browser is installed.

Searching online reveals that most people only care about knowing if specific browsers are installed, or are content with the incomplete option of only checking for the most popular browsers (currently Chrome, Firefox, and Opera). The which command works fine combined with a resource like LinuxConfig.org’s List of Browsers available on Linux, but now your script requires periodic maintenance to add more browsers to the list1.

The next most common answer online is to see if xdg-open exists, based on the assumption that a browser must be installed if xdg-open is installed – this is simply false. You also can’t query xdg-open to see if it can handle URLs without opening a URL. If you use this method, you are effectively attacking the user with a pop-up2.

I’ve also found documentation for update-alternatives, but it requires knowing exactly what name it uses for browser entries. I was told to use x-www-browser, gnome-www-browser, and just www-browser. None of these work, and the command doesn’t allow you to list all of its entries because the --all option forces you into an interactive session to configure every single option it has. I refuse to go through that mess just to find how browsers are defined.

This should be simple, shouldn’t it?

Worse, I’ve also found multiple users stating that this fails to adhere to system defaults on Ubuntu, despite it being Ubuntu’s official default method.. and it doesn’t even WORK.

There’s also Debian Wiki’s DefaultWebBrowser which is somehow too dense and too sparse, and in light of what I’ve already tried – nonsensical. Suggesting the use of a $BROWSER environment variable strikes me as particularly insane6.

The best option I can find right now is to manually scan every menu entry for programs categorized with WebBrowser3. This still excludes some options, is convoluted, and has the possibility of failing due to mistakes in menu entries. But it’s the closest to a future-facing solution I could find.

(While asking an unrelated question on the Linux Mint Forums, I did get more information about browser defaults, which you may find useful.)

Reading .desktop Files

Update: xdg-settings get default-web-browser basically has already done what I was doing here5. If anything has a .desktop file for a browser, that should return whatever default has been selected, thus telling you a browser is installed.4

Menus in Linux use a standard format to describe programs/actions so they can be automatically organized. Even some CLI apps create these entries as well. These are organized by predefined Categories, including WebBrowser. While this may still exclude some niche browsers, the users of such browsers likely will know how to handle this incompatibility, and are very very rare.

The only issue with this solution is finding the files and having to parse them yourself. This is still a little tedious, but will last longer and detect new browsers automatically. Unfortunately, the only information I found on where these files should be is conflicting slightly. The Arch wiki says they are in 3 specific locations, but the actual spec excludes one of those and specifies an environment variable where the rest are located. So I check all of these locations, scan every file, and look for two things: 1) A Categories key with “WebBrowser” in it. 2) No Hidden key.

For my specific use case, since I only need to know a browser is installed, I can exit this search on the first hit, but obviously you can use the spec to actually find which browsers are installed, and even launch them or show their icons!

For reference’ sake, here’s what a .desktop file for LibreWolf could look like:

[Desktop Entry]
Type=Application
Name=LibreWolf
Comment=Privacy-focused web browser
Exec=/path/to/librewolf
Icon=/path/to/icon.png
Categories=Network;WebBrowser;

What the hell am I doing this for anyhow?

I’m writing a script to help me automatically select and install packages on a Linux system so that I don’t have to remember or constantly look up how to install things that aren’t part of the standard package management of my system, or the names of things I may have forgotten about because I use them rarely.

The fundamental design of this script includes the ability to run installs and configurations in any order, except where dependencies require a specific order. Part of it removes Firefox due to Mozilla’s recent privacy violations7, another part adds a replacement browser, but other parts of the script require a functioning browser to function. Initially, I thought I just needed a check to see if any browser is present, but later I realized I need to be able to count how many browsers are installed. While I’m glad I found out there is a simpler way to check for any browser, I’m still using a manual scan of .desktop files because I need to count them.

(As I write this, I realize that while my current solution addresses most of my needs, I should have each browser-requiring section of the script verify a browser is present, instead of requiring the user to briefly have two browsers installed at once. While I still think it’s better to not remove a browser until its replacement is installed just in case, there is a hole in my dependency management here – especially because the user can do their own things outside of my script, obviously.)

Footnotes

  1. Any decision that adds future maintenance costs should be made very carefully and avoided if possible. Do you really want to devote a portion of the rest of your life to making sure this keeps functioning? Do you really want to limit your list of acceptable browsers to only what’s popular now?
  2. How long has it been and we still don’t force applications to open without stealing window focus at an OS level? There are always heavyweight applications, no matter how fast computers get, and computers are fundamentally designed for multitasking. We should be able to start a program and do something else while waiting for it to open, without the risk of random inputs being sent to the program when it is finally ready. Combine this with the fact that many programs steal focus before they’re even ready to accept input and it’s a garbage user experience.
  3. Thanks to Arran Ubels on StackOverflow for helping me find this answer.
  4. In theory, a browser could still be installed that has its desktop file in the wrong place, but then it is likely the system won’t recognize it for using open or similar commands anyhow. For my use case, that means it is not worth continuing to look for a browser being installed, but depending on what you’re doing, you may want to search further. Heck, if it’s really important, you might want to find every desktop file on the computer to check for a browser – though at that point you should probably just be doing something to ensure a browser is ready yourself instead of trying so hard to find an extant badly configured browser..
  5. Thanks to @CcxCZ on Telegram for telling me about this command! It’s really strange that it didn’t appear anywhere in my searches for information on this.
  6. It was pointed out to me that I should elaborate on this: Environment variables are easily manipulated and overwritten accidentally when they have simple names. (For a counter-example, I don’t worry about referencing $XDG_DATA_DIRS because it is unlikely to be screwed up.)
  7. A more aggressive take on it. While they can legally defend themselves on the basis of no evidence of violation occurring so far, so can every company that regularly destroys your privacy. Companies don’t remove assurances about privacy unless they’re going to stop protecting your privacy. Companies do not care about your privacy.

Updates

  • Updated 2025-06-12: Added a link to a thread on Linux Mint Forums that has additional information about default browsers.
  • Updated 2025-06-08: Added a section explaining why I’m doing this differently than the simple solution at the end.

i made a forum

Real-time interaction has been too much for me, and I miss forums, so I made one at https://forum.tangentfox.com/. You should check it out. I’ve temporarily allowed posting without a login to try to get people talking.

Since I recently decided I’ll “cross-promote” videos when I have blog posts that are otherwise meh, here’s what happened when I first tried KSP 2: