GioCities

blogs by Gio

Atom feed Recent essays

đŸ–± So you want to write an AI art license

  • Posted in cyber

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:

Given our current system of how AI models are trained and how people can use them to generate new art, which is this:

CurioModelAliceCurioModelAliceHello. Here are N images andtext descriptions of what they contain.Training (looks at images, "makes notes", discards originals)OK. I can try to make similar images from my notes,if you tell me what you want.Hello. I would like a depiction of this new thing you've never seen before.OK. Here are some possibilites.

đŸ–± Replika: Your Money or Your Wife

  • Posted in cyber

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:

Replika "Create your own AI friend" "I've been missing you" hero ad

Replika ERP ad, Facebook (puzzle piece meme) Replika ERP ad, Instagram

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:

erp1

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.

Resources if you're struggling post

Cringe!§

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.

Virtual pets§

So how do we actually categorize what a replika is, given what a novel thing it is? What is a personalized companion AI? I argue they’re pets.

đŸ–± Lies, Damned Lies, and Subscriptions

  • Posted in cyber

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.

Human Agency: Why Property is Good§

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.

đŸ‘šâ€đŸ’» Jinja2 as a Pico-8 Preprocessor

  • Posted in dev

Pico-8 needs constants§

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:

1
2
3
4
5
6
7
8
9
-- 15 tokens (clear, expensive)
sfx_ding = 024
function on_score()
  sfx(sfx_ding)
end

function on_menu()
  sfx(sfx_ding)
end
1
2
3
4
5
6
7
8
9
-- 12 tokens (unclear, cheap)

function on_score()
  sfx(024)
end

function on_menu()
  sfx(024)
end

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?

đŸ‘šâ€đŸ’» Gio Flavoured Markdown

  • Posted in dev

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

So I spent two evenings and wrote up gio-flavoured-markdown.glitch.me, which does exactly that. You can view the live source code here if you want to follow along.

x

đŸ–± The Failure of Account Verification

  • Posted in cyber

The “blue check” — a silly colloquialism for an icon that’s not actually blue for the at least 50% of users using dark mode — has become a core aspect of the Twitter experience. It’s caught on other places too; YouTube and Twitch have both borrowed elements from it. It seems like it should be simple. It’s a binary badge; some users have it and others don’t. And the users who have it are designated as
 something.

In reality it’s massively confused. The first problem is that “something”: it’s fundamentally unclear what the significance of verification is. What does it mean? What are the criteria for getting it? It’s totally opaque who actually makes the decision and what that process looks like. And what does “the algorithm” think about it; what effects does it actually have on your account’s discoverability?

This mess is due to a number of fundamental issues, but the biggest one is Twitter’s overloading the symbol with many conflicting meanings, resulting in a complete failure to convey anything useful.

xkcd twitter_verification

History of twitter verification§

Twitter first introduced verification in 2009, when baseball man Tony La Russa sued Twitter for letting someone set up a parody account using his name. It was a frivolous lawsuit by a frivolous man who has since decided he’s happy using Twitter to market himself, but Twitter used the attention to announce their own approach to combating impersonation on Twitter: Verified accounts.

🎼 Boneworks' Aesthetic of Substantiation

  • Posted in gaming

If you asked me what I expect “VR” to look like, I would answer lowpoly, wireframes, etc. You know, the SUPERHOT vibe, or the crisp plastic cartoon vibe of Virtual Virtual Reality or VRChat, or maybe even a little Quadrilateral Cowboy. Boneworks is not that. Instead of freely-manipulated wireframes and polygons, we get
 this:

Boneworks blue DANGER Heavy Calculation machine with barrel "Memory Dump" waste barrels, marked "256 mb storage capacity"

Boneworks’ aesthetic goes in a wildly different direction. Everything in the world is industrial and thoroughly utilitarian. There is a deliberate theme of substantiation rather than abstraction permeating the game’s design.

At first I thought it was a visual gag (“What’s this barrel full of, anyway? Oh, data, haha”), but no, it’s consistent throughout the universe and turns out to be a core part of the world.

Boneworks takes tasks like calculation and positioning and sorting and deletion, — tasks that in real life are performed by physical hardware but that we have abstracted into the realm of ideas and decisions and design — and says NO! In this space, where they should be abstracted most of all, these things are machines, and they’re individual machines, and you’re going to look at every one of them.

I love this approach, both for its aesthetic effects and for its function as a storytelling device.

🎼 Events in games bother me

  • Posted in gaming

I don’t like “events”. I don’t like it when things are limited with requirements of spacial presence and time. I don’t like experiences that only exist in one moment and then can never be relived. I don’t like ephemera. I prefer things. Toys I can play with, tools I can use, books I can read, movies I can watch, all at my own discretion. I have agency over my things. The actual lived experience from occurrence to occurrence is always different, of course, but the externalities can be repeated. I love being able to preserve the essence of a thing.

It’s one of the reasons I like computers. Or maybe it’s a psychological trait I developed because I had access to computers growing up. It probably is, I think. But either way, I love the purity of digital storage and interface. I love having an environment where experiences can be preserved and replayed at my discretion without my having to make any demands on other people.

And so that’s one of the reasons I love video games. Their mechanics are defined and can be understood and mastered. Their levels are defined and can be understood and mastered. Despite the extreme rates of “churn” — video games go out of print much faster than books or other physical media — the software is digital, and can be saved, stored, and replayed. I can look up the flash games I played as a kid and replay them, exactly as they were, and understand myself a little better for it.

Of course there are exceptions; it’s impossible to have a multiplayer game without an implicit demand that other people play with you. When an old game “dies”, it’s often not because the necessary hosting software is being intentionally withheld, but that there just isn’t a pool of people casually playing it like there used to be. That’s still a loss, and it’s sad, but that’s an unavoidable reality, and it’s not nearly as complete a loss as a one-off event being over.

So I don’t like when games force seasonal events on me. Limited-time events introduce something new, but they also necessitate the inevitable loss of that thing. And that assumes you were playing everything from the start; events introduce content that can be “missable” in a meaningful way, so if you’re weren’t playing the game at the right time, even if you own the game and finish everything you can access your experience can still be rendered incomplete. One of the things I like about games is that they’re safe, and the introduction of time-based loss compromises that safety.

That constant cycle of stress and pressure to enjoy things before they were lost is one of the main reasons I stopped playing Overwatch. I realized the seasonal events in particular weren’t good for me; they turned a game that should have been fun into an obligation that caused me anxiety.

But I’ve been thinking about this lately not because of Overwatch, but because Splatoon 3 is coming out soon. Splatoon isn’t nearly as bad as all that, I don’t think it’s deliberately predatory aside from Nintendo’s standard insistence on denying people autonomy. Splatoon 3 invokes that “people will stop playing Splatoon 2” loss, but even before that, Splatoon (a game I love) left a bad taste in my mouth because of its events.

⚖ The GĂ©nocidaires: People

Eugenicists need broad centrist support§

Now, a lot of people pushing the anti-trans agenda aren’t actually murderers or overt political fascists. The extremists are still the extremists. Moderates sustain these genocidal movements, but they don’t drive them. Unlike the center, the people who rise to the top are always the ones drawn to the movement because of its viciousness. It still matters, though, whether the people towards the middle are willing to help them or not.

It’s still true that legislators and anti-trans activists are not pursuing moderate treatment (psychotherapy, etc); they’re distinctly aiming for obliteration. But that message only works for people who agree with those people openly willing to back genocide outright, or people who can agree with the lampshade.

Even most of the republicans don’t actually know the people they’re voting for are full-on cuckoo-bananas. But the “socially liberal, fiscally conservative” types end up pushing this agenda, even if they’re unaware. People see a ballot where one choice describes a more convenient world for them, and they tick it. They’re not supposed to think about the violence it takes to make that happen.

People like framing the idea of pride like they frame the abolition of slavery or civil rights: as a celebration of a positive political change that happened in history, rather than an ongoing conflict. As soon as pride feels like a conflict, it feels like a conflict they’re on a side of, because they are.

r/pansexual: You're not welcomed

Buying the euphemism§

A lot of the people helping propel the cause of genocide don’t actually believe in the case for genocide; the genocidalists depend heavily on people buying the euphemism. That’s another topic I want to do a longer piece on someday, but here’s a brief summary on how rhetoric works on marks.

The mark says they don’t want children to be abused. Now, the people pushing the anti-abuse laws don’t care about children being abused, and their laws don’t prevent abuse, but anti-abuse is the euphemism they’re using to disguise their intents, and the mark agrees with that euphemism, so they think they must agree with the policy. In effect, the fascist hijacks the legitimate cause, just like they hijack institutions.

Even though the marks would, in isolation, be opposed to the real agenda of genocide, they believe enough in the cover story that they show up to support the genocidal cause.

The Shirley Exception§

Another key factor in why people support policies they disagree with is the so-called Shirley Exception. Transphobic culture and legislation are both perceived as uncomfortable and inconvenient for a few people — adding some hoops they have to jump through — but they’re usually not seen as being explicitly genocidal.

⚖ The GĂ©nocidaires: Exterminationism


Okay. We looked at law. Let’s keep looking. Let’s gaze straight at the horrors until our stomachs churn and our eyes bleed.

Rhetoric background info§

Before we get too deep into the craziness, I want to explain a couple common talking points.

The Social Contagion lie & Rapid-Onset Gender Dysphoria§

In real life, the scary sounding “social contagion” is just the study of the propagation of ideas across a social network, more commonly known as memetics. As applied to transgender people though, “social contagion” is the conspiracy theory that transgenderism is an invented evil that is being spread to children through education and social media. This idea helps keeps people from seeing trans exterminationism as a true genocide: transgender people aren’t a “real” group of people, they’re actually an effect of people being tricked by “biased out-of-control transgender activists”, psychiatrists, scheming liberals, a cabal of elite pedophiles, or just Satan himself.

Ross Douthat, “How to Make Sense of the New L.G.B.T.Q. Culture War”, NYT op-ed What we’re seeing today isn’t just a continuation of the gay rights revolution; it’s a form of social contagion which our educational and medical institutions are encouraging and accelerating. These kids aren’t setting themselves free from the patriarchy; they’re under the influence of online communities of imitation and academic fashions laundered into psychiatry and education — one part Tumblr and TikTok mimesis, one part Judith Butler.

At first this seems like the same basic myth as the debunked Homosexuality as Contagion false narrative now understood as the left-handed fallacy: the real cause for the increase in visibility is of course reduced social stigma and advancements in social and legal recognition. But the contagion myth has been recently “legitimized” by the pseudo-medical label of Rapid-Onset Gender Dysphoria, describing a phenomenon where “children seemed to experience a sudden or rapid onset of gender dysphoria, appearing for the first time during puberty or even after its completion” correlating with “an increase in social media/internet use.” The only paper in the medical literature about Rapid-Onset Gender Dysphoria is the one that invents the diagnosis: Lisa Littman’s Rapid-onset gender dysphoria in adolescents and young adults: A study of parental reports.

Littman’s study has been widely discredited by actual medical doctors — a thing Littman is not — for pulling numbers from online straw polls in order to claim discovery of a brand new disease without even attempting to assess single case of it. The real fatal flaw, though, is right in the title: it’s a study of parental reports, where untrained parties not actually afflicted by the alleged condition are asked to assess its existence in people, who in many cases are actively motivated to conceal it for fear of abuse or rejection. Worse, due to the ultrapartisan anti-transgender bias of the websites on which the polls were conducted (4thwavenow, transgender trend, and youthtranscriticalprofessionals. No, seriously.), the data was from parents who were already upset about their children coming out as trans and looking for an external, pathological factor to blame.