noirscape

Some dude with some opinion

Or: How to improve your asyncio code!

So uh... yeah, this is just a definition. I'll quickly explain why this is. Also, I'll note that I wasn't brought up on this idea on my own, it's essentially something I found online but I think it's important to keep in mind that a lot of people who do asyncio don't use this pattern and spreading awareness of it will help a lot!

(I modeled this design document after the ones on oodesign.com, except y'know, I use Python code instead of Java)

Producer-Consumer-Worker pattern

Intent

When working in asynchronous code, usage of the producer-consumer pattern is common. The producer-consumer-worker pattern builds on this pattern.

The solution provided here is the Producer-Consumer-Worker pattern.

Implementation

This UML is probably wrong, but at it's simplest:

  • The Producer adds a task to the Queue.
  • The Consumers duty is to retrieve a task from the Queue.
  • When the consumer retrieves a task, it starts a Worker.

Applicability and examples

The reasoning for this is that the normal producer-consumer pattern is not useful for asynchronous code, as it is not resistant to potential exceptions. When running asynchronous code, one of the benefits is that even if one part of the event loop crashes, the rest of the loop can keep running. However in a traditional producer-consumer pattern, this means that in the situation the consumer crashes, the producer will aimlessly keep adding tasks to the queue without a consumer to answer it.

Specific problem and implementation

Example involving possibly crashing code

import asyncio
import random

queue = asyncio.Queue()

async def producer():
    task = {}
    task["crash"] = bool(random.getrandbits(1))
    await queue.put(task)

async def consumer():
    while True:
        task = await queue.get()
        loop = asyncio.get_event_loop()
        loop.create_task(task)

async def worker(task):
    if task["crash"]:
        raise Exception("Crashed!")
    print("Didn't crash!")

async def main():
    loop = asyncio.get_event_loop()
    loop.create_task(consumer())
    for _ in range(0, 10):
        loop.create_task(producer())

asyncio.run(main())
Explanation of methods and objects involved
queue

This is an asynchronous Queue, as provided by the asyncio standard library. It provides the queue that both the consumer and the worker use.

producer()

This asynchronous method determines on a random basis if the worker should crash or not, and then adds the output to the queue.

consumer()

This asynchronous method is started when the event loop begins and constantly waits for new input on the queue (This is what the await queue.get() call is for).

After that it creates a new task for the worker with the task as the assignment and adds it to the event loop.

worker(task)

This asynchronous method is created and started by the consumer. It simply runs a check on if it should crash, and if it does, it raises a generic Exception. Otherwise, it prints a message.

main()

Main asynchronous function and the entrypoint. It starts the consumer and creates 10 producers.

asyncio.run

stdlib function that starts main.

Conclusion

Without the worker involved in this task, if the asyncio consumer crashes (even though in this example it's arbitrary, in cases when working with web APIs which might not always be online) the entire consumer portion would be halted and as a result the loop would seemingly be able to continue fine but as the consumer would no longer be running, the producer will just add tasks to the queue without them ever being ran.

This also improves concurrency as the worker is another task on the event loop, which means that the consumer can continously keep retrieving tasks from the queue without it being blocked by the execution of said task.

I've wanted to write about Stallman for a long time. Countless drafts have turned through my head, considered arguments and article structure, but whenever I actually wound up sitting down to write them out? I just felt mentally too tired to actually write them.

Not right now though. With Stallman having resigned from the FSFs directors position, I think it's important to take a deeper examination as to why Stallman resigned, what the issue is with Stallman as a whole and most importantly: What this means for the future of the FSF/GNU.

Why Stallman resigned

It's been iterated on a lot, but long story short, a few days ago, Stallman made some appaling comments on the MIT/CSAIL mailing list. These comments specifically concerned Marvin Minsky, the creator of the MIT AI lab. Minsky was one of the people that was implicated in the controversial pedophilia case surrounding Jeffrey Epstein as one of the people that Epstein told one of the accussers to sleep with, however as Minsky died in January 2016, this means that he was never accused formally of the crime (accusations against Minsky came to light in August of that same year).

The comments in question have been incorrectly cited by major publications (specifically, the publications went with the narrative that Stallman said that “she [Epsteins victim] would have been entirely willing”, which is a subtle misquote, as the word missing is “have been presented as entirely willing”, but the difference is somewhat minor-ish on the whole, but more on that in a bit).

As a result of this fallout, Stallman has resigned from the FSF and has been let go from MIT/CSAIL as a 'visiting professor'.

Now, one can argue that because the publications went with an incorrect quote, Stallman is essentially absolved from any blame and this is just another call out from “the esjeedoubleyous that want to destroy tech”. However, I would instead argue that the actual difference between what Stallman was claimed to have said and what he actually said is there, but the resulting impact should still have occurred, because the comments are reprehensible either way.

To be precise, what Stallman said was that Epstein likely coerced his victim to appear as “willing” in front of Minsky. Now this if youre debating on Stallmans level seems like an important distinction. If you live in non-crazy land, this distinction barely matters, because, coercion or not, “I didn't know about it” isn't an excuse that holds up on crimes of this magnitude.

It's also quickly forgotten by most comments I see made on the matter that Stallman tossed this up as an hypothesis, with little evidence aside from “Stallman thinks its logical for Epstein to do this”. You know what we call that? An argument that runs on Appeal to Common Sense. Which is a logical fallacy.

I should probably also add in that Stallmans position at MITs CSAIL was entirely because Minsky sponsored Stallman to come on as a visiting professor in the first place (more on this in a bit).

So what we seem to have here is someone who doesn't seem to be able to understand that his best friend likely might have been a sexual predator and is engaging in apologist behavior for said behavior on little ground other than “I think this makes sense”.

This is irrelevant on whether Stallmans hypothesis is true or not (to be clear, even the story Stallman presents would have landed Minsky prison time as a pedophile under the jurisdiction of the Virgin Islands), but his response to the legal argument (which in this case would be decisive) is uh...

“I think it is morally absurd to define “rape” in a way that depends on minor details such as which country it was in or whether the victim was 18 years old or 17.”

I don't think I have to explain this, but... “minor details such as age when it comes to rape”? Are you fucking kidding me? Blegh.

Anyway, the fallout due to this was... well, the usual situation. People got riled up, Stallman attempted to issue a non-apology, later made the utterly baffling statement on his personal political page (more on this page in general later) that sex with minors is a bad thing and that he finally understands that and today he's been let go from CSAIL and the FSF.

Caught up? Good. Now let's see why this is a thing that should have happened a long time ago.

Stallmans political views

No matter how you put it, Stallman is a political figure. FOSS is by design extremely left leaning in it's nature (particularly the copyleft, which is a core element of these licenses). He is also extremely closely tied to the FSF, to the point where I have noted that I see the FSF and GNU Foundation in general of being a personality cult around Stallman to friends.

With that in mind, we oughta talk about Stallmans views, because they're something that propagates heavily throughout the FSF.

To wit:

  • Stallman is a free speech absolutist, with all the core flaws this implies. He'll stick up for any kind of horrific speech and fundamentally misunderstands XKCD 1357 to apply it to corporations.
  • Stallman believes that necrophilia should be legalized, seeing it as the second thing he would want to have happen to his own body after his death (the main thing being used for medical science).
  • Stallman believes that bestiality should be legalized, mainly not seeing the issue because a parrot tried to mate with his arm once and he found it a funny experience after learning what happened and wouldn't mind it occuring again and because some animals try to mate with humans on their own (ignoring the fact that we cannot see what an animal thinks nor can we ask them about it and as a result can't give consent).
  • Stallman believes pedophilia shouldn't be illegal based on the notion that the main issue surrounding it is a social stigma (to be fair to him; due to the incident I described earlier, Stallman has retracted this statement, but he's held it for ~15 years, so it bears mention!)

Feel properly disgusted yet? Well, like I said, these views tend to exist throughout the GNU/FSF, meaning that whenever Stallman gets flak for his political views, there's a large army of defenders for each and every single one of these.

Other things he believes should be legal, but I couldn't find any direct reasons to (although I could deduce the why): Possession of child pornography and incest.

Oh yeah, he also wants weed legalized, but somehow managed to describe it in the most pretentious way possible:

Besides, I often enjoy rhinophytonecrophilia (nasal sex with dead plants).

I uh... that isn't really disgusting (nor bad, legalization of weed for medical purposes I support), but it kinda sets the tone for anything involving him, doesn't it? A pretentious blowhard who says something using complicated words because it makes him look smart.

Moving on.

Personal Hygiene

Do I... do I have to? Okay, I'll spend as little time on this as possible since this is truly disgusting.

Stallman eats gunk from between his toes. I kid you not, there's a YouTube video of him doing this, look it up, I'm not going to for my own sanity.

On computing

Okay, so we've gotten the already weird parts out of the way, now we have to actually talk about Stallmans influence on computing as a whole.

Stallman is oft credited as the founding father of the Free Software movement, it having born from a series of incidents in CSAIL, which saw a large number of those working in it being poached away by larger corporations. Stallman in response made the “heroic” act of leaving CSAIL and starting the GNU Foundation and the FSF.

Why do I put heroic in quotes there? Because yes, the situation at CSAIL from all accounts I could find on the internet was abhorrent, Stallman never really left CSAIL. He formally resigned from CSAIL, but only for a short while, as he later was given an essentially permanent status as Visiting Professor at the lab (this essentially meant that he got a free office, which in Stallmans case also has been his legal address for the past several decades since his house burnt down in the late 1980s and he hasn't bothered to find a new one since.)

Visiting Professor also meant that while he didn't get paid by MIT for being there, he would have full access to all mailing lists and accounts for their faculties. From accounts I have found on the internet, this for the most part meant that Stallman could spend most of his time popping into software lists and complaining that they should license their work under the GPL or asking for projects that used JavaScript in sites to work without them (this because Stallman has an archaic internet setup that means any page he wants to visit gets send to an email daemon, which downloads and reformats the page and then emails it to him). Very impactful work indeed.

It kinda puts things into a different perspective if this hero just turns out to have been in the same place he's been all this time, except now he's free to spend his time to complain at students not following his ideology.

On actual programming now, for realsies!

Let's now get into Stallmans actual relevant work for the Free Software movement. Whilst he deserves credit for y'know, making the GPL and writing the original version of the GNU coreutils... for the past 10 years or so, Stallmans main influences on the movement have been these:

  • Serve as the public figurehead. (with the issues I mentioned in the political views part, so also a PR nightmare)
  • Make PRs to emacs
  • Complain on mailing lists about arbitrary things that irritate him. (GNU/Linux)
  • Abuse his power as the head of the FSF to keep in a dumb joke about abortion that was incredibly Americentric and unfunny to begin with.
  • Use his power as the head of the FSF to forbid merging code that would improve cross-compatability with not-FOSS software.

That's... not good. We've gone from someone who essentially wrote the foundation of Linux's popularity to someone who can at the most positive be described as a grandpa who yells at cloud and at it's most negative as little above a really persistent internet troll who manages to keep in power only because he started with some legitimacy. (The inbetween and the one I subscribe to: Stallman is a demagogue).

In short, Stallmans contributions as of the past decade don't weigh up against his former status as the head of FSF/GNU.

Luckily he's been fired though.

The FSF moving forward

In the numerous drafts I've made of articles of a similar tone to this one, I often conflated the FSF and Stallman, since again, their views share a lot. However, them firing Stallman gives me the idea that either this view was underinformed or perphaps more likely, has shifted over the years.

That said, even though Stallman is now gone, the views that he's permeated over the past decades have not. The FSF will need to get a tight grip on any of Stallmans “followers” that are currently becoming a very vocal minority on the internet that believe that Stallman shouldn't have been let go and that he's the Jesus of programming.

I do express hope here that the dust will settle though, and that moving forward, the FSF can find a better public face for their beliefs than Stallman.

Tackling one common defense

A common defense that I see pop up whenever people address these issues with Stallman (I'm hardly the first to do so) is that we should give him a pass because he says he is neuroatypical (aka has autism).

I very likely have a form of autism. Several of my friends have autism. None of us are even remotely close to the appalling behavior Stallman displays.

Autism means that I fail reading the room sometimes, misinterpret a joke as being a serious statement, fail to understand a social obligation and so on. And I have worked hard to not have it happen as often. I have learned social cues, and so have many of my friends. If you wouldn't spend extensive time with me, you probably wouldn't even know I had it.

Stallman putting his defense here on autism is offensive to autistic people. Even if he has it, the excuse isn't that he's autistic, the issue is that he doesn't bother learning how to deal with it.

Being autistic doesn't excuse you from being an asshole. It gives you some recompense, but a consistent repetition of the same asshole behavior over and over again just means you're a goddamn asshole.

Conclusion

🦀🦀🦀Stallman is gone🦀🦀🦀

Tags: #FOSS #Stallman #FreeSoftware

Let's talk about that good old boogeyman of internet security: Passwords. No reason, I just want to talk about it.

Why passwords suck

Let's be honest. Passwords suck. Let's go over why:

  • Too many passwords. Every service needs a password these days. There are initiatives like OAuth that help simplify the process by linking it to a different account, but really that's just shifting the issue to a different service.
  • Too many passwords leads to bad password hygiene: Passwords are often reused (by far the biggest sin of password management).
  • Passwords are also commonly reused, sometimes with a single digit altered.

The band-aid: Password managers

Password managers are a band-aid over the problem. They permit you to create long and secure passwords and you only have to remember your master password to get access to all your passwords.

That said, this essentially turns your password manager into your single point of failure. Once an attacker hijacks your manager, they control your entire system. Not good.

The possible solution: 2FA

2FA is probably one of the few solutions that will prove to be viable in the long run, although to realize it's full potential, it needs to see more use in Desktop tools and be longer than just 6 numbers.

The demon: Apple

Apple sucks. No really, they do. Even with passwords. For whatever stupid reason, sites can instruct Safari to refuse the usage of the Keychain app, and many sites do, thereby obstructing the viability of the Keychain app as an automated password manager.

Screw apple.

Nothing too curious this time, I just wanted to vent a little.

I don't have good files hygiene. I suffer from a tedency to hoard data. And when I say hoard, I mean hoard. All of my computers and laptops are a complete utter mess of files, with stuff often appearing in doubles or left forgotten in some file structure. And really... it's a shame! Like, really. I should be able to do better. So let's try and bring organization to this mess of data and get STRUCTURED.

I mainly write this post as a sort of “collaborative journey”. You basically get to see my direct thoughts on organizing and what systems I'll be using.

Step 0: Defining categories

A very important step indeed. When starting off with organizing data, we first need to look at the kind of data that I have obtained over the years.

In general, I am capable of pointing out these “big” categories:

  • Important documents. These are things like emails, contracts I have had to sign, secure keys and so on and so forth. These in the worst case can linger in my downloads folder.
  • University work. University assignments are very messy. Most IDEs have their own dedicated folder, but when I work on say, an essay, I tend to just dump it in a folder. As a result, most projects for courses exist in about 4 places at once or in a git repository, which are spread out all over my filesystem.
  • Arbitrary downloads I just did to see what I wanted out of them.
  • Anime, movies and media in general.
  • Personal programming projects. Most of these are laid out across my filesystem but in general don't really have much structure. They almost all can also be found on my GitHub or on my Gitea instance, but again not all and I'm fairly sure I have a GitLab account floating around somewhere.

With these big categories sorted out, let's find ways to tackle each.

Step 1: Existing organization software

One that I rolled just in “media” previously are images. I save a lot of images. I think on an average estimate I download anywhere between 50 and a 1000 images per day. The overwhelming majority of this is fanart. I suspect that in total, the amount of images I save are around 75GB, and this number is increasing.

Luckily for me, there is a very easy solution for this. Conventional photo management applications mostly suck, and the manual labor involved to tag this many images is probably not feasible, but luckily for me there exists software specific to solve this issue.

I'm of course talking about booru software. Booru, which is Japanese for “cardboard box” originates from the Danbooru project. A number of implementations exist, and I've actually been experimenting on and off with these for a few years now.

That said, I think I have finally found the booru software that I want to work with. I've been using it for a little over a year now and it's called szurubooru. Unlike Danbooru (and it's direct derivative Moebooru), which is a Ruby project that is... difficult to deploy, Myimouto, which is a PHP project that has lied abandoned for several years (I attempted a short lived fork to implement some minor things, but then gave up since it's fucking PHP and I have better things to do with my time) and Gelbooru 0.1.x (which is not only PHP, but is also fundamentally broken and extremely limited in features), Szurubooru has pretty much hit all the essential hallmarks for an existing organization system that fits my needs.

To make it clear, when I use existing systems, I typically look at the following “main” concepts:

  • Ease of deploy. This is a big one. If your software requires me to sacrifice fourteen goats, scream RMSs name while standing in a pentagram underneath a full moon, I probably will just not use your software. Or in a less comedic tone: Deploying your software should never be more difficult than filling out a configuration file and running a few commands. Dependencies aren't an issue as long as they're clearly defined.
  • Ease of use. Second thing that's extremely important to me: You may have the best software in the world, but if it's nearly impossible to use for me, I'll skip it. A good example of this is Hydrus. Hydrus is intended to be a desktop application that functions like a booru. Unfortunately for Hydrus, the UI is a big mess, it crashes a lot and the author doesn't understand git and uses it like dropbox and the application is extremely clunky. You don't have to be a professional designer to make me want to use your tool, but never leave customization of your UI to the extreme that Hydrus does it.
  • Must be suitable for a single user situation. If your tool works great for communities, then that's awesome! But if you can't make it work for me as an individual, then I'm sorry, but I'll have to pass. A good example of this ties back to Hydrus. Hydrus for whatever reason doesn't automatically accept imported images. Rather, it imports them into an inbox. This is extremely weird, until you realize that Hydrus is more designed to crawl websites for images and the inbox is the approval situation. However in my case, this is completely unneccesary. I get the images using my own sources and I don't have to approve them. It adds a needless step to a reasonably easy process.
  • Easy to “pull out”. Let's face it, software changes over time. Maybe your tool doesn't fully have everything I wanted or you introduced a feature I don't like or something else comes along and I want to use that. In this situation, it should be considered extremely important for me that I can still easily grab my data and move to another platform/tool. This can be accomplished in many ways, but even if it's just “have an API that lets me grab all my data”, it's good enough in most cases already.

Szurubooru hits all of these for me. There's no approval system, usage is as easy as uploading the images (and with a few scripts I use, I can automate that to make it comfortable from my phone and my computer) and the only wrinkle is tagging, which I solved using a python library and a small webapp that can reverse search images.

There's no pointless approval steps in the program either, I can limit signups and pulling out is as easy as simply transferring stuff through the API or failing that, just moving the images folder on my hard disk to my new system.

Oh and it's deployed in less than 5 minutes and updating is just as easy, since it's all done with docker.

Images and short movies: SOLVED.

What about comics though. Comics are another category I kind of have issues with. I collect a lot of them, mainly doujinshi and most are simply stored in a zip format until I want to view them. Luckily for me, again a tool exists that hits the previous needs: Lanraragi. It's perl, but thanks to how well it uses docker, it never needs to take issues with that. Data importing is so easy it's practically not a thing: I just have to put all my doujins in one folder. Pulling out is equally as easy, the zips are never modified while it runs.

Doujinshi: Solved

Step 2: Custom organization software

Okay this tackled a few things. It's not nearly everything though. So how do we fix the rest?

Well, for this I turn to the promising Johnny Decimal system. Johnny Decimal is a system based on the Dewey Decimal Classification. Dewey Decimal is a system designed for libraries to organize books. Luckily for me, my dataset greatly resembles that of a library.

Dewey Decimal uses a simple system, but there's some flaws that require modification to make it work with an individual blip of data.

The idea behind Dewey is that everything exists within a category. For example, books about religion have the super category 200. That means that if I pick a book with Dewey classification 232, I would know that it is going to be about religion. This method continues downwards. So in our previous number, the category 230 is about Christianity specifically (Dewey is an American system, so 200 is mostly about Christian subjects with other religions being a footnote in category 290, which is unfortunate but fuck it, this is an example). Then, for a more specific subject, the classification 232 is about Jesus Christ & his family.

Again, sorry for the religious stuff, but it works well enough to illustrate the core principle: Every subcategory relates to the previous categories in a well established system.

Dewey Decimal then also permits you to go even further and declare specific subcategories on these systems for living or dead authors, for specific fields of a science and so on and so forth.

So should we just copy Dewey and call it a day? I mean, we could, and Deweys system would certainly bring a structure in that data, but it doesn't bring in a structure of data that I would be comfortable with navigating per se.

For example, I download a lot of anime. According to Dewey, all of this would go under 741. But should I really categorize Itadaki Seieki (NSFW!) in the same category as JoJo's Bizarre Adventure? Probably not, unless I want to embarass myself when navigating my file system.

That's where Johnny Decimal comes in. You see, Johnny also examined the Dewey Decimal system and thought it was a good idea. But he changed one crucial element: He doesn't rely on Dewey's specific implementation of the system.

Instead, he encourages you to construct a smaller system and have multiple you can navigate through, with all categories and definitions set up by you.

Johnny's system is particularly appealing if you're a designer or an artist who often works on projects related to their job. His system is great at bringing order to that chaos. But it does have it's limitations that make it somewhat useless to my interests.

So we must break these limitations. Specifically, for me, the biggest issue is that Johnny encourages you to limit your system to at maximum 100 categories, with no more than 10 root categories. Johnny does have an answer if you have more than 10 root categories but it's just not really adequate: It amounts to “have more than one system” or “you haven't properly split out your categories”.

So I'll be doing something a bit more closer to the Dewey Decimal system and move away a little bit from Johnny's system: I have 100 root categories and 999 counter categories. Unlike Dewey, there is no obligation for root category 020 (on my laptop where I do this already; 020 is Multimedia) to relate in any form to category 030 (Projects), but category 021 (Anime) is related to category 023 (Movies).

The actual files themselves are then stored in a subfolder of that. For example, the Neon Genesis Evangelion anime is stored in category 021.001. 001 is just a counter here, it doesn't have any actual bearing on the rest of the anime in that folder (exemplified by 002 being Hellsing Ultimate, a show in a markedly different genre).

This is also where I break Johnny's rule intentionally: Johnny says you should stop at this. Once you reach the counter, everything below that must be a flat structure. That is where I disagree. Consider for a second category 034.001. 034 is my Uni work, and 001 refers to the course Data Structures & Algorithms.

Except here I hit an issue. For category 034.001, my goal is to store both the practical assignments and the college assignments. Johnny Decimal would say that I have to split out 034.001 into two subcategories. This however is weird. After all, 034.001 should be about DS&A, and splitting that out means that I have stuff that is about DS&A but is stored in a different folder, even if what is stored there is tangentially related. To solve this, I simply extend the system with another dot.

To understand this better, here's how I would visit a lesson on Recursion:

cd ~/johnny-decimal/030 Projects/034 University/034.001 Data Structures & Algorithms/034.001.10 Colleges/034.001.11 Recursion

Oh boi. So to unpack this:

  • 030 is about the root category Projects.
  • 034 is specifically about university related projects.
  • 034.001 is about the course Data Structures & Algorithms
  • 034.001.10 colleges is about colleges related to Data Structres & Alogrithms.
  • 034.001.11 is about the college data related to Recursion.

As you can see, here I opted to go for a smaller subset. This is because subcategories just shouldn't reach more than 10 entries (at that point you can just increase the digits anyway, but I would also consider just wondering if you couldn't be splitting up your results better.

Subcategories are optional for me, not every dataset benefits or gains anything from them and some are entirely incompatible with it and require their own structure (for example, a programming project wouldn't be deeper categorizable than this, because of the fact that those projects have their own structures).

And that's pretty much it. I'm currently looking for ways to improve it further, but right now, I use the following two zsh methods to get the most out of this system (borrowed from Johnny):

access_jd_root_function () {
        cd ~/johnny-decimal/*/${1}*
}

access_jd_specific_function () {
        cd ~/johnny-decimal/*/*/${1}*
}


export access_jd_specific_function
export access_jd_root_function

alias cjd='access_jd_specific_function'
alias jd='access_jd_root_function'

cjd allows me to enter a specific directory from wherever I am. ie. 034.001 would permit me to enter the Data Structures category. jd allows me to access 034 (University) just as easily. Syntax is cjd 034.001 and jd 034. Easy as that.

One final thought on mapping out the structure: Easy, yet so hard. I could just use tree, but that would get messy. Perphaps a database system? But those are clunky. I tried airtable as suggested by Johnny, but I didn't like it.

A readme is an option, certainly but markdown table syntax is a pain to use.

I don't plan to use this on emails and the like, those are and always be a mess because E-Mail sucks.

And... I think that's it. That's the system I'll be using to organize my data in a general sense.

Got any suggestions, questions or even improvements to this system? Please let me know! You can comment on this blog with utteranc.es assuming you're viewing it directly and not from a federated site (if you are, just uh visit the original page and you'll find it).

Hooooo boy. The internet sure as hell has blown up as of late hasn't it? I seriously don't envy being an indie game dev these days.

Anyways, for the uninitiated or the late backlash, several prominent indie developers have stepped forward with allegations of abuse from other developers. Whilst I won't touch on the rest, I want to talk today with you about... Starbound.

Image used under belief of fair use. Credits: gog.com

So... Starbound was one of the games that was put under flak for this entire debacle. Specifically, the entire thing was lighted off after the former artist and writer demanrisu, spoke up about going unpaid. This received a lot of flak. Eventually information came to light that the intent was that none of the artists, writers and composers were initially intended to get paid for their work and instead were asked to work for “exposure”.

Exposure

Now me explaining what exposure is is very much preaching to the choir, but for the four of you that haven't met it yet, “exposure” is a term from the creative industry. Specifically, working for “exposure” means that you'll effectively not be getting paid, but you can add that project to your portfolio, meaning you can get an actual paid job later.

It's also an abusive tactic used by con artists. The people that get asked to work for “exposure” usually aren't industry veterans (because the industry veterans know bullshit when it smells like it and generally reject it), but are typically people that just graduated or are still interning.

Now, there's many many people who can tell you about the horrors of this situation and how rampant it is in any creative industry, but I'll just summarize myself to this: If you are currently working unpaid for someone, leave. They're not gonna pay you “later”. If there's no contract that states you get a wage for what you do, leave. Those people aren't worth your time, and they sure as hell aren't making sure you will be properly fed.

If you need to build a portfolio, do it yourself. If you're an artist, make an art gallery, if you're a musician compose music in your spare time, if you're a programmer, make some awesome FOSS stuff. The crux is that you should be doing it and nobody else. You are the only person that you don't have to pay for your work.

Anyway, with that basic bit out of the way (since everyone and their mum has talked about it): Let's talk about a second “magical” thing that popped up during this: The fact that Tiyuri, the CEO of Chucklefish can best be described as a major asshole.

Workplace professionalism

Something none of the big talk really mentioned aside from in passing is the rather baffling lack of professionalism that seemed to have been going on in the company.

Most of my source for this is from former writer Rhopunzel, who has actually been talking about this since 2016 on the SomethingAwful forums 1 and 2 (note: using archive.org since SA archives old threads). And this is.. staggering.

To be clear: The development of the game seems to mostly have been aimless from the start, with the initial design pitch seemingly just being completely ignored for a completely different game. Whilst there is the obvious talk about “exposure” work going on, there's also a couple of “interesting” claims in there.

To sift through this and provide a summary:

  • There were three artists (Rhopunzel, GeorgeV and Legris), three coders (Kyren, Omni and Bartwe), the level designer (Armagon) and Tiy and a whole slew of unpaid contributors.
  • Legris left after the first payment.
  • Tiy also added random girls to the dev chat who'd randomly leave later on. During the more general implosion, Rhopunzel also publicized the actual reason for these people leaving: Tiy purely invited them to flirt with them and then drum them out when it stopped being funny.
  • The game mostly sold based on the merits of being tied to Terraria.
  • Tiy wanted everyone to move to their new offices in the UK. Any developer that didn't want to move over wasn't fired, but was systematically drummed out by dead-ending them. Rhopunzel and seemingly bartwe left due to this.
  • The preorder money (the kickstarter) was purely used to ensure the artists and coders got paid. Zero of it all went to direct game development, it was purely to make sure the developers got paid for the work they were already doing.
  • Tiy pulled the same “haha you want to be paid for your work” thing on a Russian, who put keyloggers in the build he send to Tiy in revenge. This is how the game got leaked early on 4chan.
  • Kyren was pretty much hired because one developer was nigh-impossible to work with (considering the names and the fact that Rhopunzel speaks positively of bartwe, this is almost guaranteed to be Omni), and she almost resigned. Then, in exchange for essentially terminating bartwe and Omnis contracts, she became the lead developer and her code is what runs starbound today.
  • Tiy wanted a Serval (a wild cat as a pet) and when told that it would be a bad idea, he wanted a bearded dragon instead.
  • The code for starbound is only good because Kyren was an amazing developer.
  • The company had a “flat business structure”, which meant that there was no management and abusive/mistreating behavior from other employees often went unchecked and the product is mostly aimless as a result.
  • Tiy was just an “ideas guy”. Notably, he'd write everything from a debating perspective, including press announcements, which he would write himself, rather than the actual community manager.

This... this doesn't paint a good picture. No, seriously. If a business does this kind of behavior, see this as a huge red flag to not even come close to them. Find your money somewhere else.

The fact that my job, which is a minimum wage cashier job for a supermarket chain, treats me better than this joke of a company and CEO does is just fucking sad.

Poor game design

But maybe you don't care about that. Starbound was trash anyway, so why bother with it?

The problem is that all of these things directly influenced the game. If you make this claim, you probably started playing either during or after the Giraffe betas. The reason I say this is because up until the Enraged Koala, Starbound was much less trash.

It was Terraria in space. That was what it was, and it had a ton of good lore attached to it. Only a few mechanics, but they were all pretty well fleshed out, the structure of the game made sense and you weren't hogtied to play the game.

Then, during the Giraffe betas, this excellent base of a game was just... tossed out. No, seriously. All the lore was scrapped, a lot of mechanical depth was removed from the game, all of the charm was removed for a “new direction”. This new direction being a couple of predefined missions and removing all of the unique racial gear that wasn't armor and redesigning the game to accommodate to specific playstyles without the weaponry to back it up.

In addition, all the lore was seemingly taken out, presumably because due to the new direction, the old design of the game was too grimdark, which didn't mesh well with the newer, brighter, happier design style they were going for. The new lore is just... inadequate. It's not a fun game, it's not a game that makes you go “wooow, that's actually interesting”. It's a game with a super shallow lore, and everything just feels artificial in places where it didn't before.

Then they added a bunch of new mechanics, that pretty much all have equally as much depth as the hollowed out husks of the former mechanics. The result is that you have a game in which there is a whole lot to do but very little that's actually worthwhile doing.

Combine that with the game also incredibly arbitrary railroading the player in the Giraffe updates (Koalas were pretty much open-ended), and the game also wasn't fun to play. It would introduce a mechanic, then scrap it moments later in exchange for another.

Let me stress this: Starbound went from a well balanced and well designed, Early Access game that I bought and loved for the fact that it seemed so promising and so finished to a game that was more unfinished from when I started playing it.

And this is something that confused me so much up until this day. Like, I never really pointed it out because if I'm being honest, there's much more time I can spend than talking about a trashy indie.

But adding the previous mismanagement of the games structure on top of it all? Well. That's an explanation. A really fucking good one. If all of your designers, artists and coders left because they weren't paid or because the CEO was a twat and you seemingly had to scrape by with whatever people would be willing to uncomfortably accept your trash? Hell, at that point I'm surprised the game turned out as good as it did.

Conclusion

Fuck, I guess we have to do one of these now? I mean, I kinda did one. But... I might as well do this anyway. I have a wiki page on my github to download older versions of Starbound. Give it a go! To be clear, the command you would need to get Enraged is

download_depot 211820 211821 1181941016889826211

Give it a go, because that's the version that had passion still left in it. Moreso than those working on the game right now I'd say.

Heya, short announcement here, but I now have a comment system on this blog that I can actually read! So if you were following me, you can now also leave a comment and it won't disappear in the Fediverse inbox like normal comments do.

To that end, let's talk specifically about my choice for this: utteranc.es

Why not Disqus

It sucks. Really bad. Disqus if anything is an example on what I don't want from a comment section.

It actively promotes cruft/cluttering talk, the identation on conversations is more tiring than it's useful, it's an absolutely abomination to use on mobile and it's sign in feature is extremely wonky.

So no, I set out with this on the specific goal that I didn't want to use Disqus.

Instead, I'm using utteranc.es

What is utteranc.es

Utteranc.es is a comment tool that maps items on a GitHub issue tracker to a blogpost. This is for my use, nothing short of amazing.

Let me explain why:

  • Most of my blogposts are written from a technical point of view or detail technology. The most likely readers of course are going to be people with a similar interest in technology. This also means that they will likely have a GitHub account.
  • For those who don't trust utteranc.es one time OAuth with GitHub (and you know, that's valid!), once a comment thread exists, you can just comment on it on GitHub itself and it'll magically appear in the comments here.
  • Utteranc.es takes care of all the annoying legwork needed to map and create the issues, at least when working from the comment section on this blog. So that's cool!
  • Spambots usually don't bother with spamming GitHub issues, so there's less moderation needed on that end.
  • I get an email every time someone leaves a comment on a GitHub issue, so why not leverage that to make the comment section a nice thread I can stay subscribed to in my mailbox and comment in as needed.
  • The general linear nature of conversation means that cruft is less likely to pop up. In addition, GitHubs emote reaction feature should filter out a lot of the usual “haha funny lol” and “+1” comments that plague blogposts.

So yeah, it really fits my usecase well. I have it set to map on the og:title, so issue titles should map seamlessly to the dumb titles I give these posts.

Give it a go down below if you're brave enough to put up with my unfunny jokes!

I didn't want to do this. I legitimately wanted to give DYKG a chance to fix stuff. But it didn't happen and now we're left with nothing else. Time to write that original blog I said I was going to write a while ago.

DYKNG

Preface

Okay, so to those of you who didn't understand that previous paragraph, allow me to explain. 2 weeks ago, as of writing, Did You Know Gaming (the YouTube channel) put out a video about Nintendo Switch Piracy & Hacking. And... it's bad. Like, REALLY bad. It's rife with outdated and incorrect information and goes out of it's way to characterize the entire Nintendo console homebrew scene as nothing more than a den of pirates.

In case you didn't know, I kinda give a fuck about the homebrew and hacking scene. I've met friends and the like there and I love seeing people make awesome stuff for Nintendo consoles, which in and of itself remain to this date just about the only consoles I wholeheartedly recommend.

So... when this video came out and I watched it, I kinda got irritated and considered writing a blogpost about it at the time. That post was never made, because a friend of mine had informed me that DYKG had reached out and asked involved hackers and scene members to point out exactly what was broken with the script[1]. Whilst at the time I was busy and a number of people had pointed out flaws before I could get to it, I opted to not write the blogpost in question. Instead, I gave DYKG the benefit of the doubt. I would wait and see what they would do and give tips on what was incorrect in their script. Supposedly, they would be retracting their previous video and creating a new one based on the concerns we raised.

So... I waited. For reference, I first got confirmation that the script that we added comments to was send off to DYKG for the first time on July 15th. As you can see, it is 28th of July. To the best of my knowledge, DYKG has not responded in any form to the modified script in any shape, way or form. Nary so much as a comment on their original video, a response to the email that was sent to them, anything on their Twitter feed. I have checked this.

With me getting this out of the way, my patience sort of has run dry, as one might guess. So let's make that original blogpost. Let's do a minute-by-minute takedown on DYKGs original video.

For those of you who want to watch along, I have put an embed below or you can watch the video yourself here

Beat? Set? Go.

The setup will be as follows: I will go over the video on timestamps. I'll clearly state if there is a visual or a script concern/error (the video has issues on both of these ends).

first couple seconds are a promotion for the since passed New Jersey GamerCon. As these do not relate to the video, I will skip over them.

  • 0:21 Visual concern: The intro screen. Solely focuses on piracy, there is no mention of hacking whatsoever. Strange for a video that claims to focus on both.

Hacking

  • 0:43 Script error: 7.0.0 did not introduce a “scrambled batch of code”. It introduces a signed[2] TSEC[3] payload that prevented CFW that booted Horizon[4] from working.
  • 0:53 Script error: “elmirorac” is motezazer. elmirorac is their Twitter handle.
    • General concern: No mention about the actual method that was devised to get past this. It's called sept and could definetly get a mention in the video.
  • 0:57 Script error: I can't fault DYKG too much. Most tech media took this single example of “cross-pollution” so to say and ran with it, whereas it so far has not proven the case on other hacked Switches, meaning it is for all purposes an unverifiable claim.
  • 1:12 Script concern: “A bug found in the Nvidia Tegra X1 allowed hackers access to the Switch's bootrom to install a range of programs on the Switch”. This is more... confusing than incorrect. The Tegra X1 bug (known as fusee-gelee) allows access to the Tegra's own Recovery Mode which due to an exploit permits unsigned code execution. Due to the specific methods involved for Switch Hacking, generally nothing is ever installed to the Switch itself (everything exists on the SD card).
  • 1:40 Visual error: This is the Recovery Mode of Horizon[4]. It is not the Recovery Mode of the Tegra X1. That mode does not have a GUI and is just a black screen. This issue pops up several times in the video. In combination with the script talking about the X1,
  • 1:47 Script concern: While switch-linux is interesting, it more or less works seperately from the actual homebrew involved and can exist completely separate from any CFW. (In addition, it would be recommendable to instead show footage from linux4tegra, as it is better performance wise, especially for dolphin footage.)
  • 2:04 Script concern/error: A mixed bag of both. Nintendo didn't really fix much of anything. They simply decreased the maximum allowed payload size (configurable only while the Switch is still in the factory) to 0. While an actual fixed chip exists (called Mariko. This one is all but guaranteed to be in the Switch Lite, with the only reason we can't say it is being that nobody got their hands on one yet), this one is not out yet at the time of writing in regular units.
  • 2:16 Script concern: “Model 1” is a very weird way to describe these Switches. The most common designation is typically unpatched, but as this might not work narratively for the script, launch Switches is also an option.
  • 2:28 Script concern: Kate Temkin is cited several times throughout the video. Whilst inevitably, this is unavoidable to some extent, the video does not in any shape way or form make clear that she is no longer involved with Switch Hacking in any form, due to selling someone else's exploit to Google without that persons consent. As a result, most quotes and mention of her work tends to be outdated or inaccurate in this video due to advancements and new knowledge on the Switch.
    • Kate did not make fusee-gelee. Fusee-gelee is the name of the exploit (which the video doesn't fully make clear, but fail0verflow discovered the same exploit but called it ShoFEL2), mentioned earlier, she did not make the launcher (that would be a program called fusee-launcher.)
    • On that note, whilst Kate did report the bug to Nvidia and Nintendo, an anonymous user on the board 4chan either found or leaked the bug about a month before it's official disclosure date.
  • 3:18 Script error: This developer should be called langer hans, not by their real name (It is generally impolite to use real names if users have handles that can be used instead that aren't outright indicative of their real names). Their work however should also be credited under the switchroot hacking group rather than their individual work as it is the result of collaborative work.
  • 3:25 Script concern: Freebird is indeed capable of overclocking, but the project is not open source, meaning that mentioning it is a security concern, particularly since an open source version exists (sys-clk). In addition, both tools permit overclocking (and underclocking) the CPU, not just the GPU.
  • 3:33 Script concern: Amir Rajan has little involvement with the hacking scene, nor is he an indie developer. He instead merely ported the mentioned game over. In addition, the Ruby interpreter in question was vulnerable to an exploit (as well as being a thinly veiled sales pitch for a paid 40$ Ruby programming library Rajan developed).
  • 4:41 Script error: DevMenu is part of the SDK. It is not a part of the Switch itself. One doesn't “break into it”. One deliberately chooses to install it and it was leaked online (with all legal ramifications of sharing software that was granted under strict non-disclosure agreements). There is nothing 'innocent' about this.
  • 4:52 Script concern: This puts the square of the issue in the hands of the hackers. The real fact of the matter is that the Switch merely uploaded whatever was set as the profile picture to Nintendo's servers, rather than issue a request to set it remotely.
  • 5:11 Script error: This is ass covering. Reis general behavior outside of public locations (such as Twitter) seem to suggest more that Rei is the type of person to actively encourage this kind of behavior. To suggest he's actually sorry is nothing short of a lie.

Piracy

  • 6:21 Script concern: This is a very simple boilerplate way of explaining the Warez scene in general (not particular to the Switch) and could easily be left out, given how it's both inaccurate for the specifics of the scene and doesn't really work in general.
  • 6:36 Script concern: This characterizes any and all developers who do reverse engineering or coding work in the scene as doing it purely for piracy due to it's position in the video. Numerous people in the scene do not do reverse engineering work for the sole purpose of piracy, but rather do them in order to allow general purpose homebrew to exist and work. Often reverse engineering has little to do within regards to piracy itself but is more about permitting custom programs (homebrew) to be able to access more in the Switch (such as the internal browser).
  • 6:52 Script and Visual error: This is not how Switch piracy works and it somehow mischaracterizes game keys (which can often also be found in physical copies these days) as purely being reviewer keys. In addition, the suggestion is made that these keys can be reused. They cannot be.
  • 7:02 Script and Visual error: Hooo boi. This one is so massively wrong. Where to start. Let's do it in sequence
    • Visual error: See what I wrote at 1:40.
    • A “boot menu” isn't installed. Assuming this is referring to a bootloader, it isn't even downloaded to the Switch but rather to a peripheral device which then sends the bootloader to the Switch.
    • The “boot menu” doesn't launch homebrew. It is purely a bootloader, similar to the purpose of grub on an actual PC. It lets you choose what to boot. The actual homebrew menu (a piece of software designed to launch homebrew) can be loaded in if the bootloader is set up to do so.
    • Similarly wrong here is the supposed need for an external program to launch these games. Signature patches to two specific Nintendo Switch modules are needed for piracy, but they are not separate programs.
  • 7:26 Script error: This version wasn't uploaded to 4chan but rather to a piracy guild.
  • 7:29 Script error: DAuther isn't a piracy tool. Rather, it is used to generate a token that permits browsing the eShop (and even then only the metadata backend part is accessible, meaning no piracy can be done using it.)
  • 7:41 Script error: A certificate is not a “code”.

Team Xecuter

  • 8:48 Visual and Script error: Visual error is that you're showing off “SX Installer”, a rebranded illegal copy of “DZ” (a program which I've written about before in the context of it's developer). The script error and I cannot believe you're making me say something 'positive' (even if that comes with a giant asterisk and several other subquotes) about SX OS is that it since version 1.3 has stubbed out the call to the brick code, meaning it is rendered inaccesible to normal users and the program just loops instead.
    • To revolve this back at TX and DYKG not being accurate though: SX OS's original brick code would trigger the moment it detected anything out of place, including concerns within regards to hardware temperature accidentally being able to trigger it.
  • 9:01 Script error: Accusations aren't accusations anymore if they're proven. And they have been. See my old blog here for the bulk of it.
  • 9:10 Script concern/error: This refers to Kates old Fusee FAQ, which is considered widely outdated. Team Xecuter did not drop the “zero day” (referring to fusee-gelee). This was done by an anonymous 4chan user. This is entirely due to neglect on Kates end, which is sensible considering she's no longer a part of the hacking scene.
  • 10:40 Script error: Again, this isn't a mere speculation, this is proof and it is not a hardware flag. The Nintendo Switch has various reporting services build into it. These reporting services keep track of playtime, crash reports and size of stuff on the MMC chip. If any of these are considered out of place, the user is banned. It should be noted that for non-piracy homebrew, it is sufficient to redirect only the crash reports, as playtime and size reports only end up being off when it comes to piracy (and faking these is a suspicious move as a large number of similar reports will break). These services keep the logs offline until the Switch connects to a wifi network, upon which the Switch will attempt to upload the logs it hasn't uploaded yet.
  • 11:45 Script concern: Team Xecuter are without a reason beyond a doubt horrid horrid people. This statement is flat out false. Their product includes Nintendo code (notably lotus gamecard headers), encryption keys and large parts of GPL licensed software which is not following the requirements of the GPL. Including it leads to inappropriate validation of their statements being taken as fact.

After this a short outro fact plays and the general DYKG outro as well.

Conclusion

I cannot blame DYKG too much for these errors. A large part of this comes from the fact that the tech industry's reporting on console hacking in general is... notoriously poor and for the most part, they seemed to have taken only the reports made by the tech industry for their sources, rather than actually investigating on the matter.

This was my view before I heard of the collaborative effort to try and give them a chance to fix it. With that currently standing at about two weeks in with DYKG essentially having gone radio silent, that view while not completely gone is now in a much more cynical light, considering they seemed interested in attempting to fix their flaws, but aren't following up on them in the slightest.

Quite a shame, I used to really like Did You Know Gaming.

Credits

To the many people who made the Switch scene possible. As well as special credits to the original people involved with the editable document for pointing out stuff I missed.

Extra notes

[1]: I do not consider this private information. The document that was used for edits was publicly available in ReSwitcheds #off-topic channel. [2]: Signed: This means something is valid or created by a specific entity. The cryptography parts involved around this is beyond the scope of this post. [3]: The TSEC is a specific processor on the Switch's motherboard that handles security. [4]: Horizon OS is the Switch's “official OS”.

Oh boy... time to get writing about the Fediverse again. Well, that's gonna be fun. Let's talk about blocking instances. Or specifically, I want to help people understand what an instance block actually does, what it doesn't do and the method you can use to -completely- block an instance.

Instance blocking

So, as disappointing as it is, the internet isn't just filled with happy go lucky people who just want a casual chat. It's also filled with several bad actors. People who, if given half the chance, will actively promote hateful or inciting content.

These people also, for somewhat obvious reasons flock to decentralized software, such as Mastodon and Pleroma.

To counteract this, both Mastodon and Pleroma offer control over what instances are shown to the user. Mastodon offers domain suspensions or removal from it's global timeline, whereas Pleroma offers the “MRF”, which offers the same features as Mastodon offers, but can also be used to for example enforce CWs or marking images as NSFW on all incoming posts from an instance.

I'm not here to name any instances or what kind of block policy you should enforce. That isn't my duty. There are many blocklists and block advisories out there that you can use to see what instances are awful and which are not.

Instead, let's talk for a moment about how this affects federation.

What an instance block does.

If you block an instance through Mastodon or Pleromas interface, what you end up doing is stopping users on your instance from accessing the blocked instance through yours. In a sense, it's the equivalent of muting a user on Twitter, except it's applied to your whole instance.

This is all it does. It's essentially a firewall against incoming messages from another instance.

What an instance block doesn't do.

An instance block is not a silver bullet against stopping harassment or harassing users. While it prevents their harassment from landing in your users inboxes, it doesn't stop them at all from reading the statuses your users post on their accounts.

As a result, an instance block is entirely one-way. To illustrate this, I think it's best to give a sample situation.

Meet our three users. Alice, Bob and Caroline. Alice hosts an instance on the fediverse that Bob makes use of. Caroline is on another instance. Thanks to the power of the fediverse, Caroline can see Bobs statuses and the other way around.

Now, suddenly, Bob and Caroline have a huuuge fight, and it ends up with Caroline publishing doxxing information about Bob on her account. Alice in response blocks the instance Caroline is posting from, as Caroline's instance refuses to clean up the doxxing.

However... Caroline can still see Bobs statuses and can still keep track and find new information to harass him with.

This is an inherent failing in the way both Mastodons domain suspension and the MRF that Pleroma offers are designed, and one that is nigh impossible to counteract through how Mastodon and Pleroma are designed.

How to completely block an instance.

That said, there is still a way for Alice to completely stop Caroline from reading Bobs statuses through her instance. This is by blocking the IP address of Carolines instance.

Before I'll continue with an example on how to do this, I'll quickly explain why neither Pleroma nor Mastodon implements this in a nice frontend in a somewhat technical manner. If you don't understand it, you can safely skip this paragraph and just assume that they can't do it. It specifically has to do with how an admin is expected to set up applications that these two utilities are written in. Specifically, the intent is to reverse proxy the actual (sub)domain to the port on which Pleroma and Mastodon run on. Under normal circumstances, the IP address that is used to visit your instance is properly passed along to the reverse proxied IP, but if the webserver is improperly configured, this is not a guarantee and the server could end up sending along it's own IP, which if a UI version of this could end up blocking a server from accessing it's own instance. Then there's also the issue that there are a number of fediverse service providers that will set up a Mastodon instance for you if you fork over enough money. These instances often end up sharing IP addresses, which can result in an IP ban overreaching it's intended domain block and banning several innocuous instances.

With that out of the way, let's take a look on how Alice could stop Caroline from reading Bobs statuses. The following instructions are intended for firewalld, the default firewall that comes installed with Fedora server.

  1. Obtain the IP of Caroline's instance. There are a number of methods to do this. For example, we could use the dig command to look at the A record of Carolines instance. There are options for this, which I recommend you look up yourself.
  2. Alice logs in on her instance's VPS.
  3. Alice runs the following command: firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='IPADRESSHERE' reject", replacing IPADRESSHERE with the IP she obtained from step 1.
  4. Alice reloads firewallds config: firewall-cmd --reload
  5. Done.

Alice has now succesfully stopped Carolines instance from being able to even access Alice's instance. The firewall stops Carolines instance at the door by rejecting access instantly.

Conclusion

Of course, Alice, Bob and Caroline are fake in this situation, but it does illustrate that it is entirely possible to completely stop an instance from reading your statuses on the Fediverse. It's just not possible if all you're going to do is enable a domain suspension or reject them through MRF.

It takes a little more effort than that, but it's still possible.

It's... that time of the year again. Time to tear something a new asshole.

No I'd prefer not to have to do this either, but here we are.

Introduction

A character from the game Fortnite

To catch anyone who either has little interest in video games or somehow has been living under a rock up to speed, here's the quick tale of the Epic Games Store and how it came to be.

  • Epic Games launches the Battle Royale mode for their game Fortnite.
  • Fortnite proves to be highly popular, quickly causing a craze that is on a comparable level to games as Minecraft.
  • Fortnite was made available to consumers on the Epic Game Store, therefore meaning a large influx in their userbase.
  • Epic Games proceeds to open up their storefront for interested developers, offering an 88% cut, no licensing fees for games made in their engine, the Unreal Engine and a guaranteed minimum amount of sales.

The issue

When I first heard of the Epic Games Store, I was... curious. I had kinda dodged past most of the Fortnite stuff by the simple reasoning of having zero interest in a battle royale title, but I had heard of it's very large userbase.

In fact, when I first heard of the storefront, I was positive towards it. Steam as a platform takes a pretty severe cut from developers and is kinda stuck on it's lazy ass, due to having a near monopoly chokehold on the PC games market.

However... while Steam is absolutely worthy of criticism, the Epic Games Store is even more so. Let's dig right in shall we?

Feature-barren

The thing is... in the summary I just gave, EGS wasn't really “created”. It was already around for a while, and games like Unreal Tournament 4 and the Save The Wold version of Fortnite were in fact sold on it. A small commodity of games, all produced by Epic.

Then when they opened up their storefront, there... was a bit of a disparity to say the least.

The Epic Games Store is as it stands, clearly an unsuitable game store for the load it tries to handle. There is no shopping cart, there is no search functionality and a number of other commodities any basic storefront that's intended to sell more than 20 products should have.

To put it somewhat fairer towards Epic, they do have a Trello board for expanding their featureset, but even then, there seems to be a massive issue in what they deem a “basic” commodity, with the shopping cart being put on the 6 months “backburner”, and the majority of nearby features more being geared to selling more products rather than improving the User Experience.

Strange downloading incident

This is a purely personal one. To put it mildly... the way Epic Games downloads stuff to your computer is TERRIBLE. Unless you have an SSD, the entirety of your download is gonna be chokeholded by how fast your hard drive is. This is because Epic Games has opted to locally verify each chunk before downloading the next one. This is a terrible system.

I once had a 180mb update for Fortnite, that took me over three hours to install.

Okay, these are the minor things. Now... let's talk about some big fish.

One Year Exclusivity

The first issue with games sold on the Epic Games Store is that if they are a launching title on the EGS, they will be locked to the platform for at least one full year, before they can be sold on other platforms such as Steam.

This is... a minor issue for me. Perphaps this might be a surprise, but this is purely a choice Epic Games has opted to make. What is less acceptable is the way this seems to have permeated within the game development community.

AAA titles

Much already has been said about Metro Exodus utter bizarre launch, with the game moving no less than a week before release date to the Epic Games Store, after preorders already had been made for the title. While Deep Silver did promise to “honor Steam preorders”, this was the first major AAA title to be announced for the platform that would receive permanent exclusivity to the platform.

This as a result has started what appears to be a worrying pattern for games on the Epic Games Store, with notably Ubisoft announcing the movement for The Division 2 to the storefront after, again, it already had been announced on Steam.

In fact, Ubisoft seems to be moving over to the Epic Games Store almost exclusively, having made a partnership with them, specifically citing the larger cut as their reasoning for moving.

As far as stuff goes, and particularly with how comparatively feature barren EGS is to Steam, this is money grubbing to the highest degree and is merely another attempt by AAA companies to keep churning out higher records to their shareholders.

Indies

Oh boy, I'm gonna end up in a minefield here. Let's preface this with one very important thing: If you are a fully independent indie title and you publish on the Epic Games Store, I have no problems with you. Whatsoever. The deal EGS offers is very appealing, especially if you're someone who is strapped for cash.

What is less acceptable is if you are crowdfunding the project.

Specifically, Epic appears to be targeting game developers on the crowdfunding site “Fig”, which notably when compared to Kickstarter or Indiegogo offers backers a part of a games revenue, provided they back enough.

Notably, the first insight we got into this behavior was with Phoenix Point, a game made by the original creator of XCOM, which took a deal with EGS after it already had been announced on Steam and GOG.

While Phoenix Point did offer refunds through Fig, the Community Manager for Phoenix Point went on record to say this:

They also notably held an AMA session on Reddit about the move, which proved to be a complete mistake, as people kept lading shit onto them.

On a similar fashion, the game Outer Wilds also went Epic Exclusive after being backed through Fig, which incidentally was the reason I started considering this blogpost.

Here's the deal though. If you are accepting money from a crowd to make a game, you are tightrope dancing. If you manage to succesfully anger this crowd, you can risk seriously losing any and all positive publicity you might ever have had and cause your sales to forever torpedo as you and your game studio will now forever be known as “the game studio who did that super bad thing x”.

For a really good example of this, look at The Odd Gentleman, who have been accused in the past of taking the million funded for Hiveswap and using it instead to produce the remake of Kings Quest, only leaving a bugged tech demo for Hiveswap.

Cutting a deal with Epic is in this case, for all intents and purposes a bad deal.

Anti-Consumer practices

So all criticism we just talked about mostly lands itself on the game developers end. Now I'm gonna take a look with you all to see how Epic treats you, the consumer!

Tim Sweeney: Professional asshole

Revenue share

If Steam committed to a permanent 88% revenue share for all developers and publishers without major strings attached, Epic would hastily organize a retreat from exclusives (while honoring our partner commitments) and consider putting our own games on Steam.

Source

This is what we call an empty threat. In order to properly understand why there is such a massive disparity between EGS and Steams cuts, we need to specifically look at what parts EGS and Steam take their cuts and what these cuts pay for.

Basic presumed costs on both platforms:

  • CDN upkeep and client maintenance.
  • Staff payments

What the cut for Epic is used for:

  • Pay for basic costs.

What the cut for Steam is used for:

  • Pay for basic costs.
  • Pay for key activation.
  • Pay for gift cards.
  • Pay for additional CDN features such as Achievements, Guides and Community Forums.
  • Pay for transaction fees.

Steam takes no cuts for key activation (and generation), a fact which has been known for a while. It is entirely possible to buy a game on the platform Steam without ever giving Valve money by directly buying a key from the developer or from a store they partnered with (ie. Humble Bundle).

Gift cards are more interesting. While none of what I'm about to say applies to digital gift cards, physical gift cards are interesting subjects to talk about, and this is why.

When you buy a gift card from a store, let's for example say a 15$ card for the Nintendo eShop, Nintendo actually loses money. This is because in order to make stores buy gift cards, these cards are undersold from their actual value. So for example, Nintendo only gets 10$ from the 15$ gift card and the store turns over a 5$ profit.

In order to be able to properly keep this income, Nintendo instead takes this 5$ loss of theirs as a part of the developers cut, but it ensures it's thinned out over the several hundreds of publishers it has on it's store, making the industry standard 30% cut a reasonable one.

Finally, transaction fees. This is a somewhat unverified claim, as I have never bought games from the EGS directly, but apparently, if the payment provider you are using includes transaction fees, EGS dumps them on the consumer to pay.

This is in notable contrast to Steam and really, nearly every other platform with a shred of decency, which eat the transaction fees as a part of the cost and instead heightens their developers cut.

It's because Epic doesn't do what Steam does that they're able to shave off so much from their own cut.

Tim Sweeney stating that if “Steam would commit to an 88% revenue share we would stop exclusives” is a bold-faced lie and is simply a catchy statement intended to get people to shit on Steam some more and love Epic better, but really falls apart when you get down to what these revenue shares are used for.

On a similar kind, the Discord Store, a platform which has received... less luck than EGS although seemingly no shortage of good indies (seriously, I click that tab sometimes on accident and all I see pop up are indie tites that I already own on Steam and know are good), gives out a 90% revenue share and also doesn't do this stuff.

At least they don't tie their games to a 1 year exclusivity deal.

Misunderstanding Linux

Linux always has been sort of a black sheep when it comes to gaming, even more so than Apple. While most modern games typically can expect to see releases on Apple and Windows, Linux always has been treated like a third horse.

This however has been changing over the years, as notably, Steam has been doing their best to improve support for it, initially by releasing the ill-fated SteamOS, but more recently in a much more successful manner with “proton”, a version of wine specifically optimized to run video games (henceforth when using wine, assume I also mean proton).

Now... let's look at what Tim Sweeney thinks of Linux.

Installing Linux is sort of the equivalent of moving to Canada when one doesn’t like US political trends.

Nope, we’ve got to fight for the freedoms we have today, where we have them today.

Source

This... is a basic failure to understand what Linux is. Linux isn't the equivalent of “moving to Canada because you hate US politics”. This analogy just fails to work on such a basic level that I can't even find a similarly intended analogy for it.

That said, let's quickly note a few things about why this statement matters:

  • Epic has bought up Easy Anti-Cheat. Easy Anti-Cheat notably was initially looking to support Linux and is currently the only thing holding back the ability to play Fortnite perfectly under wine. Under Epics management, EAC was told to stop Linux development.
  • The Epic client does not support Linux.

Especially that last one is relevant here. Steam is available on all major platforms, the sole exception being ARM devices (citing specifically incompatibility with the various kinds of ARM architectures out there), whereas Epic is... only available on macOS and Windows, including somehow future plans to compete with the Google Play Store on Android of all things.

To put it mildly, this alone should be something to make you wary of EGS.

No user reviews

And as the final cherry on top of the shitcake: The Epic Games Store has no user reviews. While an implementation is currently on the roadmap, the company has gone on record to state that “developers will be able to disable user reviews on their product”.

This... is a ridiculously bad concept. It's one thing to not have user reviews. I'd argue it's not a good thing to have, but that's at best me complaining.

Letting developers pick if they want user reviews on or not? That's just gonna be a recipe for disaster. Especially for modern day AAA games which have a habit of introducing anti-consumer features (such as micro-transactions, lootboxes and/or rebalancing the game to be pay2win) post-launch, user reviews are invaluable to picking apart if a game is worth your time, even moreso compared to regular outlets which are being milked like cows by AAA publishers to churn out reviews for the unpatched products so that people looking to buy these games later will end up getting mislead and misinformed.

This just gives full power to these AAA publishers to silence this stuff.

The supposed argument in favor of this is that it permits a protection against review bombing, an action in which a mob of users start leaving negative reviews on a game (this is also known as brigading), usually due to one or two direct issues with the game, rather than the merits of the full game itself.

While review bombs are indeed an issue, there are ways to counteract them without necessarily removing user reviews. An easy way to counteract a review bomb is to expand the review section to include recent reviews only. In fact, in order to counteract review bombing, this is exactly what Steam did, as well as introducing a graph that will help signify if a game had a long streak of review bombing.

Conclusion

Epic Games Store is... not a remotely good storefront. The store is barren, the benefits for developers are steeped in negative PR controversies and it's CEO and the platform are notoriously anti-consumer.

This is without going into claims that hold less basis and which I held off from making because I cannot be assured of their value or strength.

And want to know perphaps the saddest part? Epic has already won. It's status as a market leader thanks to Fortnite means that it'll be able to maintain it's cheap cuts, the fact that it's not putting a lot of effort into improving it's storefront also means they don't have to drive up the cuts. Small indies will see Epics deal as nothing but favorable, while big AAA titles will simply go to whatever gets them more money like bees to honey.

The only possible solution at this point will be if the negative PR towards EGS ends up reaching the breaking point at which devs will not be willing to tank the blow to their trust that associating themselves with the EGS is starting to mean and signify.

Tags: #games #epic #epicgamesstore #phoenixpoint #timsweeney #metroexodus

With recently the topic of “why don't kid shows have more LGBTQ+ characters” being suddenly relevant again (a cursory google search can't find any particular source on this, anyone who knows, please tell me), I kinda feel like sharing some experiences of my own.

Me and who I am

If you're reading this and somehow aren't aware of who I am, my name is Valentijn “noirscape” V. I live in the Netherlands and am a bisexual male. In my spare time I'm a programmer and I have a love for console homebrew, as the rest of this blog should indicate.

However... I just want to note, that up until very recently, I denied the possiblity that I could even be anywhere on the LGBTQ+ spectrum as anything but potentially aromantic. And... if there's any specific reason for this, it's to do with the subject of today's post.

Modern society

I'm extraordinarily lucky. I'm born in the Netherlands, which has excellent LGBTQ+ rights. Discrimination on sexuality is explicitly forbidden by law, discrimination on gender expression was also recently added to the list, and barring our most extreme christian right wing party (not the alt-right parties, go figure there!) the idea of scrapping gay marriage or criminalizing it is not even considered an idea.

When said party's leader signed the Nashville declaration, it was basically a national decry. There's occasional gaffes by some personalities, but most of these seem to be born from ignorance rather than outright malice.

Personally, my parents have said that they're “okay with whatever I want to be”. That said... I'm not out to them yet. They don't know I operate this blog and I hope that it doesn't really end up in their face, but... if they do see it, I greet you like anyone else here and hope you kind of understand why I'm not out of the closet so to speak and why I'll end up being it if you do see it.

The stereotype

Note: I'm about to describe a stereotype. A stereotype is more or less what a large group of people describes as traits belonging to a certain group of people. Wether these are accurate or not, is another question. Most stereotypes are more or less grounded in a basis of truth, but some aren't. If you do express these attributes, that's your choice and it's not my place to tell you who you should be and who you want to be and this isn't a request for you to change. It's more of a plea to any reporters, newscasters, writers or any other creator. Anyway, on with the blog.

So... the big thing. It basically starts with what the modern day “gay dude” is like. It also technically all applies to lesbians and trans people, but for now my focus is specifically on “gay dudes”.

Specifically, this is how gay men are represented in modern media:

  • Flamboyant.
  • Hypersexual. Specifically, pride parades focusing on the BDSM boats, every picture of an explicitly gay dude that garners attention being a picture of him shirtless and usually ripped and so on and so forth.
  • “Bright”. Bright, happy colors. Rainbows. Everything. The pride flag is a rainbow for goodness sake, but the way the stereotype represents it is ranging in anywhere from hair color to the general color of their clothes.
  • In your face and obnoxious.

I have several issues with this entire stereotype, because basically uh... none of this really applies to me at all.

My youth

I think the first time I heard about the concept of lesbian and gay people when I was... 6 I think? That's about the time your fellow primary school kids start forming crushes on one another and the books I ended up reading started covering the idea of a crush too. Sure, it's not much, but hey. Now of course, as a 6 year old kid, you're gonna have some questions and I distinctively recall one of those questions being “can a boy love another boy”. Parents said yes, and I asked a couple more questions (ie. can a girl love another girl) and they kind of gave me the terms for what this meant and asked me if I was ok with it.

I'm the kind of dude that mostly operates on a “you do you” kind of way, so my answer was yes, I'm ok with it.

This is apparently in a modern day situation scarring your child and means CPS should be called on you as a parent if I understand the Christian conservative rethoric properly, but that's besides the point.

So I basically started growing up and as I grew up, the books I read mostly covered straight dudes having love with a girl and so on. As for myself, aside from some three month long “I'm totally in love” when I was 5 (which suprise suprise suddenly ended when I changed primary school, which means it probably didn't mean much to young me at the time), I never really formed a crush on anyone.

I did become slowly more or less aware of the aforementioned stereotype. I eventually learned of the concept of a “pride parade” and... the media footage shown for these pride parades covered these in what I can only describe as the most unappealing light ever. People being loud, flamboyant and in your face basically. It's not that I had an issue with gay people, but young me managed to associate that imagery (and I've always been a pretty closed-off person unless I know you) to gay people and I basically managed to end up with the “Your dad” mentality (a term coined by PhilosophyTube) of gay people; which is “not in my face, but be as gay as you want when I'm not looking”.

Yeah, nowadays that's kinda homophobic to say, but what gives, that's the conclusion young me drew at the time.

Trans people I'm not sure when I learned about them. I think it was when watching a crime show on ID Network (14-15 year old me) and one of the covered cases was a kid who was killed for being trans. My mom asked me if I were ok with dating a girl who then would reveal “yeah i once was a boy” (the vice versa wasn't really an idea I considered at the time and my mom knew that), to which the answer from yours truly was “as long as I know beforehand that they're trans, sure thing”.

Ironically I ended up with a better starting out perspective on trans people than on gay people.

These stereotypes persisted up until I was 16, and up until then, I refused to even entertain the notion that I might be anywhere on the LGBTQ+ spectrum. Now here's when things get interesting. You see, when I became 16, two things happened. First, I got a job. Second, I started getting much more involved in the Homebrew scene than I had previously been. These two experiences basically shifted my views on gay people almost completely.

Let's start with the Homebrew scene since it happened first. As it happens, the homebrew scene is filled with quite a bit of LGBTQ+ folks. Or uh... used to be. Nowadays it's mostly, but not entirely, overran with angry young teenagers again who take the recent shift in politics as the perfect excuse to be a massive bigot, which has driven quite a number of people away from the scene. (If you feel offended by what I just said, that's probably a sign you're a part of this problem, even if you're not a teenager.)

And like I said, I became more active and I started making friends. As it happened, quite a number of those friends ended up being gay or lesbian and uh... that really shifted my view. Because I'll be frank: the Homebrew scene doesn't really match the stereotype. At all. Most of the people I know are just... people, like you and me. They wake up in the morning, they go to work or school, they go home, they eat, they express their hobbies and when it's late they might have a wank.

Secondly, my work. This is specifically related to an ex-colleague of mine who I basically ended up having a striking chat with. Then I learned she was gay. She just brought it up in casual conversation and shrugged it off as no big deal and also explained to me that those pride parades only focus on a couple of specific boats which happen to contain the full-leather suited BDSM people.

To say that these experiences combined were an eye opener for me is an underestimation and that previous belief was basically half-turned onto it's head.

I still despise displays of public affection like overly drawn out makeout sessions, but I have no issues with a hug or holding hands. That doesn't matter if you're gay or straight, I just believe makeout sessions shouldn't occur in fucking public, we have bathrooms and other more private areas for those. Again, even if you're bloody straight, find a private spot okay? They're not hard to find, most restaurants have a bathroom nowadays or find a park bench or something.

I also dislike pride parades, but no mostly for the same reason I dislike other public gatherings: they're loud, noisy and generally a nuisance. Again, this isn't anything specific against the LGBTQ+ crowd and if you go to one, please don't feel like you should stop or anything. If that's what you want to do, all on you. I just hate public gatherings like that. Same for a music festival.

Then add in about a year of casually thinking things over and then you suddenly reach the conclusion that uh... dudes and dicks can be kinda hot too. :p

Why I'm not out the closet

Three reasons:

  • The stereotype I just described. Basically, my parents would accept me, but they highly believe the stereotype and would try to fit me in it while I am nothing like that at all. I'm the fucking guy that ideally would wear a black coat in the fucking summer, my favorite pasttime is locking myself in my room and waste time on my computer or hone my programming skills. I'm not an outgoing person and probably never will be. I just like tits and dicks equally.
  • My dad believes bi people should just pick a side and not “feed on both sides of the aisle”. Here's a hint dad. Sometimes someone just finds both hot.
    • To elaborate on this one a bit more; He also believes that I won't know for sure until I “have a boyfriend or a girlfriend and have had sex”. Except I know kind of exactly what gets my gears grinding and makes my insides happy. It just happens that that can occur regardless of the object in question having an electrical outlet or a power plug so to speak (yes yes, genitalia aren't neccesarily your gender, this is a metaphor m'kay).
  • “People who are LGBTQ+ figure this out when they're 12”. Mostly again perpetuated by my dad although my mom believes in it too. I hope my previous experience can kind of explain why a kid might just end up repressing these feelings.

The takeaway

I don't know how many people share my experience here. I know it's a unique one and... maybe I'm the only one. I don't know. But I do believe that due to the fact that I felt like this, there is an issue with the stereotype.

The origins obviously come from the original LGBTQ+ movement. To try and set itself off and gather attention to force them to be accepted, the movement opted to go for bright colors to draw attention and the obnoxious part is thanks to what well... any movement is really. They're obnoxious because they are a movement. If you're not trying to shift gears, you can hardly call yourself a movement. The hypersexualized part seems to have been an overresponse to pedophile allegations to try and push the movement as far away from kids as possible.

And I'd like to stress. If you do believe that bright colors or the hypersexualization or hell, the in your face obnoxiousness that the media loves to focus on are indeed your thing... do it. I don't resent you. I don't even resent the people who originally did it, it had a purpose back then.

I resent the modern media that continues to portray people like this. The media that as a result ingrained an idea in 8-16 year old me of gay people that was pretty bloody dated and one that didn't fall until I was 16. Hell, an idea of gay people that made me refuse to even consider my sexuality as anything other than straight.

And if you are a creator of content or a newscaster or a reporter or whomever... please. If you are gonna report on gay folks. Could you also try and report on the “not so in your face” people. I know you're getting better at it. When that recent gaffe with the football commentator who said that “gay people should just come out of the closet, I don't do that”, the person the news asked for comment wasn't the same group that gets highlighted on the pride parades.

All I ask is... could you do that more? I know people that go to pride parades aren't all BDSM gearing leather-clad fetishists or shirtless muscular dudes now. But not because of your reports. A pride parade is effectively an idea of “we exist and we should keep existing” for the LGBTQ+ movement and by portraying the idea like that... you associate very negative imagery for young people that are or were like me. Because to many young kids, a news report on a pride parade is gonna be their first exposure if they don't have friends with gay parents or a friend who is gay.

Hell, learning that some media personalities I really like are LGBTQ+ and for the most part don't fit the movement helped me a lot to reshape this view after those initial two experiences.

My message

Be who you are. Be who you want to be. Honestly, it's not my life, it's yours. If it makes you happy and you're not treading on other peoples safety, do it.

To quote an image I once saw: Be gay. Do crime.

But if I could add to that... don't be afraid. What the media shows you people are like isn't neccesarily what they're like. Don't feel like just because what they're showing is what people are neccesarily like. I just want to say this to you specifically.

So... “Be yourself. Don't not... consider(?)”.

End notes

I usually don't talk about myself and who I am in public like this. But... I felt like writing this. It's a bit of a derivation from my usual ramblings about other people and how bad or good their behavior is or a close examination of why something is good or sucks, but I felt like putting this out. That's all I have to say on the matter.