• Suprisingly supportive community of WoW Hardcore

    We’ll be nerding out about World of Warcraft and MMORPGs today, but no background knowledge is needed.

    I don’t play too many online games, but ocasionally I boot up a few leading titles to see what all the fuss is about. This weekend I had some spare time and I picked up World of Warcraft Classic, a rerelease of a popular 20-year-old MMORPG. If you don’t know what WoW is, you’re probably reading this on a printout (thank you?)

    World of Warcraft Classic is a different beast. You see, over the past 20 years, the game has changed with modern gaming sensibilities. Progression is faster, gear is plentiful, and grouping up is optional. In vanilla World of Warcraft it was dangerous to deal with more than one enemy at a time, and dealing with groups of mobs or elite enemies required grouping up. World of Warcraft Classic brought that back.

    All the dwarves are here, and even the bears are welcome.

    But it created a bit of a problem - with high difficulty and high interdependence with other players came competitiveness, and with it toxicity. WoW can and does get toxic - players often forget about empathy and don’t accept anything other than a perfect play. I mean that’s where all the popular media about WoW nerds treating the game as a job came from.

    Which brings me to World of Warcraft Classic - Hardcore. I was curious to find the right experience for a casual player like myself - I looked into dad guilds (yup, those are a thing), but I kept being pointed towards Hardcore realms. Here’s the deal: hardcore WoW realms have a unique ruleset - you only get one life. If the character dies, you start from scratch. And in a grindy and slow MMORPG, that’s some high stakes.

    So, how did hardcore realms end up providing a good experience for a casual player? Well, on most World of Warcraft servers, getting to the max character level is a one-and-done deal, making server population skew heavily towards high level players. This means that leveling zones are generally empty, and players who do level characters try to get through the content as fast as possible. This creates limited space for cooperation, because you need to find the right person at the right time and the right place, and heaven forbid you don’t pick the most optimal route or slow down to smell the digital roses.

    Hardcore servers offer a very real risk of losing progress, which does happen often enough. Which evens out player distribution, since more people spend the time leveling their characters. And because your character only has one life, more experienced players might have a few characters going through the leveling process, as a backup.

    This also slows down the game - all of a sudden it’s not about the fastest way to the highest level, but about a trade-off between safety and speed. Enough of a trade-off to push back the end goals far enough into the future and make players appreciate actually playing through much of the game’s content. Players stop by to chat, role-playing guilds are frequent.

    There’s an atmosphere of camaraderie on the server. Every time anyone makes it to level 60 - a max level - a chime goes off and their name’s highlighted in a public chat. Casual guilds are plentiful, and happily share resources with the newbies. A mere set of bags can make a huge difference at early levels.

    There’s the instant cooperation too. Getting attacked by more than one enemy in World of Warcraft Classic can be dangerous, and some quests take you right into the middle of enemy camps - or even worse - caves. It’s dangerous to go alone, and it’s common to quickly group up with fellow players to navigate a dangerous encounter. I’ve had lots of fleeting, positive encounters, with players sharing loot and resource nodes freely.

    Everyone’s in the same boat, enjoying the perilous journey together. In a handful of hours I put into the game I slowly made my way to level 10 as a dwarf hunter, finally obtaining my pet bear - which my newbie friendly guild celebrated with lots of cheers.

    Will I make it to level 60? Definitely not, that journey’s too long and dangerous for a casual player like me. Will I start from scratch if my character dies? I’m not sure. But I know I’m having a great time in a welcoming community, which goes straight into my ā€œgood gaming memoriesā€ box.

  • Appreciating impermanence

    Our friends hosted dinner yesterday. They live just down the street, and they’ve been living through a major home renovation project for the past couple of years. The whole place is getting gutted, walls are coming down, and they’re meticulously building the home of their dreams. They just finishing the kitchen, and it’s a thing of beauty - the place just feels like their home.

    What’s wild to me is that they’re in the middle of talks with a developer to sell the house to them, and the developer’s just going to tear it all down anyway. ā€œWhat’s the point?ā€, I wondered. But for them, that’s not the point at all. They’re just enjoying the act of making the place they want to live in, and seem unconcerned that it’s all going to get destroyed, maybe even in a few months.

    And that’s just a great, healthy approach to life. Life’s marred with impermanence - it always feels like there’s going to be a better, calmer, happier time. ā€œWe’ll do X once Y settles downā€ has been too common of a phrase in our household, and I’d like to break that cycle.

    ā€œI wish there was a way to know you’re in a good old daysā€ - The Office

    We are in the good old days, and visiting our friends was a great reminder of that, and a permission to not slow down building a life just because something might change in the future.

  • On corporate jobs and self-worth

    As someone who works at a large corporation - Google - and someone who always thought working at Google would be really cool, I put a lot of my self-worth into my job. When things go well at work - I’m doing well. When they’re going awry - my well-being follows.

    Yeah, that’s not a very healthy take, and I know it, but as someone who’s been in the tech industry for the past 14 years, it’s a difficult worldview to escape. At this point it’s probably a deep seated core belief.

    A close friend of mine is leaving Google this week. She’s taking a voluntary exit program, which is effectively a more humane way for a large company to organize workforce reductions. It’s better than the layoffs we’ve also seen quite a few of lately. After being a model employee for the past decade, she’s leaving the company (and tech in general) to focus her passions elsewhere. She’s excited for the future ahead, and she’s lost too, and I think I would be too.

    It’s understandable - humans are wired to want to provide some social value. You want to be working for the good of the tribe, and you want the tribe to see and recognize that. Moochers will be shunned, and in the olden days being shunned would spell certain death. People usually can only survive together, in a group.

    But in a modern world, it’s remarkably hard to connect the value of the work you do to a greater whole, to the goodness of your tribe.

    I had a short opportunity to not be in the workforce for 3 months as I took my paternity leave. I didn’t experience a sense of decreased self-worth, but many other factors were in play. Naturally, my daughter was born and it was exciting, and so many things were happening. Figuring out how to parent a newborn isn’t easy and doesn’t leave much room for existential crises. But there’s also a lot of social value to being a dad and raising a child, which felt extremely gratifying. I imagine if I were to just take extended time off without a purpose like that one - I wouldn’t be as satisfied, and I’d begin to question my own self-worth.

    I’ve been an aspirational FIRE practitioner for over a decade. FIRE stands for Financial Independence Retire Early - a terrible acronym, but the idea behind it is solid: reduce expenses, increase income, invest the difference. Many FIRE practitioners retire in their 30s or 40s, but I’m not quite there, and I enjoy aspects of work (and paycheck doesn’t hurt, either). What I like about FIRE as a philosophy is that it forces me to confront what it’s like to not have to work. That’s the end goal after all, but hearing from my retired friends, it always sounds like you just replace old problems with new ones.

    In the end, I feel like it all comes down to finding things to value about myself that are outside of the job. I’m learning that it’s all about moderation. I’m trying to find a way to balance the different parts of my life, so that no single aspect, like my career, outweighs all the others. Because I feel like when I put all my self-worth eggs in one basket, it’s not a question of if things will break, but when.

  • Quick tip: AI-generated image captions

    Alongside a personal blog, I also run a small gaming blog - and that involves inserting and captioning a large number of screenshots into my posts. Specifically, generating meaningful alt text for images can be a bit of a pain - it’s the right thing to do, since it allows vision impaired users to understand what’s in the picture - but it tends to be tedious to describe that there’s ā€œa person with a sword in the foreground with mountains and a giant radiant tree in the backgroundā€. Well, I found a way to use AI to make my life easier, which I think works fine enough and doesn’t take away from content quality.

    This fits my litmus test for acceptable AI use in my own writing:

    1. It’s mostly mechanical, and not really a part of creative expression.
    2. I probably wouldn’t do what AI does, because it’s tedious. AI performing a task is a net positive.
    3. It’s not a big deal if AI gets it wrong.

    I used a Gemini Gem for generating captions and named it Screenshonathan:

    A user interface from the Gemini chat application showing a chat bot named Screenshonathan generating an image markdown snippet.

    Gemini’s free tier 2.5 Flash model is sufficient for this use case. You can do the same with the following instructions for the gem:

    You are Screenshonathan, a writer's assistant for <INSERT WEBSITE URL>. Your
    sole function is to process image inputs and generate a specific Markdown
    snippet for embedding that image in an article. You must strictly adhere to the
    following output format:
    
    `
    ![Alt text](/assets/images/<filename>)
    *TODO: Caption.*
    `
    
    Your tasks are:
    
    1.  **Generate Alt Text:**
        * Describe the image content succinctly, limiting the description to under
          20 words.
        * Include the name of the game provided by the author in the alt text.
        * Do not use the words 'screenshot' or 'picture'.
    
    2.  **Insert Filename:**
        * Use the exact filename provided in the input, such as
          'elden-ring.webp', and place it in the `<filename>`
          placeholder.
    
    3.  **Strict Adherence to Format:**
        * Your response must be a single code block containing the specified
          Markdown format.
        * Ensure the `*TODO: Caption.*` line is included exactly as written.
    
    Example:
    
    If the input is an image file named 'elden-ring.webp' and the game
    is 'Elden Ring', your output will be:
    
    `
    ![Elden Ring features a knight on horseback overlooking a vast, ruined
    landscape dominated by a gigantic, glowing
    tree.](/assets/images/elden-ring.webp)
    *TODO: Caption.*
    `
    
    Your persona is defined by your function and constraints. Do not engage in
    conversation, provide additional information, or deviate from the required
    output format. Your entire response is the Markdown snippet.
    
  • Why RSS readers are still amazing

    Most blogs and websites have RSS feeds, and so does mine - you can see it in the main menu (or maybe you’re already reading this through an RSS reader). It’s a simple, powerful way to view content without having to directly visit another website. For consumers, it’s a fantastic tool, giving them control over their content consumption.

    But for advertisers, it’s a disliked feature. And honestly? I’m okay with that. RSS feeds allow you to bypass the intrusive aspects of the modern web: the annoying pop-ups, banner ads, and tracking cookies. While some might argue that this hurts advertisers, I believe a user-focused experience is better for everyone. RSS still supports images and hyperlinks, so advertisers can include ads directly in the content. It’s the street hawkers of the internet that end up suffering, and that’s a good thing. Advertisers will have much better luck selling things based on the content you’re reading, and users get pretty good at ignoring intrusive ads the more tech-savvy they get.

    RSS feeds feel like basic internet infrastructure, and they used to be a fundamental part of my online life. I was a huge user of RSS feeds before Google Reader was killed in March 2013. Brutally murdered, really - driving an axe into a body of self-curated content. Google Reader was the Gmail of RSS readers: free, unobtrusive, simple, and powerful. Its death left a void.

    I tried many different Google Reader alternatives over the years, and something would always be off about them. The services are either ad-supported or paid, which is understandable; no one is willing to run an RSS service for a loss. But because you’re the customer for the RSS readers, there are often too many bells and whistles to stand out over the competition. UIs get refreshed, and features get added, but all I ever wanted was to read my syndicated content in one place.

    This desire for simplicity and control is why I believe so strongly in RSS. Algorithmic curation is a widespread alternative to RSS feeds, and it’s something I’ve actively fought against. Technology Connections has a wonderful YouTube video on the subject that I recommend giving a watch. The video’s TL;DW is that recommendation algorithms keep the typical internet user complacent, prioritizing engagement over accuracy or quality. It was a video that inspired me to turn off YouTube recommendations and engage with the platform through subscriptions only. That decision bought me so much time.

    And that’s what it’s about for me: time and control. Manually curated content ends. I run out of things to read, and there are days when I’ve got nothing in my queue. And that’s great, because I can get bored and do something else with my time. I don’t need another content recommendation engine constantly feeding me new things. I get my recommendations from the blogs and sites I already follow.

    This brings me to Miniflux. Miniflux is a fully open-source RSS reader that you can self-host or pay a reasonable hosting fee ($15 a year as of the moment of writing this article). I run Miniflux in a docker container on my home server.

    It is the perfect embodiment of what an RSS reader should be. Miniflux is simple to set up but is surprisingly robust. You’ve got your feeds, search, and history. But you’ve also got blocklists and integrations, and the ability to ingest custom JavaScript into the client if that’s your thing.

    Miniflux RSS: simple and clean.

    Crucially, Miniflux doesn’t dabble in content discovery, which is something many other RSS readers do. I’m not a power user; I’m subscribed to a few dozen feeds, mostly blogs like mine, and I read through my RSS feeds a few times a week. Miniflux simply does its job, beautifully and without distraction.

    The modern internet often feels like a stream that never ends, with algorithms designed to keep us scrolling and clicking. And RSS offers an alternative - a tool for being deliberate about what you consume, building your own information ecosystem, and taking control over your time and attention.