Sanqui 🦉

@sanqui.net

owl 🟨⬜️🟪⬛️ devops • birds • full stack • nature • video game history • pixel art • digital archival • chiptune • historical linguistics • ROM hacking • internet and furry culture 🌐 https://sanqui.net 🟢 SFW account 🟢

Back home from the 25th camping get-together of the Czech Pokémon community! Alongside the usual hikes and games, we had a nearly 2 hour presentation about the history of the community and all the creative pursuits and meets. Was fun to reminisce, and it's crazy to watch aftermovie videos from 2005!

Photo of a three-floor Pokémon themed cake

For the seventh year I helped organize @furryest.org, the Estonian outdoor furry convention. We are able to create a magical experience for 180 attendees only thanks to staff becoming year by year more professional and successful at onboarding helpers. This success makes me a little proud!

A photo of a plushie in front of a medium field featuring dozens of tents and some parked cars.

We built our chickens what the manufacturer calls an "activity center". Usually they get to roam the whole garden, but when we go on vacation, they're stuck in the run. So it should bring them some variety!

Photo of a chicken run, in the foreground, three curious dark feathered chickens, being them a wooden stepladder with an integrated swing.

Showing off the prototype of Pesík 🐕️, my overly ambitious Game Boy Color RPG, last worked on in 2016. Demo coming in December! 🙃

Recorded this on my Game Boy Camera when we went go-karting with colleagues last week. What an experience! All that practice in Mario Kart came in handy, believe it or not.

I find myself struggling to keep up with all my commitments (as it happens), but at least I managed to plant all the herbs my mom gave me *before* they withered 😊

Two plant pots with stevia and thyme

There's a general sentiment that GitHub is a sinking ship, so I went ahead and set up Forgejo (forgejo.org) at work so we could get a feel for it. Deployed it on a Debian VPS as Podman "Quadlets" using Ansible and it's like a devops dream. Clean and declarative!

We did a call for volunteers at the Game Archive (@hernihistorie.cz) and the amount of responses surpassed our imaginations. Now that we have split our responsibilities for them, I'm excited to start mentoring two new programmers!

The "art of programming" might feel like it's crumbling, yet I'm still trying to keep up with software engineering developments. I'm now almost a year into learning event sourcing. It's satisfying to be able to write clean code even for legacy codebases. Sample con raffle feature—real world Python!

Screenshot of Python source code:

```
from datetime import datetime

from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column, relationship

from database import Model
from reg.models import Event, Registration, db
from reg.villa_raffle.query import is_registration_entered_for_villa_raffle
from reg.villa_raffle.end import VillaRaffleEnded
from reg.villa_raffle.start import VillaRaffleStarted
from user.models import User
from furryest.utils import Failure

class VillaRaffleEntered(Model):
    event_id: Mapped[int] = mapped_column(ForeignKey(Event.id), nullable=False)
    registration_id: Mapped[int] = mapped_column(ForeignKey(Registration.id), nullable=False)
    entered_at: Mapped[datetime] = mapped_column(nullable=False, defalt=datetime.now)

    event: Mapped[Event] = relationship()
    registration: Mapped[Registration] = relationship()


def enter_villa_raffle(user: User, registration: Registration, event: Event) -> VillaRaffleEntered | Failure:
    if not db.session.query(VillaRaffleStarted).filter_by(event_id=event.id).first():
        return Failure("Villa raffle has not been started for this event.")
    elif db.session.query(VillaRaffleEnded).filter_by(event_id=event.id).first():
        return Failure("Villa raffle has already ended for this event.")
    elif registration.event_id != event.id:
        return Failure("Registration does not belong to the given event.")
    elif registration.user_id != user.id:
        return Failure("Registration does not belong to the given user.")
    elif is_registration_entered_for_villa_raffle(registration=registration, event=event):
        return Failure("This registration has already entered the villa raffle.")
    
    villa_raffle_entered = VillaRaffleEntered(
        event_id=event.id,
        registration_id=registration.id
    )
    villa_raffle_entered.save()
    return villa_raffle_entered

```

The PC in every Pokémon Center allows you to connect to Bill's and Prof. Oak's computers over the network, just like a workstation connected to the Internet in the early days. The source code to Pokémon Red (1996) implies we are using System V UNIX.

A composition of three images: a screenshot of the source code to Pokémon Red, highlighting a label called VunixMachine; a screenshot of Pokémon Red with the player using a PC in a Pokémon Center, saying "RED turned on the PC.", and an infobox from Wikipedia featuring a photo of a HP 9000 workstation running System V.

With age verification, we talk more about privacy and surveillance concerns, and some of us don't remember what it's like to be a minor, but that quote summarizes the other side of the coin. Personally I'm concerned about how sheltering children will make bad childhoods even worse.

Electronic Frontier Foundation@eff.org · 5mo ago

EFF is appalled by how quickly and uncritically internet restrictions are being adopted around the world, David Greene told CNET. "Even if they are under 18, or under 16, children have the right to access information, to speak and to associate.” www.cnet.com/tech/servic...

Today, I have conducted a full two-and-a-half hour interview inside a text-based virtual world from the 90s... and only at the cost of waking up at 6 am!

I contacted somebody last night with an inquiry about an email they had sent in 1997. I found their writing poignant and before its time, so I wanted to ask for permission to quote it. They replied positively. I bet it was unexpected! Part of my learning to be a responsible archivist and historian.

While researching early internet culture, I get the feeling that communities these days just don't chronicle their history. No rich FAQs, no wikis. I see there was pride in mailing lists and websites; maybe running a Discord server just isn't the same? Telegram groups may as well be fast fashion...

A little expirement-slash-art-project, this image displays the individual tile graphics used in Pokémon Gold for the Game Boy Color. They are arranged in chronological order as they appear during regular gameplay. You could read it left to right, top to bottom, page by page, like a book.

Tiles from Pokémon Gold are arranged in a linear manner, revealing blocks of graphics pertaining to the intro, the title screen, the menus, and the overworld.