Codex Library


Read the latest posts from Codex Library.

from noirscape

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, except y'know, I use Python code instead of Java)

Producer-Consumer-Worker pattern


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.


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()

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

async def main():
    loop = asyncio.get_event_loop()
    for _ in range(0, 10):
Explanation of methods and objects involved

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


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


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.


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 asynchronous function and the entrypoint. It starts the consumer and creates 10 producers.

stdlib function that starts main.


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.


from noirscape

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.


🦀🦀🦀Stallman is gone🦀🦀🦀

Tags: #FOSS #Stallman #FreeSoftware


from noirscape

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.


from noirscape

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 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).


from noirscape

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:

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”.


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 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.


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.