Cadey is coffee
<Cadey> Hello! Thank you for visiting my website. You seem to be using an ad-blocker. I understand why you do this, but I'd really appreciate if it you would turn it off for my website. These ads help pay for running the website and are done by Ethical Ads. I do not receive detailed analytics on the ads and from what I understand neither does Ethical Ads. If you don't want to disable your ad blocker, please consider donating on Patreon or sending some extra cash to xeiaso.eth or 0xeA223Ca8968Ca59e0Bc79Ba331c2F6f636A3fB82. It helps fund the website's hosting bills and pay for the expensive technical editor that I use for my longer articles. Thanks and be well!

Pronouns service

Read time in minutes: 6

hero image trippy-seattle
Image generated by Waifu Diffusion v1.3 (float16) -- landscape, breath of the wild, vaporwave palette, CGA colors, space needle in distance, manga style, thick outlines, ink, acid trip, kanji, genshin impact

On November 28, 2022, Heroku discontinued their free tier. This free tier had been a staple of the Internet and was widely used to host simple apps that don't need to be online 24/7. One of those apps was pronoun.is, a simple service that showed you the usage of third person personal pronouns in English, including some nonstandard/neopronoun sets. If you wanted to know how to use they/them, you could go to pronoun.is/they/.../themselves and see examples right there.

pronoun.is links are very common to see in bios on social media profiles, so it's very sad for me to see this go. I want to make it easy for people to share these usage examples with others for their reference and for your use in bio text, so I created pronouns.within.lgbt as a replacement.

The pronouns service

I created the pronouns service at pronouns.within.lgbt to give people most of the functionality of pronoun.is. With a few exceptions, you should be able to replace pronoun.is with pronouns.within.lgbt in your social media bio. This is a simple service written in Rust and running on fly.io. I also added an api so that you can integrate it with other applications or chatbots.

How it works

The pronouns service has a giant list of pronouns that it knows about. These pronouns were scraped from the data file that powers pronoun.is, as well as an extra set that I really care about. A python script transforms the table into a bunch of dhall files that are then read by the Rust program.

The Rust program will then reformat all of those entries into a hashmap where the key is all of the pronouns in the group separated by slashes. For example, the pronoun set for she/her will have a key of she/her/her/hers/herself.

When a user goes to something like /she/her, the service will loop over the entire hashmap for pronoun sets that start with she/her. If it finds a match, it returns that data.

Mara is hmm
<Mara> What about the reflexive singular form of they (themself)? That would have the same starting characters as the reflexive plural form of they (themselves).

Cadey is enby
<Cadey> I added a hack to handle this. If you go to pronouns.within.lgbt/they/.../themselves, it will work as you expect.

Then you can use it like you would use pronoun.is.

DNS

After I moved off of Cloudflare last year, I moved all my DNS management into AWS Route 53 and I manage it with Terraform. I made a small terraform file that points to the fly.io deployment and applied it on stream.

Everything worked as expected.

Numa is delet
<Numa> How many levels of SRE are you on?

Mara is hmm
<Mara> I don't know, maybe like 5 or 6?

Numa is delet
<Numa> You are like a little baby. Watch:

hero image blog/pronouns-service/levels-of-terraform

Usage guide

Usually you can get away with a link such as pronouns.within.lgbt/she to get the pronouns and usage examples for she/her pronouns. There are a few cases where there are multiple sets that have the same initial pronoun, like xe/xer and xe/xem. If you get inconsistent results, you may want to be more specific.

There are some neopronouns that are not in the database. If this is the case, then use the full form of /subject/object/determiner/possessive/reflexive to get a custom page with your pronouns of choice. For example, you can get the pronouns for ce/cem by going to pronouns.within.lgbt/ce/cem/cer/cers/cemself.


Mara is happy
<Mara> If you want to watch things like this get coded and deployed live, be sure to follow the Twitch channel and the stream announcement Mastodon account. Streams will usually be on Saturdays around 12-13 EST and go on until they are done. The streams will usually contain things that don't get recorded in the blogposts that result from them.


This post was written live on Twitch. You can check out the stream recording on Twitch and on YouTube. If you are reading this in the first day or so of this post being published, you will need to watch it on Twitch.

This article was posted on M01 08 2023. Facts and circumstances may have changed since publication. Please contact me before jumping to conclusions if something seems wrong or unclear.

Tags: rust axum dhall TransRightsAreHumanRights

This post was not WebMentioned yet. You could be the first!

The art for Mara was drawn by Selicre.

The art for Cadey was drawn by ArtZora Studios.

Some of the art for Aoi was drawn by @Sandra_Thomas01.