Avris Hello! My name is Andrea. I code and write a blog. Welcome to my personal part of the Internet! https://avris.it/posts.atom 2026-03-13T00:00:00+00:00 Avris AI policy of Pronouns.page urn:uuid:c8a96870-4f50-50ba-8069-60656fd0936c 2026-03-13T00:00:00+00:00 A policy that I've written for Pronouns.page in consultation with the Collective. I am following the same values and guidelines in my open source work outside of that project as well.

A post on the pronouns.page blog

]]>
Emoji Rating urn:uuid:2f502d05-d553-57b4-b9bb-c52a4505a153 2025-12-26T10:36:35+00:00

let's make rating systems meaningful again!

]]>
United by music. Divided by genocide urn:uuid:e52bbcab-7593-5d2b-9f17-d02488dfcc1f 2025-05-18T10:00:00+00:00

Last night we were inches away from the Eurovision Song Contest dying a tragic death… I was privileged to be able to fulfil my long time dream and be in the live audience for this amazing event that unites dozen of countries on a continent that used to be torn by constant wars. It was an extraordinary experience, by far the best couple of shows I've ever attended. And yet, coming back home from it felt like the whole crowd has just been punch in a gut. After all I've seen, I don't believe for a second that the apparent support for Israel was genuine and organic. They've used one of our favourite things in the world as a propaganda tool for genocide, and I'm fucking disgusted.

Israel shouldn't be allowed to participate in the first place

First of all, let's state the (hopefully) obvious:

Eurovision was founded on values of peace. A country actively making war, bombing schools and hospitals and killing millions of innocents has no place in this contest. FREE PALESTINE AND #BanIsraelFromEurovision

@itsjustagame.bsky.social

When your country is run by a wanted war criminal and has ethnic cleansing as its official policy, I won't hesitate treating your flag same way I would a flag of Third Reich, and to call people who proudly display it nazis.

Despite Israel being, controversially, allowed to compete in the ESC while actively committing genocide, many eurofans still wanted to enjoy the show. The contest has never been perfect, but for many of us it was still a highlight of every year. They would protest Israel's participation while supporting all other contestants on the biggest and queerest tv stage in the world.

My experience in Basel

This is the first time I attended ESC in person. I got to watch both semifinals and the great final during evening previews, as well as the live finale show at a viewing party at Arena+. This is my, admittedly biased, experience of what happened inside the arena – but I hope it will shed some light on the events.

Now, to be fair, I can't be sure if Israel's performance wasn't jaw-droppingly good – because I've never seen it. The song itself is IMO very meh – but the first time I heard it was during the evening previews, and I haven't seen the staging, because I joined a handful of people (sadly just a handful), who turned their backs away in protest. It's telling, however, that national juries – professional musicians who sign off on their votes with their names and reputation – has put it the nazi entry in the bottom half of the competition.

I also don't have any direct evidence of anyone tampering with the televoting, how could I? But here's why I'm convinced that no, the audiences across Europe didn't actually think that Israel's song deserved the first place:

Any enthusiasm for Israel in the live audience and in the Arena+ watching party felt forced and disgustingly cringe. Every single other performer would get an ovation from the crowd – sometimes bigger, sometimes smaller, of course, but people were always happy to see the artist on stage. When Israel's name appeared on the screens, though? It went silent for a few seconds, until a bunch of people started cheering as loud as they could, and then lots of others felt peer-pressured to join. It happened a few times – Israel coming up, then dead silence, and only then some cheers.

Other fans would cheer and wave to their idols on stage, like one does to artists, but people with Israeli flags looked like they were comforting Yuval in a great hardship. Other people would, obviously, wave the flags of their favourite countries during their performance, but generally wouldn't bother with that during all the recaps – except for Israel, whose fans never missed a chance.

When the final votes were about to be announced, when it was only between Austria and Israel, the crowd of 36 thousand people at the Arena+ started shouting repeatedly “Austria! Austria! Austria!”. It was so powerful and emotional… And then, the second Austria's victory was announced, the whole crowd erupted in the loudest and most relieved cheer I've ever heard in my entire life. At the very same second, a whole bunch of nazi supporters immediately rage-quit the stadium. You know, how every genuine eurofan does when their favourite song wins a disappointing, but still super prestigious, second place… You know, how no other audience had reacted ever, AFAIK.

The atmosphere on the way back from the grand final was unlike any other Eurovision-adjacent event I ever attended – rather than partying and singing in public transport, people seemed defeated. Relieved, but not happy.

People are not happy with whatever the hell just happened.

And the EBU knows all of that too. They've been in the room when all of that happened, they saw all the protests happening, they've faced harsh criticism. But perhaps most tangibly: they've changed the format of Martin Österdahl giving his thumbs up to the validity of the results – from a fucking puff piece to him personally, to just briefly showing him on the screen literally giving thumbs up without uttering a single word. After last year's boos that their fucking tech couldn't even manage to censor out, they knew he wouldn't be well-received this time either, and for good reasons.

You know who else knows perfectly well that Europe and eurofans don't like their genocidal country? The Israeli fans themselves. They looked constantly agitated, nervously looking around, expecting problems every step of the way.

Legitimacy of the votes

I managed to vote twice last night. I even managed to vote for my own country. All I needed was a bank account in Germany, where I used to live, et voilà! With my current bank, bunq, I can open a large number of virtual credit cards from a whole bunch of European countries, with just a few clicks – and I could probably automate it via an API as well.

So if I could slightly abuse the system – just to see, if it will work – can you image what someone with more resources and political will could do? Here's a meme I found on r/YUROP that illustrates one scenario:

If that's what some random highly motivated fans can conceivably and realistically do, can you imagine what a nation state with massive resources could pull off?

Both last year and this year they had bought expensive Times Square ads targeting US-ians, who aren't really known for even watching ESC. Their song was mid at best. From the live audience they got a lukewarm reception at best. Their image internationally is, let's say, far from neutral. It's hard to believe that they would have won the televote, and by such a margin.

How much does it cost them to bomb Palestinian children every day? And how much does a million votes cost? Is it possible to manipulate them? And most importantly, would Israel benefit from the world thinking that they're so beloved by regular people watching a music competition?

Where do we go from here?

I don't know… An obvious answer is boycott – but actual fans leaving the competition and not voting for other countries anymore only makes is easier for nazis to hijack the vote, doesn't it?

And sadly, I don't think individual boycotts on a scale similar to what's happening already are ever gonna be effective. If like half of us stopped watching ESC, the EBU would notice – but let's be honest, that ain't gonna happen. If a bunch of EBU members pulled out of the competition in protest, maybe something would change. But is that likely to happen?

I'm feeling so powerless against the big boy decisions made in conference rooms behind closed doors. I don't feel like anything I do could actually change things for the better – and boycotting the ESC would just be shooting myself in the foot without accomplishing anything.

But yesterday it stopped being about the effectiveness of boycotts – instead I started asking myself: will I even keep enjoying Eurovision anymore?

I love so many things about this competition, it hurts to see it so out of control of the actual fans. No amount of protests, boycotts, demands, booing or angry tweets makes EBU consider banning Israel – even though they could easily do it, just as they did with Russia and Belarus, and for the same reason.

At which point does this most delicious cake become so poisoned that it's no longer tempting to take a bite? Back when Israel was just one of dozens of competing countries, their outrageous participation might have been just one of many aspects of the show. But if you expect me to believe that the audience in Muslim-majority Azerbaijan gave Israel 12 points, and still enjoy the show and think that my vote or opinion even matters anymore – why the fuck would I even bother anymore?

As much as people might want to claim otherwise, Eurovision is a deeply political event, with an explicit political goal of promoting peace through music. Right now it fails at that goal disastrously. EBU hands a pinkwashed propaganda tool to a genocidal state. It's disgusting. Their names and faces will end up the same pages of history books as Goebbels.

Fuck Israel. Fuck EBU. Fuck Österdahl.

Free Palestine 🇵🇸

]]>
Social Media as a Public Service urn:uuid:23531437-5581-5105-beb7-a7c807d4927f 2024-07-29T14:04:08+00:00

As a software developer I can't help but look at all the issues plaguing social media and think that surely they can be fixed with code somehow – we just need a cool distributed protocol or something, right? But the thing is, no amount of techy magic is going to help here, because the problems are not technical – they're policy issues.

Try to think of a big issue with social media that can't be tracked back to its flawed business model. Of course we're gonna get addicted to doom scrolling, if algorithms optimise our feed for maximum engagement. Of course it will be plagued with misinformation and polarising, hateful content, if that's what drives engagement. Of course the big tech won't do more than absolutely necessary to deal with all the toxic stuff and AI-generated trash on their servers, if removing that content directly reduces their advertisement revenue. Of course big tech is gonna sell and abuse as much of our private data as the regulations allow them – as long as it brings them their billions.

But imagine if simply we took away the whole incentive to enshittify the Internet? What if we took ads out of the equation? What if we took the profit incentive out of the equation and started treating social media as a public service?

We already treat a bunch of other media as public services after all: we have public TV broadcasters, public radio stations, rarer, but still, publicly owned press… We're fine paying taxes in order to receive professional services accessible to everyone and under democratic control. We see how much power the conventional media has to shape public opinion, so we don't want it all in the hands of big corporations. I'd argue that for social media this is even more important.

Running a social media page is no small enterprise – but the EU has more than enough resources to pull it off. And judging from how strongly have they been going after big tech for their monopolistic and anti-privacy practices, there would likely be a political will do accomplish it too.

Imagine that… every EU resident gets their own virtual space: some storage space, a subdomain, an email address, a simple website builder with blogging and commenting capabilities. It could use ActivityPub or its own new protocol to federalise those blogs. Instead of creating a Gmail account owned by Google, and a Facebook account owned by Meta, and a Twitter account owned by Musk, etc. etc., you could just create an account owned by you – with the infrastructure maintained and the content moderated by the state, just like it now does with other kinds of infrastructure, from roads to radio waves.

We could go back to the early days of the Internet before big tech swooped in and monopolised the mainstream. Back to the times where people owned the stuff they posted – except make it easily accessible even to non-techies.

It shouldn't even be hard to get a critical mass of users on the platform – just make it as good as Facebook or Twitter (what a depressingly low bar!) but make it completely free and without any ads or “the algorithm” – who wouldn't switch? Offering an alternative to big tech's vision of the Internet wouldn't really kill big tech – but it would definitely force it to do better and compete with user- and privacy-friendly alternatives.

If you don't want your page stored by the government, you can host it yourself – but still reap the benefits of the open-source website creator and federating with the network. If you don't want to use the website builder, write your own page and implement the open protocol on it (or not). If you prefer to use your space for something different, just do that instead. You can have all the freedom of corporation-free Internet, without needed the technical know-how to set it all up.

Obviously, accomplishing that wouldn't be easy. It costs to run a social media portal – just like it costs to maintain roads or run radio stations. Social media requires moderation – just like road safety requires traffic rules and vehicle registration. Moderation rules and decisions would be just as controversial as today – but at least controlled democratically and not by a faceless corporate entity.

It might not be easy. But if we do it right, it could be soooo worth it!

]]>
The first day of my life urn:uuid:f7744cce-2737-5d53-8c31-af8d9990a909 2024-07-20T04:08:06+00:00 🇮🇹 Sunrise at Lago di Garda

i took this picture exactly 12 years ago, early in the morning, at lake garda in italy. it's a very special photo for me – it marks a day i now consider the first day of my new life ☺️

as a teen i used to partake in language courses in padova, italy. they were organized by an order of catholic monks whose main mission is to… pray for more priests. i'm really grateful to have had this experience. i was able to go on a vacation to a beautiful country practically for free – not something that my former family could afford otherwise, or at least not for like 6 years in a row. i've learned a language there, spent amazing time with friends, had plenty of valuable new experiences, got crazy, learned to be a bit of bad boy too. i've learned so much about myself over there… padova trips have always been time for reflection and self-discovery, a break from reality, with a mysthical atmosphere (at least in my head), perfect for prayer and soul-searching. i've spent hours upon hours in the chapel or on a windowsill in a quiet part of the building, contemplating my life, ethical dilemmas, trying to reconcile my sexuality with my faith, my faith with my reason… learning how to be a person.

but those trips weren't being organised purely out of the priests' good hearts, of course. considering that their main mission is to get god to send them more priests, an implicit goal of those courses was to recruit us to join a seminary. oh well, mission failed successfully – i really did find my true calling there, but it wasn't what they'd like 😅

the last year i was there felt different than all the rest. least of all because it was happening in a different city, desenzano de garda. my life had already gotten so much different at that point. i was 19, finally legally an adult. i have passed my high school exams (which are, nomen omen, called “matura” in polish – “the maturity exam”), started uni, i was seriously doubting my faith and openly questioning it during catechism classes at school (yes, it's a thing in poland) and in conversations with priests etc. i came out to myself as queer; then to a few closest friends. i started dating. i gained my first sexual experience (i refuse to call it “losing my virginity” 🤮). all of that a span of last year or so.

just a few weeks before desenzano i also went to regional catholic youth days – not just as a participant, but also as a “camp counselor” / “guardian” for a bunch of teens from my parish. i remember taking advantage of the perks and freedom that came with it, by cutting myself some slack in my ongoing cosplay as a christian – i was skipping most church services, and instead was hanging out with my friends / wards, and playing guitar together… my gay friend lived in a village near where the youth days were taking place – so one day he came to meet me, and we were openly cuddling in front of a park full of nuns and catholic teens. this was one of my first, relatively subtle coming outs, as well as acts of rebellion against the church, the homophobic society and the patriarchy. i remember it feeling so freeing, so empowering.

i remember wearing very faggy, green skinny jeans over there. i was just starting to develop my style… nah, not just that, but i started to even care how i look and what i wear in the first place. when i look back my old photos, ugh… no wonder i was so unfuckable in high school, i wouldn't invite that old me to a party either 😅

anyways… back to desenzano. it was different than the previous years in padova. after years of personal arguments between organisers, us teenagers behaving terribly, and a bunch of other drama, we weren't welcome in padova anymore. but in desenzano i didn't feel welcome either. or at least i didn't feel like i belonged.

i barely even remember that trip to be honest. a few random memories. only one of them in the local chapel. i remember that even though i was there for the services, i didn't pray anymore… like, i recited prayers, sure, but that's different. it's my first clear memory of not believing, just performing faith.

i definitely have been doing that for a while at that point – but that the first moment i can pinpoint in time and space. it's the first moment when i could not only say that i'm gay and an atheist, but also that i know that, that i'm sure of that. i knew i was already a different person by then, i knew that the thing i was doing right now was something that i'm leaving behind.

i think there was talk that the course wouldn't continue next year, i'm not sure. but i definitely knew that it was a goodbye for me. from the trips, from italy, from the church, from my community and from my former family.

although there are so many things about them all that i'm gonna miss terribly, on that day i wasn't feeling sad. i don't remember anymore what kind of stupid interpersonal drama was playing out there, but even though i was a queer heretic coming back to live with their fundamentalist parents, i was feeling kinda happy to leave that place. bittersweet. mostly, i was relieved. i didn't fit in with that community anymore, and i was at peace with that and the decision to leave it behind over time.

over the next year and a bit i would come out to my parents, get outed by them to the rest of the family, finally stopped going to church, met my future husband, moved out, and started my life as an independent adult. it's been a long and painful process.

but also a beautiful one – because it was the process of… becoming me. i realised i don't have to be a miserable, unhappy clone of my parents. there is a “me” out there that i want to and can be.

so if i am to celebrate that process somehow, i can think of no better moment to mark the occasion than in that beautiful sunset, over that beautiful lake, early on that refreshingly warm morning.

]]>
OVH bulldozed my server urn:uuid:0966dbae-5724-510d-b2e1-0aff46c6d98b 2024-06-29T06:54:49+00:00 AI-generated illustration: a wrecking ball with OVHcloud logo smashing a server with my blog's logo
Illustration generated with ChatGPT-4o

A big chunk of my free time in the last week has been consumed by work on restoring a bunch of my projects after my hosting provider, OVH, completely removed my server and backups. Here's what happened.

TL;DR

This post ended up longer than I was hoping for, so if you don't wanna read the whole thing, here's an executive summary:

  • OVH has made me start a new account for each country I've lived in; it's annoying to keep track of, so I'm starting to clean it all up as well as to slowly move my projects a better competitor.
  • I requested removal of one of those accounts, clearly marking which one, and they did remove it… and then removed another account too 🤦 The one where my server and backups were located and paid for in advance.
  • It's been over a week and support still hasn't helped me a bit.
  • My planned move to Hetzner got expedited; and I've decided to also make a bunch of improvements to my projects along the way: to update language versions, dependencies, licenses, etc., to discontinue some, and to make my setup more resilient, easy to restore and less reliant on a single company in the future. So it's been infuriating, but with silver lining.
  • Unfortunately, I also lost some databases in the process – causing one project to be prematurely discontinued, and a few others to lose some less important but cool stats…
  • Update: After 17 days I received a call from the claims department: they took responsibility for the incident, apologised, confirmed that the data is not recoverable, and offered me 136,38€ (six months worth of the cost of the service) – which would be a reasonable compensation for the trouble, but is a laughable compensation for the unrecoverable loss of data.

Why would OVH do that? How did they handle the situation?

I've been using OVH to host my VPS and register my domains for ages now. They used to be good enough, but most importantly cheaper than everyone else. Now, however, I can get better machines and better service for less. I was recommended a German company called Hetzner and I've been planning to move there, and procrastinating on that plan, since, *checks notes*, October 2022 😅

Company Model CPU RAM Disk space Bandwidth Price
OVH VPS 2018 SSD 3 2 vCores 8 GB 80 GB + 50 GB extension Unlimited (with fair use policy) 22.73€/month
Hetzner CX42 8 vCores 16 GB 160 GB 20 TB 19.84€/month

I've actually been using Hetzner for a while for a different project, ever since I moved Pronouns.page to its separate setup (see: Migrating Pronouns.page to a new server – a success story) – and I can only recommend them!

Which is not the case for OVH at all… While the price difference is not terrible – I could live with this specification for that money – there are so many other things about OVH that kept annoying me greatly. Their dashboard is slow, buggy and has terrible user experience. Your account is bound to a country in which you created it, meaning that me, a person who moved from Poland to Germany and then from Germany to Netherlands, ended up with three separate accounts – and scary automated emails warning me that if my whois information is proved to be inaccurate they will have to take away my domains. That information includes the physical address and phone number, which are bound to a country, so it won't let me update them without making me create a brand new account.

Okay, then just create a new account and move the domains and servers there, how hard can that be? Well, hard… The procedure to move a single domain, at least at the time I did that, required separately changing three contacts (iirc: administrative, billing and technical), confirming each of them via a code from the email sent to the old owner, then another email sent to the new owner. Multiply that by, idk like ten domains?, and you're stuck for hours with like sixty confirmation codes between two browsers, two email accounts, waiting for all emails to arrive and verifying which identifier is which. Rather than just letting me say: “hey, btw, I live in the Netherlands now” 🤦‍ They seem to have an affinity to spamming people with long plain-text emails – to a point one starts just glancing at them briefly and throwing them in archive without giving them too much thought.

Anyways… In early June 2024 the status of my accounts is:

  • a Polish account that hasn't been used in like 5 years,
  • a German account that only has a VPS, which I'm planning to just move directly to Hetzner,
  • a Dutch account that hosts a bunch of domains.

So as a person who would like to finally get the ball moving on the Hetzner move I've decided to at least clean up what I can: instead of three NIC's (account identifiers) in three countries connected to three email addresses, three password manager entries and three OTP manager entries, I could have two of each – and some more motivation to slowly but surely start moving everything. I tried looking for a “remove account” button, but to no avail. After a bunch of digging, I finally managed to find where to request the removal, via the GDPR procedure. And I did – while logged in to the Polish account, specifying the NIC of the Polish account in the form, and then again in the text of the request. Over the next week I got a few emails that they're working on it, and I thought that was it.

Oh how wrong I was. One day my husband let me know that Generator is down – so I tried SSH-ing to the VPS; it didn't let me, so I logged in to the OVH dashboard to debug with their in-browser console or to just reset the server: only to see that… there is no server.

I confirmed that the Polish account is indeed entirely gone, but the German one, while still existing, is completely empty, except for a history of payments and a support ticket. A ticket that I opened from the Polish account, written in Polish, specifying the Polish account's NIC – and their reply, also in Polish, that the German account is being removed.

I opened a new ticket bringing the situation to their attention. I even got over my social anxiety around phone calls and called their customer support – after all the sooner they react, the better the chance that the data is recoverable. Surprisingly, they didn't leave me on hold for ages or pass me through lengthy automated process, I actually got to talk to a real person within minutes. They gathered the info, they could see my tickets in the system, they told me they'll forward it to the appropriate department and that I should expect someone to contact me within hours.

Fast forward a week (and an angry nudge in the ticketing system) – still zero reaction.

What could I have done better?

I think the reason why someone removed the German account along with the Polish one is that while the account I was logged into when requesting removal, the NIC I put in the form, the content and the language of my message all pointed to the Polish account, one item did not: the form asked me for an email address and I mistakenly put in the one associated with the German account.

Which is an easy mistake to make when you're being forced to manage three separate accounts that could've easily been one. But more importantly: they didn't check if the email address entered actually belongs to the person making the GDPR request (eg. by them being logged in, by the user sending them an email from that account, by requiring a confirmation code by email); in this case both accounts happened to belong to the same person, but what if I put in someone else's email? Would someone be able to bulldoze a competitor's entire infrastructure by simply knowing what email they used for their OVH account? That's absurd!

Admittedly, they did notify me by email that my account is being removed. Among a spam of various emails, in a weird mix of Polish and German text, and in which the account to be removed is referenced solely by a NIC: a random string of numbers that I need to either remember or check my notes each time to know which is which. I think they also tried to tell me that my VPS is gonna be removed along the account, but the wording is absolutely terrible: “referencja do usługi na Twoim koncie wymaga niezbędnych operacji”, which translates to “a reference to a service in your account requires necessary operations” 🤦 Quite a long way from what I'd expect to be the best practice: a big, bold “hey, your account XYZ still has a VPS that's running and paid for, are you sure?!”

I could've moved to Hetzner 1,5 year ago. Oh honey, I so wish I had. But that's not an effort for one afternoon. There used to be 52 (!) projects hosted there along with 5 third-party web-based apps, and a bunch of dependencies. Some of that was using PHP 7.4, some PHP 8.3, some Node 18, some Node 20, some were just statically generated pages. If I were to move it over, I'd rather upgrade to newer version instead of supporting separate ones. And I'm a busy enby. I wrote earlier that I was “procrastinating” on the move, but that's not really accurate – I was damn busy with a bunch of other things, like Pronouns.page (which luckily was on a separate server already), or idk, one of the 153 repos I seem to have on my Gitlab (some of them private, so they won't show up under the link). So a proper move simply hasn't been a priority. Until OVH made it my priority.

I could've made the project easier to restore. Keep the configuration and a library of system packages in a repo, Ansible-style, or whatnot. Yeah, well, that was the plan for the Hetzner move 😅

And yes, I can hear hypothetical people screaming. Yes, I should've had backups. Well, I did. I had a script that was supposed to zip the most important data and store them on S3, but it broke and I haven't found time to debug the issue… I gave it low prio because I was planning to abandon the server anyway, and more crucially because I also had separate backups of the most important thing – databases. Other things I can restore with some effort, but databases would just be lost. The thing is, what I used for those backups is… OVH's built-in automatic backups of MySQL databases. I wish I could still see any indication in the dashboard that those backups were ever there, cause my anxiety whispers in my ear that my memory might be misleading me – but I can't, because the whole account is wiped.

Anyways… the thing is: I know I could've handled a bunch of things better. But my biggest mistake was trusting that OVH will handle my account appropriately. For heaven's sake, that server was even paid for for another month an a half – why would you wipe customer's infrastructure that's paid for, actively running, and part of a different account than the one that made the GDPR request?

Until now, I simply disliked OVH as a customer. How I actively distrust them, and I doubt that will ever change. I could never trust them again with any data or infrastructure.

Silver linings

But… it's not all shit. I actually managed to find a lot of silver linings in the whole situation. Obviously, OVH forced me to finally prioritise the changes I've been planning to do for over a year – so I finally got most of them done, yay. I guess, thank you? But other things on my list are stuff that I would've done anyway, eventually… Still, I like to think about the positives, so here we go.

I moved to a faster and cheaper machine. Yay!

My IP is finally fully private and protected by Cloudflare's proxy. I've had the old server way before I even knew that it's a thing – so someone somewhere dug it up and used it to DDoS me, circumventing Cloudflare's protection. Ironically, they were queerphobes targeting Pronouns.page, but they didn't know that this project has had its own separate server for a while now, and its IP is still secret. Now, so is Avris's.

I had a list of 57 projects/apps/hosts/(sub)domains running on the old server. Now that list has just 25 items. The remaining ones are those that either got popular, or didn't at all but I really like them and they aren't that much effort to maintain. I'm following Tom Scott's advice to create a lot of stuff and increase the odds of some of them succeeding – but that also means I need to be ready for a lot of what I do to fail. Killing a project is tough, even if no one, including myself, even uses it anymore. But this whole situation made me tear off that band-aid.

A half-baked idea that I decided to publish way too soon? Poof. A framework that helped me learn a lot about PHP, software and software architecture, but that also makes less sense to use than something more established? Poof. (Well, the repo is still public, but no need to keep the website up). An app that stopped working after Elon Musk broke Twitter's API (unless I pay a bazillion euros)? Gone. A legacy version of a page that I kept up just in case? Bye!

It's not easy to say goodbye to them, but it helps with the overwhelm. I no longer maintain a terrifying number of apps I can't keep track of – it's just two dozen that I actually care about.

There's a bunch of things that I wanted to fix or improve in each and every one of those projects, but doing that to twenty something of them is way more manageable than to fifty something. So here we go: I upgraded Node, PHP, Symfony and a bunch of dependencies to the latest versions for all of my apps – and to the same version across the whole server. I renamed the master branch to main in those older projects that still used the outdated name. I changed my name in the READMEs and footers to reflect my new legal name ( it's official! my name is andrea vos now 🥳) wherever it still needed an update. I changed the license of my projects to OQL wherever it was still MIT. I switched from Yarn to pnpm. Stuff like that.

When upgrading Cake I also added better RTL support by upgrading Bootstrap and improving keyboard control logic. For OQL I made the dark mode look nicer. For Heartbeat I added a way to compress older data to reduce database size and refactored the config so that it's more readable and allows for async calls (like API calls or caching). Deployer got a bunch of improvements that I'll release soon as v2.0.

The server configuration as a whole got better too. I applied a bunch of the same improvements that I had earlier made for Pronouns.page ( Migrating Pronouns.page to a new server – a success story) – including a switch from Apache to Nginx and organising configs better. My notes from that move were super helpful and made this one easier and faster – but this time I wanted to make the process even better, and turn them into a nice little repository of scripts and configs that can be used to really boost the process if I ever need to do it again (or, more likely, use it as a template for future projects).

And, of course, setting up proper backups in multiple locations (all far away from OVH) get a way higher priority on my list after this incident. The new setup is still in the works, but it will be a great improvement.

Databases lost

Luckily, most of my projects don't really need a database – they're either landing pages for libraries, or tools that encode data in the URL, or something like that. Restoring them was just a matter of spending time and effort on configuring everything again. But for those that do need to store data generated by users, the loss is unfortunately bigger…

The biggest by far was naked-adventure.eu – a website that crowdsources information on nudist beaches and establishments. On one hand, so much of mine and other people's work suddenly got wiped from OVH's infrastructure, but on another I'm actually a bit relieved… It's the kind of page that makes the most sense on a big scale – after all, just under 200 places in our database is almost nothing on the global scale; what's the point of even visiting the page if you're statistically unlikely to find what you're looking for? And for me personally, over the years naturism stopped being a new exciting thing that I love, and became just a regular part of my life. The enthusiasm and motivation to run this page faded, while overwhelm from other projects and other aspects of my life grew. I was falling behind on moderation, never gotten to implementing some features I planned for it, I didn't have ideas or resources to advertise the platform and to grow it… So while it's sad to see it go, the project had been on life support for a while already. I might resurrect it one day, with some new twist, but for now, rest in peace.

I also had some pages that collected stats about people's responses in a quiz, like CoreValues. The pages are back up, but the stats are gone.

My husband's blog got wiped too – but he has local copies of all texts, and he hasn't published there in a while anyway, so not that much harm.

I also lost website analytics from Plausible. But to be honest, I haven't really checked them in a while – I just let my websites run, without obsessing about the numbers. I still set up a new instance on the new server and I'll be collecting anonymised analytics, but I won't cry about that particular spilled milk.

Mental health impact

Speaking of crying, though… I just wanna take a moment to acknowledge the impact that the whole situation has had on my mental health.

I'm really proud of how I mostly handled the issue. I kept calm, focused on solutions, on positives, on opportunities. I managed to focus on fixing one thing at a time, to prioritise not only some projects against others, but also the whole fix against my personal needs – all of which are stuff that I've been struggling with. I gave myself time to deal with the situation properly, as opposed to panicking and frantically trying to fix everything with a hammer and a scotch tape, as fast as I can – which would've been my response a few years, if not months, ago. There was no need to rush that much: no one got angry with me, I just got a few messages from friends and strangers asking if I know that this or that tool is down; I lost some traffic, but it's not like I was monetising it anyway; none of those projects was an essential, irreplaceable, urgently needed part of anyone's live (I hope).

But there are limits to what my head can take. While calm on the outside, I was extremely irritable for the first two days or so, any minor inconvenience could get me over the edge. I had two major breakdowns – but luckily also two amazing partners that helped me through them.

Basically: I needed time to grieve. I lost a lot of data, a lot of work, my plans for the upcoming week got turned upside-down. One can't just brush off stuff like this.

Anyways… I'm fine now. But I think sharing my experience might help someone one day, so I wanted to it.

Receipts

Context: pa13■■■■ = Polish account; pa60■■■■ = German account

]]>
Holy Poly(cule)… urn:uuid:8a9106a1-2f15-5d99-8b8c-447753859026 2024-05-28T18:37:35+00:00

]]>
Nemo's “The Code” as a Nonbinary Anthem urn:uuid:71579849-77bd-59d8-8d9a-9ae8e3a419be 2024-04-01T10:09:47+00:00

There's a song that stole my heart and has been living in my head rent-free for the last few weeks. Before hearing it, the thought “enbies should pick their anthem” had never really occurred to me – but now I can't think of a better contender to that title than “The Code” by Nemo.

Nemo is a 24 year old nonbinary rapper, singer and musician who will be representing Switzerland in the Eurovision Song Contest 2024, next to three other countries represented by amazing nonbinary artists.

(Yes, I know that Israel taking part in Eurovision is a scandal, and I hate that too. But this is an article about queer joy, not about them – please go be angry at Israel and EBU somewhere else.)

Nemo uses they/them pronouns in English, but in their native German they prefer to be referred by name, without pronouns.

“The Code” is a song about discovering their identity as a nonbinary person; about the struggles of the process itself, but more importantly about the reward that's waiting at the end of this road: being free from the cishetnormative expectations of the society, finally breaking its “code” and being able to be truly oneself. It's a beautiful and powerful song, definitely an earworm, definitely very challenging vocally. And its lyrics are speaking to my enby soul:

Welcome to the show, let everybody know
I'm done playin' the game, I'll break out of the chains

 

I, I went to hell and back
To find myself on track
I broke the code, wo-o-oah

 

Somewhere between the 0s and 1s
That's where I found my kingdom come

And while I've been in love with this song ever since I'd first heard it, it was only when I watched their performance live a few days ago that I realised we're witnessing something huge. Nemo is not just fabulously nonbinary on that stage. They're flawless. No note is too high for them, no beat too fast, not a single thing is off. They're impressive as fuck!

And now they're gonna be bringing that majestic queer energy to the biggest music stage in Europe! In May hundreds of millions of people around the world will see their unapologetic gender-bending beauty, their powerful message about transcending restrictive social norms, and their flawless execution.

You can see that Nemo really feels that song deep in their soul. It's not a just banger produced to make money – it's personal. It's a song they believe in and a song they're singing from their heart. Here's what Nemo had to say after the performance:

All of myself is in this song and when I perform it I become one with it. I don't even really know what's happening the 3 minutes just rushed by. It's amazing to be allowed to perform this song live and that you all are enjoying it so much is even better. [credits for translation]

Nemo is one of the favourites to win the ESC – and I hope y'all can see why! “The Code” is a beautiful song, interesting musically, challenging vocally, with lyrics relatable to so many marginalised people, and with a powerful message. When somebody asks me, what it feels like to be proudly nonbinary – now I can just show them Nemo's performance. That's how. That's the power of rejecting patriarchy. I can barely imagine how many people questioning their gender will see that performance and see themselves in it, will find the power to discover their identity and to proudly be themselves.

There are many amazing songs by nonbinary artists about their experience of gender – but “The Code” is the one that stole my heart. It checks all the boxes. And in my humble opinion, it absolutely deserves to be called the anthem of our community.

]]>
We're consulting on a civil partnerships bill in Poland! urn:uuid:35688382-9ab5-5958-9050-f987332d33ae 2024-03-21T00:00:00+00:00

A post on the pronouns.page blog

]]>
Cielesność, miłość, seksualność – Charline Vermont urn:uuid:e87948fc-c465-5411-a7e9-cd17ece2a2a1 2024-03-19T00:00:00+00:00

Wpis na blogu zaimki.pl

]]>
Nonbinary Eurovision urn:uuid:881d9865-c899-5396-b04a-229a97c79e34 2024-03-06T00:00:00+00:00

A post on the pronouns.page blog

]]>
Niebinarna Eurowizja urn:uuid:6ebc2a72-b2a6-5c5e-9a6e-34ddc0d9e4f8 2024-03-06T00:00:00+00:00

Wpis na blogu zaimki.pl

]]>
Zaimkowa równia pochyła urn:uuid:9b3a45c0-8364-5d9e-87a6-f54123cd05c8 2023-12-13T00:00:00+00:00

Wpis na blogu zaimki.pl

]]>
it's official! my name is andrea vos now 🥳 urn:uuid:fba24729-809d-511f-a9ab-9a7a1f28a9f8 2023-11-07T18:58:31+00:00

]]>
Pull each other by your bootstraps! urn:uuid:3bc3290c-bbed-59c8-b2a9-0e5bb01b4332 2023-10-15T16:36:01+00:00 In the background a group of people putting their hands together. Over it text: “Pull yourself by your bootstraps” with the word “yourself” striked out and replaced with “each other”. Underneath a text: “Solidarity is our only weapon ✊”

]]>
Ads suck… also for the publishers urn:uuid:c754aed5-1619-5140-992f-93ef9564580b 2023-09-11T07:55:06+00:00 illustration: a business woman who is stressed and frustrated
unsplash.com/photos/bmJAXAz6ads

Nobody likes ads, obviously. But what came as a painful surprise for me is that they don't just annoy people who see them – but also those who try to monetise their projects. It's not just a matter of putting a few tags on your page and waiting for a big fat wire transfer.

The process is exhausting and I feel the need to rant about it, as well as maybe warn people who might be embarking on a similar journey… so here we go.

The system

In a perfect world, if I create a popular website, I could easily find someone who wants to use that advertising space, they give me money, I add their banner, everyone is happy. The ad is simply relevant to the page content, not the personal info about any particular user. In practice, though, unless you're a huge company with enough resources, finding advertisers and negotiating deals is a tedious task that a random programmer or creator just isn't equipped to do.

That's why ad networks exist – they facilitate the process, act as proxies between publishers and advertisers, and they take their cut. Cool concept, it really is. The problem, though, is the capitalist approach of squeezing the last bits of value from the process, at the cost of user experience, privacy and simplicity.

When I was researching ad networks last year, I only found one that was plain and simple: EthicalAds. It would've been perfect for my needs, if it wasn't for the fact that it's only applicable for websites that target software developers. I run a few of those, but they're too tiny to join the network, while the popular project that me and the rest of the collective wanted to use it for, Pronouns.Page, is for a totally different audience.

So it was more a choice of lesser evil than finding an ad network that we'd be totally comfortable with. Personally, I wanted to avoid dealing with Google, but it looks like most networks are strongly relying on AdSense anyway. We ended up trying three different networks so far, and today I've sent the third one a termination notice after having been in talks with the fourth network to switch to them. Let's hope that the fourth time will be the charm 😅

Hard to test for all users

I don't really wanna name and shame any specific companies, cause it seems like the issues are there all over the industry, plus some of our problems might be stemming from our own inexperience in the advertisement world (although that shows how inaccessible the process is to an average publisher).

One inherent problem with ad networks is that it's practically impossible to fully test how they will look on your website. I can put seven empty placeholders on the page, as instructed by an expert from the network, and then test it and see that three of them got filled out with ads – while you load the same page and see all seven. I might be shown ads of food delivery companies – while you get shown some disgusting foot fungus medication ad. Some networks let you pick the categories that will and will not be shown, and even review post-factum which specific ads have been shown to users and block those advertisers for the future – but others give you zero flexibility in that area. In general, algorithms, mathematical models, AI and real-time bidding have more say than humans.

Technical issues

But that's something that's, admittedly, hard to avoid in the existing ecosystem. Other issues were more avoidable. For example, when we first tried one network, it utterly broke our website. They offered a super simple setup – just give them access to your Cloudflare and they'll proxy everything, not only adding the necessary ad scripts, but also optimising the traffic and speeding up your page. Sounds cool, didn't work. Well, it probably does for most of their publishers, but in case of our PWA and some DNS entries their scripts were not expecting, we ended up with no ads and no ability to log in. Not fun.

You'd think that adding a script that's loaded after the rest of the page and should limit its impact for a bunch of clearly defined placeholder shouldn't really affect the performance of the page much. However, one network's scripts were somehow affecting us so much that we ended up switching to another mainly for that reason. Another broke an essential feature of the page in a way that was troublesome to debug.

Update: After installing Sentry we've found out just how much JS errors ad scripts produced, geeeez…

Volatile and unclear revenue

All the networks looked at our traffic numbers and predicted monthly revenue in the lower five digits area – the kind of money that we could set up a proper foundation with, run educational campaigns, spread our mission, employ people, make the project a full-time job, not just a side project of passion created in spare time. But in practice it was not just lower, but an order of magnitude lower. Still not bad, enough to cover the server, domains, cloud and other maintenance costs, do occasional offline stuff like printing our zine, creating pins, stickers and flyers and handing them out at Herts Pride and Toruń Pride, and distributing the rest among the contributors in a form of volunteer allowance. Basically, it's not some wild, life-changing money, but it keeps the project running while also rewarding contributors for our time and effort, and helping us pay our bills. So we're really grateful to be in that position.

What's really bugging us, though, is how volatile and unpredictable the whole thing is. Of course we're expecting ups and downs, but sometimes it can just randomly drop by half in the span of two months, with no explanation. One that we did get, I'm not kidding, is that after we've spent a lot of time optimising the setup with A/B testing, our ad units performed so well that the system counts the traffic as suspicious and just doesn't pay for it. Their proposed solutions (adding padding and labels to ads so that users are less likely to click on them accidentally) didn't help at all. And there's no one to complain about it, you just have to deal with it.

There are so many variables at play, it's super confusing and unclear. Our current ad network tripled (!) the number of ad impressions they were showing our users compared to the previous company, without it being proportionally reflected in the revenue or becoming more optimised for user experience with time.

Unclear reporting, inflexible setups

One network wouldn't show us any reporting for the first month, we were completely in the dark. And once we finally got access to the dashboard, it was way less useful than what other networks provided (eg. even trying to figure out which ad unit is which was not easy, because the dashboard simply didn't show their unique identifiers that are used in the code) – which we couldn't have known until we're a month in.

The flexibility of the setup varies a lot between the networks. For example, one has a simple button to switch their consent box from “Accept / More options” to “Accept / Decline / More options”, while another took two weeks to fulfil our simple request “we're not going live until declining is just as simple as accepting”. And none had an option to show the consent banner to everyone, not just people who are in jurisdictions where it's required by law, unless we implemented a big chunk ourselves.

Summing up, and the future

I'm sure we could make our setup better in one way or another. There might be a good balance somewhere, there's probably an ad network that's the best match for us that we haven't tried yet. But I don't want to be spending more time on making monetisation bearable than I spend working on the actual website. It's already a way more annoying and complicated project than I was expecting it to be…

We're currently onboarding with a fourth company, hopefully to be accomplished this week. They look very promising, so keep fingers crossed that they're actually what they seem to be and that this switch will be the last one 😉

We're also working on implementing an idea (which was also independently proposed by a user) to offer a subscription for a few bucks which would remove all ads for them and the visitors of their profile, add a “supporter” badge in their card, and support the project.

I really hope that works out, because dealing with the ads setup (even though personally I'm mainly helping with the technical side and am shielded from a lot of other bs) is really sucking the joy out of creating this passion project.

]]>
ulid.page urn:uuid:9e557610-0845-5b1b-b495-341c97760d91 2023-08-04T15:23:50+00:00 Screenshot of the website ulid.page

ULIDs are my favourite identifiers to use in projects, they're soooo cool! There used to be a website that would generate, validate and decode ULIDs right in the browser, but the domain expired and whoever was running it abandoned the project. So I decided to recreate it and keep it alive!

]]>
The amazing revolution of “niebinarszczyzna” urn:uuid:2a43ea58-1ef3-539d-94ad-be083c52d951 2023-06-07T00:00:00+00:00

A post on the pronouns.page blog

]]>
ipvx urn:uuid:a7f6b826-0f74-504e-ae0f-23fa2f11e7ce 2023-06-06T19:37:00+00:00

minimalistic IP country lookup

]]>
corevalues urn:uuid:d478ebf6-b6ce-5cae-b260-a2e6ce96e165 2023-05-23T15:52:17+00:00

what are the core values in your life? here's an exercise that can help you discover them!

]]>
tinyfingerprint urn:uuid:98bd5b6c-b811-5336-90f5-7f56b1b7794f 2023-05-17T15:52:37+00:00

a minimalistic, privacy-friendly library for browser fingerprinting in nodejs

]]>
tinytranslator urn:uuid:ece0779b-48a3-5b3a-9f84-a59b9689c625 2023-05-16T15:52:22+00:00

a minimalistic translator library

]]>
tinymarkdown urn:uuid:6a7407d2-957a-5530-a17d-cef459a95994 2023-05-16T14:52:28+00:00

a minimalistic library for inline markdown: 9 features – 10 lines of code – 0 dependencies

]]>
callmebymygender urn:uuid:74eae75e-f4e3-5268-b060-1bf56d61dd66 2023-05-07T15:52:06+00:00

i'm not “a female” / “a male” / “a they/them”

please, just call me by my gender! 🙄

]]>
Poprawiamy formularze – stan cywilny urn:uuid:69a7e115-687f-5e30-9af1-3e6ba939f040 2023-04-19T00:00:00+00:00

Wpis na blogu zaimki.pl

]]>
Niebinarny Spis Powszechny 2023 – wnioski urn:uuid:3b72da14-b502-5907-9b82-5c65fd06dc84 2023-04-12T00:00:00+00:00

Wpis na blogu zaimki.pl

]]>