First, hereâs a list of all the references to âAngelsâ or âHeavenâ in the text of Undertale and Deltarune, which Iâll go through one by one:
The human in Undertale is called an âangelâ for coming down from the human world (this is a red herring) (this could also refer to Asriel but it doesnât matter)
The Angelâs Heaven from Ralseiâs prophesy
The Heaven Spamton is pursuing
The Angel worshipped by the Hometown church
The Angel doll Noelle and Dess made in church youth group
Iâve decided to do a short write-up on a tool I just call âSorterâ. Sorter is something I built for myself to help me organize my own files, and it looks like this:
Itâs designed to do exactly one thing: move files into subfolders, one file at a time. You look at a file, you decide where it goes, and you move it accordingly. Itâs the same behavior you can do with Explorer, but at speed.
You can download it if you want (although it might not be easy to build; check the releases for binaries) but for now I just wanted to talk through some of the features, why I built it the way I did, and the specific features I needed that I couldnât find in other software.
Reddit is going the same route as Twitter by making âAPI accessâ prohibitively expensive. This is something they very famously, very vocally said they would not do, but theyâre doing it anyway. This is very bad for Reddit, but whatâs worse is itâs becoming clear that companies think that this is a remotely reasonable thing to do, when itâs very critically not.
Itâs the same problem we see with Twitter and other late-capitalist hell websites: Redditâs product is the service it provides, which is its API. The ability for users to interact with the service isnât an auxiliary premium extra, itâs the whole caboodle!
Iâll talk about first principles first, and then get into whatâs been going on with Reddit and Apollo.
The Apollo drama is very useful in that it directly converts the corporate bullshit that sounds technical enough to make sense into something very easy to understand: a corporation hurting them, today, for money.
Reddit and all these other companies who are making user-level API access prohibitively expensive have forgotten that the API is the product. - The API is the interface that lets you perform operations on the site. The operations a user can do are the product, theyâre not auxiliary to it!
âApplication programming interfaceâ is a very formal, internal-sounding term for a system that is none of those things.
The word âprogrammingâ in the middle comes from an age where using a personal computer at all was considered âprogrammingâ it.
What an API really is a high-level interface to the web application that is Reddit. Every action a user can take â viewing posts, posting, voting, commenting â goes from the app (which interfaces with the user) to the API (which interfaces with the Reddit server), gets processed by the server using whatever-they-use-it-doesnât-matter, and the response is sent back to the user.
The API isnât a god mode and it doesnât provide any super-powers. It doesnât let you do anything you canât do as a user, as clearly evidenced by the fact that all the actions you do on the Reddit website go through the API too.
The Reddit website, the official Reddit app, and the Apollo app all interface with the user in different ways and on different platforms, but go through the same API to interact with what we understand as âRedditâ. The fact that the API is the machine interface without the human interface should also concisely explain why âAPI accessâ is all Apollo needs to build its own app.
Public APIs are good for both the user and the company. Theyâre a vastly more efficient way for people to interact with the service than by automating interaction (or âscrapingâ). Having an API cuts out an entire layer of expense that, without an API, Reddit would pay for.
The Reddit service is the application, and you interface with it through WHATEVER. Whatever browser you want, whatever browser extensions you want, whatever model phone you want, whatever app you want. This is fundamentally necessary for operability and accessibility.
The API is the service. The mechanical ability to post and view and organize is what makes Reddit valuable, not its frontend. Their app actually takes the core service offering and makes it less attractive to users, which is why they were willing to pay money for an alternative!
Netflix is finally turning the screws on multi-user accounts. That âfinallyâ is exasperation in my voice, not relief. Netflix is demanding you pay them an extra surcharge to share your account with remote people, and even then caps you at paying for a maximum of two. Itâs been threatening to do something like this for a long, long time:
Netflix threatening this for so long was a mistake on its part, because thatâs given me a long, long time for these thoughts to slowly brew in the back of my head. And thereâs a lot wrong here.
The Steam page describes The Last Clockwinder as a âVR puzzle-automation game.â
I like production and automation games. But Iâm used to FTB and Factorio and Zachtronics and Universal Paperclip. Iâm used to the look automation-production games gravitate towards.
Factorioâs top-down design invites you to create sprawling factories that completely overtake the landscape. What little detail there is in the landscape is purely mechanical; resources you can extract and process, or enemies you have to either avoid or exploit for more resources.
Positioning the camera to give yourself a comfortable view of the structures you build and the items youâre manipulating leaves the actual character as a tiny focal point; more of a crosshair than a character or even an avatar.
Factorio scales enemy difficulty to âpollutionâ but this is always designed to be overcome, not be a legitimately limiting factor.
In Infinifactory, youâre captured by aliens and forced to engineer efficient factories in exchange for food pellets. Each puzzle takes place in a set of stark, desolate environments. Itâs first-person, but you never directly interact with another character; the most you get are notes about how much your predecessors hated it.
As soon as you solve a puzzle, youâre presented with a histogram: how could you optimize your solution further? Could you be faster? Use fewer blocks? Are you better than your friends, or falling behind?
Universal Paperclipâs minimalist HTML interface makes it a graphical outlier, but the bare-metal minimally-styled HTML invokes a sense of brutalism that reenforces the gameâs theme of efficiency in the pursuit of a goal to the exclusion of everything else.
Itâs undeniably hard sci-fi. The first thing you do is arrive in spaceship. Throughout the game youâre on the radio with your friend idling in orbit, and the whole story revolves around interplanetary travel.
But then the first thing you see is a tree-patio with a hammock. It almost feels like a treehouse. The purpose of the tree is archival and preservation of rare and culturally significant plants; itâs a reserve, and thatâs what gives it such importance. Inside the tree is the one room you stay inside for the entire game, and itâs a living space.
Hi, The EFF, Creative Commons, Wikimedia, World Leaders, and whoever else,
Do you want to write a license for machine vision models and AI-generated images, but youâre tired of listening to lawyers, legal scholars, intellectual property experts, media rightsholders, or even just people who use any of the tools in question even occasionally?
You need a real expert: me, a guy whose entire set of relevant qualifications is that he owns a domain name. Donât worry, hereâs how you do it:
This is an extremely condensed set of notes, designed as a high-level overview for thinking about the problem
Given our current system of how AI models are trained and how people can use them to generate new art, which is this:
sequenceDiagram
Alice->>Model: Hello. Here are N images and<br>text descriptions of what they contain.
Model->>Model: Training (looks at images, "makes notes", discards originals)
Model->>Alice: OK. I can try to make similar images from my notes,<br>if you tell me what you want.
Curio->>Model: Hello. I would like a depiction of this new <br>thing you've never seen before.
Model->>Curio: OK. Here are some possibilites.
The model and the works produced with the model are both distinct products. The model is more like processing software or tooling, while the artistic works created with the model are distinctly artistic/creative output.
Models do not keep the original images they were trained on in any capacity. The only keep mathematical notes about their properties. You (almost always) cannot retrieve the original image data used from the model after training.
sequenceDiagram
Curio->>Model: Send me a copy of one of the images you were trained on
Model->>Curio: Sorry, I do not remember any of them exactly,<br>only general ideas on how to make art.
There is a lot of misinformation about this, but it is simply, literally the case that a model does not include the training material, and cannot reproduce its training material. While not trivial (you canât have a model if you canât train it at all), when done properly, the specific training data is effectively incidental.
AI-generated art should be considered new craftsmanship â specifically, under copyright law, it is new creative output with its own protections â and not just a trivial product of its inputs.
The fact that AI art is new creative output doesnât mean AI art canât be plagiarism.
Just like with traditional art, itâs completely possible for specific products to be produced to be copies, but that doesnât make that the case for all works in the medium. You can trace someone elseâs artwork, but that doesnât make all sketches automatically meritless works.
The inner workings of tools used in the creation of an artistic work are not what determines if a given product is plagiarism, or if it infringes on a copyright. Understanding the workings of the tool can be used in determining if a work is an infringement, but it is not the deciding factor.
If1 youâve been subjected to advertisements on the internet sometime in the past year, you might have seen advertisements for the app Replika. Itâs a chatbot app, but personalized, and designed to be a friend that you form a relationship with.
Thatâs not why youâd remember the advertisements though. Youâd remember the advertisements because they were like this:
And, despite these being mobile app ads (and, frankly, really poorly-constructed ones at that) the ERP function was a runaway success. According to founder Eugenia Kuyda the majority of Replika subscribers had a romantic relationship with their ârepâ, and accounts point to those relationships getting as explicit as their participants wanted to go:
So itâs probably not a stretch of the imagination to think this whole product was a ticking time bomb. And â on Valentineâs day, no less â that bomb went off.
Not in the form of a rape or a suicide or a manifesto pointing to Replika, but in a form much more dangerous: a quiet change in corporate policy.
Features started quietly breaking as early as January, and the whispers sounded bad for ERP, but the final nail in the coffin was the official statement from founder Eugenia Kuyda:
âupdateâ - Kuyda, Feb 12
These filters are here to stay and are necessary to ensure that Replika remains a safe and secure platform for everyone.
I started Replika with a mission to create a friend for everyone, a 24/7 companion that is non-judgmental and helps people feel better. I believe that this can only be achieved by prioritizing safety and creating a secure user experience, and itâs impossible to do so while also allowing access to unfiltered models.
People just had their girlfriends killed off by policy. Things got real bad. The Replika community exploded in rage and disappointment, and for weeks the pinned post on the Replika subreddit was a collection of mental health resources including a suicide hotline.
First, let me deal with the elephant in the room: no longer being able to sext a chatbot sounds like an incredibly trivial thing to be upset about, and might even be a step in the right direction. But these factors are actually what make this story so dangerous.
These unserious, âtrivialâ scenarios are where new dangers edge in first. Destructive policy is never just implemented in serious situations that disadvantage relatable people first, itâs always normalized by starting with edge cases and people who can be framed as Other, or somehow deviant.
Itâs easy to mock the customers who were hurt here. What kind of loser develops an emotional dependency on an erotic chatbot? First, having read accounts, it turns out the answer to that question is everyone. But this is a product thatâs targeted at and specifically addresses the needs of people who are lonely and thus specifically emotionally vulnerable, which should make it worse to inflict suffering on them and endanger their mental health, not somehow funny. Nothing I have to content-warning the way I did this post is funny.
Everybody hates paying subscription fees. At this point most of us have figured out that recurring fees are miserable. Worse, they usually seem unfair and exploitative.
Weâre right about that much, but itâs worth sitting down and thinking through the details, because understanding the exceptions teaches us what the problem really is.
And it isnât just âpaying people money means less money for meâ; the problem is fundamental to what âpaymentâ even is, and vitally important to understand.
or, âGio is not a marxist, or if he is heâs a very bad oneâ
First: individual autonomy â our agency, our independence, and our right to make our own choices about our own lives â is threatened by the current digital ecosystem.
Our tools are powered by software, controlled by software, and inseparable from their software, and so the companies that control that software have a degree of control over us proportional to how much of our lives relies on software. Thatâs an ever-increasing share.
The pico-8 fantasy console runs a modified version of lua that imposes limits on how large a cartridge can be. There is a maximum size in bytes, but also a maximum count of 8192 tokens. Tokens are defined in the manual as
The number of code tokens is shown at the bottom right. One program can have a maximum of 8192 tokens. Each token is a word (e.g. variable name) or operator. Pairs of brackets, and strings each count as 1 token. commas, periods, LOCALs, semi-colons, ENDs, and comments are not counted.
The specifics of how exactly this is implemented are fairly esoteric and end up quickly limiting how much you can fit in a cart, so people have come up with techniques for minimizing the token count without changing a cartâs behaviour. (Some examples in the related reading.)
But, given these limitations on what is more or less analogous to the instruction count, it would be really handy to have constant variables, and hereâs why:
The first excerpt is a design pattern I use all the time. Youâll probably recognize it as the simplest possible implementation of an enum, using global variables. All pico-8âs data â sprites and sounds, and even builtins like colors â are keyed to numerical IDs, not names. If you want to draw a sprite, you can put it in the 001 âslotâ and then make references to sprite 001 in your code, but if you want to name the sprite you have to do it yourself, like I do here with the sfx.
Using a constant as an enumerated value is good practice; it allows us to adjust implementation details later without breaking all the code (e.g. if you move an sfx track to a new ID, you just have to change one variable to update your code) and keeps code readable. On the right-hand side you have no idea what sound 024 was supposed to map to unless you go and play the sound, or label every sfx call yourself with a comment.
But pico-8 punishes you for that. Thatâs technically a variable assignment with three tokens (name, assignment, value), even though it can be entirely factored out. That means you incur the 3-token overhead every time you write clearer code. There needs to be a better way to optimize variables that are known to be constant.
What constants do and why theyâre efficient in Cđ
Iâm going to start by looking at how C handles constants, because C sorta has them and lua doesnât at all. Also, because the âsortaâ part in âC sorta has themâ is really important, because the c language doesnât exactly support constants, and Câs trick is how I do the same for pico-8.
In pico-8 what weâre trying to optimize here is the token count, while in C itâs the instruction count, but itâs the same principle. (Thinking out loud, a case could be made that assembly instructions are just a kind of token.) So how does C do it?
âHow can I show someone how my blog articles actually render?â
It sounds like it should be super easy, but it turns out it really isnât.
I write in Markdown (and attach the source to all my posts if youâre interested) that then gets rendered as HTML on-demand by Pelican. (More on this on the thanks page.)
But that means thereâs no quick way to demo what any given input will render as: it has to run through the markdown processor every time. Markdown is a fairly standard language, but I have a number of extensions I use â some of which I wrote myself â which means to get an authoritative rendering, it has to actually render.
But I want to be able to demo the full rendered output after all the various markdown extensions process. I want a nice simple way to render snippets and show people how that works, like a live editor does. The CSS is already portable by default, but the markdown rendering is done with python-markdown, which has to run server-side somewhere, so thatâs much less portable.