Aphrodite.dev https://www.aphrodite.dev/~blog My personal blog, about my life, and pretty much whichever topic I choose to write on. cap (https://git.sr.ht/~artemis/cap) en-us Fri, 22 Nov 2024 15:15:46 +0000 Fri, 22 Nov 2024 15:15:46 +0000 https://www.aphrodite.dev/~blog/61-gin-solitaire.html https://www.aphrodite.dev/~blog/61-gin-solitaire.html Made a little gin solitaire game Wed, 20 Nov 2024 00:00:00 +0000

i've been struggling with coding anything recently, and games are a particularly dark spot to me, so this seemingly simple game was what i needed as incentive to try my hand at implementing something again.

the game is made in javascript, only including the mithril.js library to help me deal with UI bullshit but otherwise only uses browser stuff.
it's not particularly accessible though, and it doesn't support "older" browsers.

below are the links to the game itself, its source code, and the mithril.js library.

https://www.aphrodite.dev/~blog/60-server-infra-nixos-colmena.html https://www.aphrodite.dev/~blog/60-server-infra-nixos-colmena.html Server infrastructure management with NixOS and Colmena Thu, 07 Nov 2024 00:00:00 +0000

i've been banging my head for years against the horribly obtuse wall of centralised server management, and in despair produced by the horrible solutions (such as ansible) i ended up saying fuck it and going for NixOS only.
Any server that won't be compatible with it will have to find another way tailored to it.
After weeks of trying to get a multi-VM environment set up in a way that would allow easy testing of setup and teardown combined with ansible (filled with crashes and frustration), i ended up giving up and going for NixOS.
Note that i never tried to manage any NixOS system remotely so this was completely new territory for me.

Still, among the first tools that appeared in results when searching about the topic i found Colmena, a pretty barebones but still intuitive to use stateless NixOS deployment tool.

One of the key aspects i was trying to find was to have something to easily allow me to extract secrets from my vault softwares of choice (something ansible disastrously fails to do) and Colmena is managing it extremely well.
Additionally, the main configuration file (or "playbook" in ansible terms) is as trivial as the usual NixOS configuration system, though i did need some tries before understanding that i needed to include the whole configuration for each system and not a simple subset (which is something that ansible would be better for).
i don't particularly mind to be fair as my systems are pretty uniform and only need a few minor hardware configuration changes which are easily included in the colmena configuration.

Making a small bash script to automate the server OS setup (in case of reinstallation) was pretty easy too and after test it allows me to fully reinstall and redeploy a server in around 10 minutes, with only around 2 minutes of active work on the machine itself.

This was a pretty cool discovery and finally mostly solves my centralised server management issues, so i think i'm gonna stick to it.

my colmena configuration will probably made public once i finish and polish it, in which case this article will be updated and a notice of change article will be published.

https://www.aphrodite.dev/~blog/59-go-home.html https://www.aphrodite.dev/~blog/59-go-home.html Go home Wed, 21 Aug 2024 00:00:00 +0000 Content-warnings: paranoia

people keep telling me to go home.
but i don’t understand.
isn’t home supposed to be where you feel safe?
isn’t home supposed to be a refuge?
if so, then what am i supposed to do when i’m afraid?
when no matter how safe and calm my house is, i’ll only feel fear?
if nowhere is safe, then where should i go?
where is my home?

https://www.aphrodite.dev/~blog/58-a-divide-on-madness.html https://www.aphrodite.dev/~blog/58-a-divide-on-madness.html A divide on madness Tue, 20 Aug 2024 00:00:00 +0000 Content-warnings: mental health, madness, activism

i think that there’s a certain dissonance in the mental health / neurodiverse community, and i think it’s been contributing harshly to the exclusion of so many members.
it’s about the notion of humanity (or lack thereof) and the stigma around it.
as a strong link is made between being inhuman / non-human and being Bad, we’re commonly facing lots of violence and discrimination from "neurotypical" and "sane" people, but there’s also a scarily big chunk of our own "global community" pushing us away for being too different, too scary, too "broken".
on one side, there’s the trap in which many fall while trying to reduce the violence they get, mostly by trying to appease NTs and to change their image, and on the other side there’s a deeply ingrained notion of "human superiority" in western culture and probably more widely spread (won’t make any assumptions here as i’m not knowledgeable about this enough for now).
this idea brings "humans" to the front, stepping on everything else with little regard, which means everything that doesn’t conform to the "human" criteria chart will be seen as lesser, unworthy of respect.
this is how most discriminations work, an imbalance of power linked to one’s self being used to harm and dominate, use; you’ll notice that this pattern and logic isn’t only applied between humans, but to all living beings.
trying to appease to the dominant group is, like in any other fights for equality and fairness, useless.
domestication doesn’t expose you to less violence, only different forms of it.
the only reason why they have a weaker hand towards more commonly accepted mental-health topics is because of decades, or centuries, of fighting. a fighting that isn’t finished. a fight that progressed thanks to our siblings’ riots.
we’re all fighting for the same thing: equality, fairness, respect. throwing us under the metaphorical bus they’re driving just because we’re "too weird" will help no one.
in the end, in their eyes, we're both the same.

- someone that’s crazy and inhuman

https://www.aphrodite.dev/~blog/57-if-you-use-s3-keep-your-bucket-names-secret.html https://www.aphrodite.dev/~blog/57-if-you-use-s3-keep-your-bucket-names-secret.html If you use S3, keep your bucket names secret Tue, 30 Apr 2024 00:00:00 +0000

What does that mean?
It means that if you try to upload a file to someone's bucket (to which you don't have access to), you will get an access denied error as you'd expect.
This also means that this someone will now have to pay for an upload trial, even though they didn't initiate it.

Let me rephrase that.

You can make someone pay a higher bill by spamming upload requests to their bucket, even without any AWS access credential configured at all.
Targeting the wrong region or targeting no region at all will even worsen this, as it will internally redirect to the right region and bill you for the redirect.

It's been confirmed by AWS support as expected.

I discovered this information reading the medium article below.
This is a good reminder to please stay careful around "cloud" tools or tools with obscure pricing.

I copied over the lesson points from that medium article in case it goes down.

  • Lesson 1: Anyone who knows the name of any of your S3 buckets can ramp up your AWS bill as they like.
  • Lesson 2: Adding a random suffix to your bucket names can enhnace security.
  • Lesson 3: If you use S3, always specify the region of your buckets.
https://www.aphrodite.dev/~blog/56-new-document-about-covid-masks-available.html https://www.aphrodite.dev/~blog/56-new-document-about-covid-masks-available.html New document about covid masks available Fri, 01 Mar 2024 00:00:00 +0000

About masks: tl;dr

  • Wear ffp2/n95 or higher.
  • Reduce air leakage as much as possible! (it makes efficiency goes WAY DOWN!!!).
  • Throw away soiled, deformed or damaged mask, let clean ones in a paper bag at room-temperature for a week to reuse.
  • Don't use a mask more than 5 times. (except if you're out of ffp2/n95, it's still a better option than even surgical mask most of the time)
  • Headband are comfier and more fitting than ear-loops, get those!
  • Mask efficiency goes like ffp3 > fpp2 >>> surgical >>>> cloth >>>> no mask
https://www.aphrodite.dev/~blog/55-02-51.html https://www.aphrodite.dev/~blog/55-02-51.html 02:51 Wed, 07 Feb 2024 00:00:00 +0000 Content-warnings: psych ward, mental health, paranoia, meds, psychiatric abuse, reference to self-harm

02:51
Another room
Clock’s ticking
We know how this night will end
A re-run seen times and times again
Same scene, different room
Unknown shadows, exposed bed
Racing thoughts about a million projects
Paradox of dull emptiness and fiery monologue
Pilled, medicated, drugged
What do those even do, now?
Increase Increase Increase
I only got bills and addictions from that
11 different ones, a myriad of choice
Alprazolam, Prazepam, Diazepam, Lorazepam
“Try them all, you’ll see!”
“Not strong enough to sleep? Take this new one”
Live the night or die for 14 hours, your choice
Your choice Your choice Your choice
Your choice Your choice Your choice
See? We’re not forcing you. Doesn’t work? Your fault.
“But you’re too young to need benzos”
“Just live healthy and you’ll be fine!”
Even my scars have wrinkled by now.

test

https://www.aphrodite.dev/~blog/54-air-quality-checking-using-a-ens160-aht21-module.html https://www.aphrodite.dev/~blog/54-air-quality-checking-using-a-ens160-aht21-module.html Air quality checking using a ENS160+AHT21 module Fri, 29 Dec 2023 00:00:00 +0000

i'd like to have a small carry-on tool to check the air quality for me, but i can't really afford a ready-made reliable one.

The electronics

Knowing that the ENS160 sensor isn't the best option, i still chose to go for it due to its affordable price and because i can still make good use of the provided data.
i was recommended a cheap module bundling an ENS160 sensor and a AHT21 sensor (which is for temperature and humidity readings), so i went ahead and bought one to try it out.

i'm prototyping using an arduino uno, but i will very probably use either a nano or a custom circuit in the first final build.

This is my log noting down my research and progress on it, because damn there isn't a lot of content about it.

On wiring it

The first hurdle i encountered was how to wire this demonic piece.
On the board pins, there's a Vin pin as well as a 3v3 pin, but absolutely no indication on what voltage the Vin pin takes.
Since the spec for the ENS160 asks for a bit less than 2v i was feeling extremely frisky at throwing it either of those but both 3v3 and 5v are in the tolerance range for the AHT21 sensor and the electronics clearly show two transistors in a layout that usually resembles a step-down converter so i bit the bullet and threw 5v at the Vin pin and grounded the GND pin.
So far, nothing's burning down, so i assume it's correct.

Wiring the SDA/SCL pins to my arduino board and running the I2C scanner code provided me with two address matches, so both modules are powered and responsive!

The ENS160 sensor apparently has a deep-sleep mode (which is super cool as far as portable device battery life goes), so i'll try to figure out if the board "implements" it or not (i'm leaning towards INT being the pin to play around with to put the circuit to sleep, but experiments are needed).

Identifying the sensors

Since i'm getting two I2C addresses (0x38 and 0x53), i need to figure out which is which to know how to talk to the sensors (or maybe to the whole board at once if it has a middle layer to manage both sensors by itself, but looking at the components i don't see any chip that would provide that functionality, so probably not).

After diving into the datasheet for the ENS160 sensor (which provides its own I2C interface, as expected), i find that the 0x53 address is one of the two I2C addresses the chip is programmed to take, so the 0x38 is very probably for the AHT21.

this kinda threw me a reminder in the face: the tech world and ethics is really not something one can expect to see together.
i hate I2C vocabulary.

Working on the ENS160

i'm going with Adafruit's ENS160 driver library, which provided me with a bunch of pretty complete examples.

Running the first one indeed "works", but since when on its initial power-on the sensor needs a very long time to "calibrate" itself (around an hour), i can't do much more for now.
i'll leave it as-is and take a look at the AHT21 sensor in the meantime.

Working on the AHT21

Searching for AHT21-compatible libraries through the Arduino IDE without knowing more about the sensor, i kept only stumbling on AHT20 libraries, but after a bit of digging i discovered that they're both so close to each other that they're effectively compatible for their "core functionalities".

i chose to go with a fork of Sparkfun's library for this sensor as its code is much simpler and easier to read and possibly maintain (if it comes to this), and it worked right out of the box with the provided example code!

Humidity AHT20 examples
AHT20 acknowledged.
Temperature: 22.17 C	Humidity: 47.63% RH
Temperature: 22.14 C	Humidity: 47.64% RH
Temperature: 22.16 C	Humidity: 47.67% RH
Temperature: 22.14 C	Humidity: 47.71% RH

Peeking the library's source code also told me i was right to assume 0x53 for ENS160 as the 0x38 address is being used as a constant for the AHT21 sensor, so everything fits.

Starting to get serious

OK, now that we've got the basics going with the sensors, it's time to start a real project folder and vendor in all the libs i used in my various sketches.
My end goal is to use bluetooth (if possible, BLE) to more easily and reliably communicate data to my phone, but i know almost nothing about bluetooth and it's not a beast i wanna have fun with just yet.

Instead, i'm gonna go for one of my good old I2C-wired LCD screens (a basic blue backlit 16x2 one).
It's bulky as hell but is super easy to write on and has a really good support, and since i'm already using I2C everywhere and adding the LCD screen will not draw too much even combined with everything, it's a decent place to start in.

Another option i'm keeping for if i get mad at my screen (or for the "closer to final" design) is to add my micro SD card reader board to the mix and log the readings to a SD card.
The only issue this poses is timestamping: either i go for "fuck timestamping" (the easy route but that will make power cycling and later-on data usage awkward) or i need to add a RTC module with its little button battery (the hard route because that's yet another component to deal with in the prototype, and that's more space and power/batteries to account for in the final design).

Though if i go for some form of bluetooth, the current timestamp is definitely an information i can request to my phone (or whatever client device), so i could have a temporary log file being written while the timestamp is being requested, then the log is moved and rotated to the obtained timestamp.

Accounting for the 3 minutes start-up time requested by the ENS160 module i wouldn't even need that temporary log file because i would have more than enough time to request the timestamp, and if i were to not receive it (e.g. if my device were to not find a phone or remote to connect to), i could also simply assume a degraded mode of on-device status reporting without any logging, for example using LEDs to signal the air quality info or using a small LCD or E-ink screen to signal everything.

But anyways, that's for later.

https://www.aphrodite.dev/~blog/53-moving-to-safer-tools-harm-reduction-in-self-harm.html https://www.aphrodite.dev/~blog/53-moving-to-safer-tools-harm-reduction-in-self-harm.html Moving to safer tools - risk reduction in self-harm Thu, 28 Dec 2023 00:00:00 +0000 Content-warnings: mental health mention, self-harm mention (not graphic)

My health isn't the best, and recently it has gone bad enough that i had to resort to self-harm to get through some times.
In a continuous effort to make my environment as safe as i can as well as caring for myself as much as i can, i finally decided to move from my previous tools to a real medical scalpel and blades.
While it does require a bit of initial practice on how to safely handle one, it provides the benefit of a totally safe and easy to deep-clean handle as well as access to sterile, single-use blades, vastly reducing a lot of risks that were and are present in other tools in such a sensitive usage context.

However, my physical disability impairs me in the general usage of scissors (i can use them, but it will be a painfully unpleasant experience), so i cannot use forceps or other pincers to safely install and remove the blades.

In order to fix this issue, the blade installation method i'm going for is... not the safest or most recommended, but compared to my previous context it still is a much-needed upgrade.
However, to remove the blade, i found various "blade removers" online, mostly sold by pharma corpos for a stupidly high price.

Double-checking on thingiverse in the hopes to maybe find a custom-built model did reward me with not one but two different models for size 3 and size 4 handles respectively (i use a size 3 handle); all links to those models will be added below.
A great friend of mine agreed to print two units for me and even mounted them with the right screws, providing me with ready-to-use units right away (and for that, i'm super grateful, shopping for two screws is currently not worth my health), and after an actual in-context use i am more than happy to report that it works wonderfully well and requires little to no physical force or fine movements to be safely used to dispose of a blade.
i'm especially happy that they work so well and with such a simple and sturdy build because i could find absolutely no other 3D-printable plans for alternatives, which means i would've'd to pay full price for a "professional" one.

i also downloaded them and made them available through the two following links in case the sources were to be taken down somehow.
They are both licensed under different creative commons terms, which will be written on the link.

On harm reduction

Writing (and archiving) about this nifty tool brings me to consider getting back to publishing a risk reduction section on my notebook, because there's quite a lot that can (and should) be said, and i feel that i'm finally in a place and skill position that allows me to write concrete and actually safe documents.

Especially around 3D-printed tools, there's some stuff to be said (i consider them to be reusable, and there's definitely stuff to write around caring for reusable tools in such contexts), mainly due to the porous nature of the commonly used materials (PLA, PETG, etc) making a serious cleaning much harder than e.g. steel.

Note: i am aware that the fabrication method is the biggest factor on the question of porosity, the previous sentence implies the use of those materials in a layer-by-layer granular / liquid deposit of material, which doesn't provide any reliability on "non-porosity".

My mention of steel is to denote the fact that using steel to make a tool usually requires other techniques which are less prone to those porosity issues if the design is kept as simple as Digitalpunk's removers.

The manufacturing process is as important as the material choice for the bio-cleaning compatibility and sanitary aspects, and "DIY" tools with at-home 3D printing or other affordable manufacturing techniques usually cannot provide any reliability on that regard.

This section would contain a list of the tools i use (or don't use), how i care for them, what is their assessed risk profile, but it would also contain some simple step-by-step self-care protocols that can be followed.

As a note, all those pages and protocols are built from knowledge coming from various places in the medical and bodmod fields, from research papers, from my own training as a licensed piercer, and from the proofreading and co-authoring from multiple nurses i have the chance to be able to regularly work with on the topic.

https://www.aphrodite.dev/~blog/52-7th-day.html https://www.aphrodite.dev/~blog/52-7th-day.html 7th day Mon, 11 Sep 2023 00:00:00 +0000 Content-warnings: psych ward

Flashes of color, waves of green blue red yellow and a million others you couldn't name or even see.
What do they mean? How do they feel? Smell? Taste?
Even the brightest of sounds seem to leave you indifferent, frozen, unable to perceive.
How can you express yourself when there isn't more than a single word in your dictionary of senses?
All that stays is this white, white, white, white, white.
White walls, white floor, white ceiling, white sheets, white lights.
Even the aseptic scent floating in those endless corridors can't seem to hook to anything else than the descriptor "white".
You don't really know if you would consider it all bland.
After all, how would you be able to grade this all when you don't even have a scale?

"How are you doing, today?" asks the doctor, just as he asked yesterday, and the day before, and the day before, and the day before, and the day before, and the day before.

"Empty" would be what he could understand, but by now you already know what's gonna be said instead.