• 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.

  • Trying to use AI to write

    No, this article isn’t AI-generated nor is it AI-assisted. And you’ll be confident that’s the case by the end of it, because it meanders, makes random detours and goes on tangents, and doesn’t really go anywhere. But a tiny part of my soul’s in it, which I think is enough to make this a hopefully engaging piece of writing.

    Let me set the stage. I don’t like the idea of autonomously AI-generated content, but I don’t really frown as much at AI-assisted content. I’ve been trying to use the tooling here and there in my work, with a varying degree of success: it’s a tool like any other - sometimes it works okay enough, and sometimes it doesn’t. Outside of work, I write for fun, and I while I used AI for on-the-fly proofreading and even some occasional brainstorming, I haven’t really tried engaging in a writing exercise with AI end-to-end in my leisurely writing. Writing is a creative outlet, it’s fun figuring out how ideas come together, and I enjoy the tactile experience of typing out my thoughts.

    I have an infant in the house - she’s becoming more active, more engaging, and I’m starting to find less time for hobbies. Earlier today I was walking my daughter in a stroller, my hands were busy, so I tried putting together an article using a voice AI interface. It’s an article for a “secret” gaming blog I run (reach out - I’ll be happy to share it privately). I spent an hour and a half walking and talking to an AI assistant about the piece. While it was an engaging thing to do, the results were mixed.

    First, I recorded voice notes. Talking about the subject, core ideas, some salient points I wanted to cover, as well as some anecdotes I wanted to include. Default voice recorder app transcribes voice memos into text, and I copied the transcript into the Gemini app. I then used Gemini Live (back-and-forth interaction mode) to align on an outline and produce the resulting outline. I’ve also prompted Gemini to review other articles I wrote and try to match the voice, tone, and style of my writing when generating a draft.

    Talking to an AI assistant about my writing was engaging - akin to chatting with an overly agreeable friend. Naturally, it was very encouraging, and happy with whatever direction I wanted to take. Gemini felt like a friend who listens to many podcasts and has a lot of interesting takes which are a mile wide but an inch deep - it knows a lot about many things, but isn’t particularly well versed in any subject, and misunderstands many details (and yeah, I know AI doesn’t actually understand things). AI is, as always, overly agreeable, which could discourage divergent thinking, but I’m sure some clever prompting can be used to work around that.

    A few weeks ago METR (an AI research non-profit) published, a study on impact of AI on open-source developer productivity. The synopsis is simple: experienced developers felt like they were faster when using AI tooling, while in reality they were working slower. The authors outline a few hypotheses, but the one that connects with me is about friction: AI tooling reduces the friction and cognitive demand for the work, making it easier to stay in the flow.

    Just like the participants in the METR study, I felt like I was constantly making progress. I kept refining the ideas, revising the text, and overall I didn’t experience the often painful and unpleasant part of creative process. The part where you don’t really know what to do next, and feel like everything you’ve made so far is terrible. But you see, I value that part of the process. I think that’s where the creativity comes from, from a deep hole of “this isn’t very good” and “I’m terrible at this”. That’s how powerful new ideas emerge. I’m a solitary thinker, but not everyone is. Many enjoy processing information on the fly, while engaging with others. And for those type of folks, engaging with an AI assistant may have been more productive.

    At the end, Gemini produced a draft, but fine enough is the best I can say for it. When in my voice notes I talked about the struggle of finally beating a Isshin the Sword Saint in Sekiro after weeks of struggle, the AI draft sanitized this into a generic point about how overcoming challenges is fun for players. It captured the words but missed the entire point: the point about painful, frustrating, and ultimately meaningful process. Technically correct, but really not the point I was aiming to make.

    In the end, a piece that would have taken me an hour of focused, difficult work took three hours of frictionless, meandering conversation. The time flew by, but I spent most of it re-injecting the nuance the AI had stripped away. I think for writing that’s meant to have a viewpoint, the friction is a critical part of the process. It’s the creative cheese grater that you have to pull yourself through, leaving little bits and pieces of your soul on each page.