1. 1923 Season 2's Gorgeous Photos Were Shot on a Graflex

    Portrait of actress shot on Graflex

    When multiple interests intersect, I’m hooked. Case in point: the Yellowstone miniseries 1923, which I’m a huge fan of (favorite offshoot, even more than core Yellowstone). I also love photography. And, uncovering behind-the-scenes commentary on a Reddit thread? Chefs kiss.

    The beautiful photos accompanying this Elle piece about the costume design by Janie Bryant for season 2 of 1923 were shot on a period-authentic Graflex Super D and the FP-100C peelapart film. The photography is by Sarah Coulter who is the Director of Photography for Paramount+ and Showtime.

    Adding a layer of behind-the-scenes coolness, a comment from a post in the r/photography subreddit revealed more details by someone who assisted Sarah and lent the camera used:

    Definitely my favorite combo to shoot with. Sarah is a friend of mine from NYC and brought me on to assist her to shoot on a (relatively) period accurate camera. It’s a 1940s 3.25x4.25” Graflex Super D I had modified to shot 4x5 film that is essentially identical to earlier models from the 20s. So I used a special centered 405 peelapart back and lots of that sweet sweet peelapart I sourced from a friend. We had to use an absolutely insane amount of tungsten lights on set as the film is roughly 80ASA and the lens is f4.5 wide open.


  2. Little Big Detail On Porkbun

    I recently transferred my domain conragan.com from GoDaddy to Porkbun. During the registration process, I came across a small detail that made me laugh out loud:

    Screenshot from Porkbun registration showing a joke that the user needs a fax number

    I’m old enough to remember when domain transfers meant using a fax machine. It was terrifying. Even though I still find fax technology more magical than the internet, the transfer process could take days or weeks, with no feedback and no guarantee of success. Clearly, someone at Porkbun remembers those days, too.

    As an aside: I miss Little Big Details, a great little site that let users submit delightful little UX moments they encountered on the web. I just checked their RSS feed and the site hasn’t been updated since 2017.


  3. Connecting Your Website To The Fediverse - Part 1

    I’m exploring ways to make my online presence feel more like my home and less like a rented space on someone else’s platform. The convenience of the big social networks came with a hidden cost: a loss of ownership and control. This loss is something long-time blogger and technologist Matt Webb captured in a recent post commemorating 25(!) years of publishing to his site:

    Slowly, slowly, the web was taken over by platforms. Your feeling of success is based on your platform’s algorithm, which may not have your interests at heart. Feeding your words to a platform is a vote for its values, whether you like it or not. And they roach-motel you by owning your audience, making you feel that it’s a good trade because you get “discovery.”

    Enter the Fediverse. Not just an alternative to the centralized model; it represents a fundamental change. It’s not about building another centralized platform, but about fostering a modular, interconnected network. Built on open protocols like ActivityPub, the Fediverse allows independent servers to communicate directly. This serves the purpose of still facilitating content discovery and relationship connections while empowering individuals to own and control their own identities and data.

    It’s a return to the original spirit of the open web while embracing what we learned about discovery and reach of the large platforms.

    Hoping to pass it forward, I thought I would document my progress in a series of posts because, even as someone comfortable with technology (though not an expert), I found getting started challenging. (I have lots of thoughts on how broken the UX is for the open-web, but that’s for another post). There’s a lot of information out there, but it’s often fragmented and assumes a level of technical expertise. While each individual step is simple, figuring out which steps to take, and in what order, can be confusing.

    To start we’ll focus on two key steps in establishing presence in the Fediverse:

    1. Connecting your website and Mastodon profile so the Fediverse knows they are the same person.
    2. Setting up your domain for use as your Fediverse handle.

    If you’ve signed up for Mastodon, you already picked a handle, one that is tied to the Mastodon server you registered with (for example, mastodon.social is the most popular server at the time of this writing).  The good news is that the Fediverse is designed for cross-server communication. Even if someone registers on a different Mastodon server (like mastodon.lol), they can still follow and interact with you.

    But one of the beautiful things about the Fediverse is that you can own, independent of any 3rd party service, your own handle. Your identity on the web. It can be based on a domain you own, taking the form of [email protected]. Think of it like having a personalized email address for the social web – it’s unique to you and nobody else can claim it.

    Step 1: Linking From Your Website To Mastodon

    This tells the Fediverse, “This website belongs to the same person as this Mastodon profile.”

    1. Decide Where to Put the Link: Choose where on your website you want to link to your Mastodon profile. Common places are your homepage, “About” page, footer, or a dedicated social links section. The most important thing is that it’s on a page that you’ll link to from your Mastodon profile in the next step.

    2. Add the rel="me" Link: Add a normal link to your Mastodon profile, but include the rel="me" attribute. Here’s the HTML code:

      <a rel="me" href="https://mastodon.social/@yourusername">Mastodon</a>

      Replace https://mastodon.social/@yourusername with your Mastodon profile URL.

      You can change the text “Mastodon” to anything you want (e.g., “Follow me on Mastodon,” your Mastodon handle, or an icon).

    3. Save and Publish: Save the changes to your website and publish them

    Step 2: Linking From Your Mastodon Profile To Your Website

    Now we need to do the reverse: link from your Mastodon profile back to your website. This creates a two-way verification, confirming that you control both.

    1. Edit Your Mastodon Profile:
      • Go to your Mastodon profile on your instance (e.g., https://mastodon.social/@kconragan).
      • Click the “Edit Profile” button (the exact wording might vary slightly).
      • Find the “Profile Metadata” section. This is where you can add custom fields.
      • Add a new field and enter your website’s URL (ideally a link to your “About” page). You can label it “Website,” “Homepage,” “My Site,” or something similar. The label itself doesn’t affect the verification.
      • Add your Fediverse handle ([email protected]) to your Mastodon bio.
      • Save your profile changes.

    screenshot

    1. Go to your server (e.g., mastodon.social).

      • Navigate to your profile page (e.g. https://mastodon.social/@kconragan)
      • Click “Edit Profile.” (or something similar depending on your server)
      • Here you’ll see various profile metadata you can add extra information about yourself. One of the options will be adding links to elsewhere on the web that you want people to visit. Here, enter your website (the url that holds the rel=me link you just made). You can label it whatever you want, the only thing that matters is that the URL points to your new identified webpage.
      • Click “Save Changes”

    That’s it, time to check if it worked!

    Step 3 (Verification - Troubleshooting)

    If everything is set up correctly, Mastodon will automatically detect the rel="me" links and display a green checkmark next to your website link in your profile. This is the visual confirmation that the connection has been made. Huzzah!

    screenshot

    Troubleshooting:

    • Wait: It can sometimes take a while (even a few hours) for Mastodon to update its information. Be patient, and check again later.
    • Typos: Double-check for any typos in the URL you added to your Mastodon profile and in the href attribute of the rel="me" link on your website.
    • Other Attributes (Rare Issue): In some rare cases, other attributes on the <a> tag might interfere with Mastodon’s ability to recognize the rel="me" link. If you’re still having trouble, try temporarily removing any other attributes (like aria-label or class) from the link, just to see if that helps.
    • Use the Debugger: The Mastodon Link Debugger (made by Rob Cannon) is a fantastic tool for diagnosing issues: https://mastodon-link-debugger.vercel.app/. Enter your Mastodon profile URL, and it will show you any problems it finds.

    Hopefully by now you’ve got a green checkmark! With our identify verified, we can move to making ourselves discoverable. To do this, we will set up what is known as WebFinger

    Telling The Fediverse You Exist

    The rel="me" links establish verification – they prove you control both your website and your Mastodon profile. The next step is being able to use your own domain as your handle on the Fediverse. This allows you to use your own domain as your Fediverse handle, providing a consistent and memorable identity across services. Instead of relying on a platform-specific username, people can find you using the same address as your website.

    For this, we need WebFinger. WebFinger is a simple protocol: it’s a file, named webfinger (no extension), placed in a specific directory on your site – .well-known – resulting in a full path of domain.com/.well-known/webfinger. This file, formatted as JSON, acts as a directory lookup, translating your [email protected] address into the underlying Mastodon account information.

    The key pieces of information the webfinger file contains are:

    • subject: This is your Fediverse address, in a special format that starts with acct:. For now, we’ll use your _actual_Mastodon address (e.g., acct:[email protected]).
    • links: This is a list of places where Mastodon can find more information about you.
    • rel="self": This points to your official profile.

    Create Your WebFinger

    To get you started, here is my WebFinger:

    {
      "subject": "acct:[email protected]",
      "aliases": [
        "https://mastodon.social/@kconragan",
        "https://mastodon.social/users/kconragan"
      ],
      "links": [
        {
          "rel": "http://webfinger.net/rel/profile-page",
          "type": "text/html",
          "href": "https://mastodon.social/@kconragan"
        },
        {
          "rel": "self",
          "type": "application/activity+json",
          "href": "https://mastodon.social/users/kconragan"
        },
        {
          "rel": "http://ostatus.org/schema/1.0/subscribe",
          "template": "https://mastodon.social/authorize_interaction?uri={uri}"
        }
      ]
    }

    Copy the code above, make the necessary replacements, and save the file as webfinger (with no extension) in your static/.well-known/ directory. Once you’ve created and saved the webfinger file, deploy your changes to your website.

    Testing Your WebFinger Setup

    After deploying, you need to verify that your WebFinger file is working correctly. Here are two ways to do that:

    1. Using curl (Command Line):

    Open your terminal and run the following command, replacing yourusername and domain.com with your _actual_information:

    curl -H "Accept: application/jrd+json" 'https://domain.com/.well-known/webfinger?resource=acct:[email protected]

    If everything is working, you should see output similar to the JSON code you pasted above, confirming that your WebFinger file is accessible and returns the correct information.

    2. Using an Online WebFinger Lookup Tool:

    You can also use a web service like https://webfinger.net/lookup/. Enter your full Fediverse address ([email protected]) and click “Lookup.” The tool should show you the information from your WebFinger file.

    Success

    With your WebFinger file in place and your rel=“me” links configured, your website is now discoverable on Mastodon using your custom domain handle. Anyone searching for [email protected] should be able to find your profile. If you’ve made it this far, congrats! You now have the foundation for managing your own identity across the Fediverse. If you have any questions, don’t hesitate to email me (or better yet, reach out on Mastodon!).


  4. >My Llm Codegen Workflow Atm

    Harper Reed gives a nice overview for how he is using LLMs to write software. I like his simple breakdown of using successive steps to (1) brainstorm, (2) plan, and (3) execute. Execute is where I still am learning. Right now my process pretty much just looks like copying pasting a lot of code between my IDE and Gemini.

    I like his overall take on the current optimism and skepticism surrounding LLMs in general:

    A lot of my friends are like “fuck LLMs. They are terrible at everything.” I don’t mind this POV. I don’t share it, but I think it is important to be skeptical. There are an awful lot of reasons to hate AI. My main fear is about power consumption and the environmental impact. But… the code must flow. Right… sigh.
    If you are open to learning more, but don’t want to dig in and become a cyborg programmer - my recommendation is not to change your opinion, but to read Ethan Mollick’s book about LLMs and how they can be used: Co-Intelligence: Living and Working with AI.

    Book purchased. Look forward to reading!


  5. >Repomix

    Found via Harper. A lovely little tool that takes your code repository and packages it into an AI-friendly file that you can use with your favorite codegen agent. There’s a dead-simple web UI that you can just point your Github repository at. Or, you can install locally to use in your terminal with more options.


  6. >Are We Doomed Yet

    A fun little webpage that provides a live estimate of chances that 2024 YR asteroid makes contact with Earth. Today the chance is 1 in 279 (I’ve seen it go as high as 1 in 47).

    I think Matt Webb summarizes this perfectly:

    It’s true, it is somehow comforting to contemplate the potential of the end of the world that at least isn’t my fault. It doesn’t make me feel like I’m complicit by not recycling a plastic bottle that one time or whatever. Like phew, I get to wallow in a guilt-free imminently immanentised eschaton.


  7. Amazon’s killing a feature that let you download and backup Kindle books

    From The Verge:

    Starting on February 26, 2025, Amazon is removing a feature from its website allowing you to download purchased books to a computer and then copy them manually to a Kindle over USB. It’s a feature that many Kindle users are probably unaware of, given books are more easily sent to devices over Wi-Fi. Still, it’s beneficial for backing up purchases or converting them to other formats compatible with non-Kindle e-readers.

    If you’ve bought Kindle books, download them now. Digital “ownership” is a thorny issue, but I’m personally not comfortable with content I’ve paid for living solely on Amazon’s servers. This change effectively locks your purchased books to Amazon’s devices, limiting your freedom to read them where you want.

    The process, until February 26th, is straightforward:

    • Go to your Digital Content Library on Amazon.
    • For each book, click the “More Actions” button and select “Download & Transfer via USB.”
    • A pop-up will appear; select the Kindle device you want to associate the download with and click “Download.”

    (No bulk downloads, unfortunately. One book at a time.)

    Screenshot of Amazon Download page (before Feb 26, 2025)

    You’ll then have a local copy. But these files are tied to the specific Kindle you chose. This download option is a relic from the early days of Kindle when Whispernet (a cellular connection) wasn’t always reliable. USB downloads were essential then, but Wi-Fi has since made them largely unnecessary for most users. However, even in the Wi-Fi era, this feature became a lifeline for those who valued true ownership and control over their digital books. But here’s the catch: even with a local copy, you’re still tied to Amazon’s discretion. And their discretion is that you can only read books purchased from them on devices they manufacture and sell. Fortunately, tools exist to convert Kindle books to open formats like .epub. But this leads you into the wild world of DRM and copyright law.

    I’m no lawyer, but the intersection of DRM and the first sale doctrine seems relevant. First sale lets you resell or lend a lawfully purchased copy and is a big enough deal to have reached the Supreme Court in the 1980s when video stores renting VHS tapes were challenged. The video stores won. Turns out copyright law is meant to protect consumers as much as creators. (Though more recently courts have been reluctant to apply first sale to digital goods, which underscores the tension between consumer rights and DRM.)

    Want to read your Kindle books on other devices? Check out Calibre and DeDRM_tools. I found this It’s Foss tutorial helpful (though I needed an older Calibre version, as their troubleshooting notes suggest).

    I’ve decided to stop buying ebooks through Amazon. I’ve been a happy user of Libby, which offers a fantastic way to support local libraries—something more important now than ever. Libby provides a great user experience and generally has an excellent catalog, but it does have some caveats. You’re tied to the quality of your local library’s collection, and there can be long wait times for popular titles, just like with physical books.

    If I’m impatient or want to own a copy, Bookshop.org has recently started selling ebooks. most of the books currently are also DRM-protected. However, here is a post from CEO Andy Hunter on Threads:

    Hi all, CEO of Bookshop.org here. We love DRM-free books and are working hard to add lots of them to our catalog. For launch, we have mostly large corporate publishers who insist on DRM and don’t allow downloading books. That’s a publisher decision, not ours. But soon we’ll have a way to filter for DRM-free titles which will be downloadable! Also, it’s my holy grail to allow you to buy an ebook from a local bookstore and read it on your Kindle. It requires Amazon’s cooperation—we are trying!

    (Side note: Boox is a compatible e-ink device that works with bookshop.org)

    Bookshop.org also seem committed to protecting consumer access to their digital books (which started this whole post for me). From their FAQ:

    The publishers of our ebooks require that the ebooks you “purchase” from Bookshop.org are only licensed to you. Even DRM-free books are subject to some restrictions and may not be owned outright. However, even in the case of an ebook being removed from Bookshop.org by the publisher, users who purchased the ebook previously will continue to have access to the ebook file. Depending on the circumstances, in the unlikely event an ebook is removed from your library because of a rights issue or otherwise, Bookshop.org will refund the purchase price you paid.


  8. File Naming & Organization For Photographers

    File organization and naming is not exactly the most exciting topic for photographers. Most of us would rather discuss our next photo destination or piece of photography gear we want to purchase. But digital asset management becomes a much more significant part of being a photographer as your portfolio grows. These past couple of years I’ve been putting a lot more focus on my system: optimizing my import process in Capture One, getting a NAS established to store my photo collection, and publishing my best photos here and in Google Photos as a cloud-based backup.

    Key to all of this is file naming and organization. As I’ve written about previously, I’m a big fan of Capture One’s Sessions because they’re directly linked to the file system, unlike Catalogs which rely on a database. Each Session gets its own dedicated folder for all the images, adjustments, and metadata. This makes it incredibly easy to move projects between my laptop and desktop, but more importantly, it means I can still intuitivel navigate my entire photo archive when I’m not using Capture One (or if at any point in the future I decide to switch to a different photo app).

    An archival approach

    There are lots of great resources online that provide best practices here: Harvard University, National Archives, The Library of Congress, Society of American Archivists.

    Across them all are a handful of consistent guidelines:

    • Keep filenames as short as possible, no more than 25-30 characters
    • Avoid use of special characters
    • Replace periods and spaces with hyphens or underscores
    • Include descriptive information
    • Include dates and format them consistently (ISO 8601)

    A simple but scalable system

    So, with these best practices in mind, here’s how I organize my own photo library.

    To start, all my photos are in one parent folder. Surprise! It is named ‘Photos’.

    Within that directory, I create a new folder each year, simply named after the year (e.g. 2025). Inside each year folder is a flat list of folders, each folder representing a a photoshoot. I’m not too precious about what constitutes a photoshoot. Sometimes it’s literally just a single photoshoot. Other times it is a few days of successive shooting that are all part of one “trip” or “project”. The name of each folder follows the same naming convention: YYYY-MM-DD_Short_Description. Here is an example from my 2023 photo directory:

    2023-10-15_Paso_Robles_Horse_Show
    2023-10-28_Woodside_Park_Horse_Show
    2023-11-02_Crystal_Springs_Landscape

    There are a few benefits to this:

    • I can easily sort the folders in chronological order
    • The brief descriptions tell me what’s inside without having to click further
    • The names are compatible in most (if not all) filesystems

    Now, a mistake many photographers make (myself included for many years) is to just use the default names of files provided by their camera:

    - DSCF9450.RAF
    - CRW_0001.CRW
    - NEF_0001.NEF

    There are a few problems with these:

    • The filename tells you nothing about the image
    • They can be sorted by name, but that doesn’t necessarily mean they are sorted chronologically
    • Once you have taken 9,999 images, you run into the risk of duplicate filenames

    Based on the archival naming conventions from above, I use the following:

    YYYYMMDD_Short_Description_COUNTER_KAI.extension

    Broken down, that is:

    • The year in ISO 8601 format (with no spaces, periods, or dashes)
    • A short description from the photoshoot
    • A 4-digit image counter (0001-9999)
    • My firstname (in case I share the file)

    Here is what looks like in practice:

    20250207_Marine_Preserve_0001_KAI.RAF
    20250207_Marine_Preserve_0002_KAI.RAF
    20250207_Marine_Preserve_0003_KAI.RAF
    20250207_Marine_Preserve_0004_KAI.RAF

    Putting this into practice in Capture One

    While any modern photo editing software can help you implement a consistent file naming system, Capture One offers particularly powerful tools for this. Here’s how I set up my YYYYMMDD_Short_Description_COUNTER_KAI.extension convention within Capture One:

    You can rename files during import or at any point afterward using the Batch Rename feature (the process and interface are largely the same). The key is understanding Capture One’s Tokens. Think of them as fill-in-the-blanks for your filenames, automatically inserting details like dates, numbers, and camera info. They even let you use dynamic metadata like location or capture time. While Capture One offers pre-built templates, you’ll need a custom one for our specific convention.

    Here’s the step-by-step:

    1. Name Your Job: Before importing or selecting images, you have to enter a “Job Name.” This provides the short description for your files. Go to the “Next Capture” tab (or if you’re batch renaming, access the metadata tool) and enter a descriptive name for your shoot in the “Job Name” field. This is less error prone but also works better when you save this as a preset.

    2. Import or Select: Either begin your import (File -> Import Images… or the Import icon) or select the images you want to rename.

    3. Access the Naming Tool: In the Import window (or by right-clicking selected images and choosing “Rename…”), find the Naming tool. Click the button next to the “Format” text box to open the Naming dialog.

    4. Create a Custom Format: Create a new naming format by dragging tokens and/or adding custom text directly into the “Format” text box. (Click the downward arrow on “Tokens” to access more options.)

    5. Add Tokens and Text: Drag and drop the following tokens into the format line:

      • [YYYY][MM][DD] (for the date)
      • [Job Name] (for the short description – this automatically pulls the name you entered in step 1)
      • [4 Digit Counter]
      • Your first name or initials (e.g., KAI).

      Your final format should look like this: [YYYY][MM][DD]_[Job Name]_[4 Digit Counter]_KAI

    6. Verify and Save: Click “OK” to accept the changes. Important: verify the sample below the “Format” text box to ensure it’s correct.

    Create a Preset: Instead of repeating these steps each time, save this format as a new preset. This allows you to select it from the drop-down menu during import or batch renaming, streamlining your workflow considerably.


  9. The Artist's Role In A Troubled World

    In the midst of the constitutional chaos over federal spending is the disbanding of the presidential committee on the arts and the humanities. From Art Newspaper:

    [Trump] dissolved the committee in an executive order reversing Joe Biden’s own executive order reviving it. [The PCH] endeavours to boost support for the arts, humanities and museum and library services at the federal level.

    Not that it really matters, but the PCAH was establishedy by President Reagan in 1982. As an artist or creative, it’s easy to be disheartened in times like this. But that is exactly the point. Creating a sense of hopelessness and futility is a key objective of the “strategic confusion”.

    This quote by Toni Morrison was something I turned to often during the 45th presidency, which she herself wrote in response to the 2004 re-election of then President Bush (included in The Nation’s 150th Anniversary Special Issue):

    This is precisely the time when artists go to work. There is no time for despair, no place for self-pity, no need for silence, no room for fear. We speak, we write, we do language. That is how civilizations heal.

    I know the world is bruised and bleeding, and though it is important not to ignore its pain, it is also critical to refuse to succumb to its malevolence. Like failure, chaos contains information that can lead to knowledge even wisdom. Like art.

    Note to self: keep making.


  10. Drunk on Freedom, Stuck on Choice

    This morning, while drinking my coffee, I put on Jack Van Cleaf’s new song (featuring Zach Bryan), “Rattlesnake”—I hadn’t heard it before and it’s a beautiful song. One line especially stuck with me: “Drunk on freedom, stuck on choice.”

    The previous night I watched Wim Wenders’ contemplative film, Perfect Days; it invites you into the life of Hirayama, a Japanese toilet cleaner. Hirayama lives a life of extreme routine. His structured, predictable days at first seem limited. Yet, within these self-imposed constraints, he finds a profound sense of peace and freedom even. He is, in a word, happy, or at least content. He is anything but drunk on choice.

    The film reminded me of a saying, “Peace is happiness at rest, and happiness is peace in motion,” which I first read in The Almanac of Naval Ravikant.

    Hirayama’s life explores the fine line between contentment and compromise. He has accepted a life of routine, finding happiness within its confines. However, is this acceptance a conscious decision to find peace within the overwhelm of countless possibilities? Or is it acquiescence, a quiet surrender to a limited existence?

    A dilemma I keep pondering: the human spirit’s inherent restlessness compels it to question the uncontrollable, despite the peace found in focusing on what we can control. Where is the balance between accepting what is and exploring what can, or should, be?

    Modern life bears the burden of limitless options. We crave freedom, and it has never been greater. Yet the sheer volume of choice available to us can be paralyzing. In The Paradox of Choice, Barry Schwartz discusses how this abundance of choices increases the likelihood of regret.

    In contrast to the paradox of choice, there is Hirayama’s life. By limiting his options, he escapes the constant pressure to optimize or challenge the constraints of his life. He’s found peace in motion—a happiness born of purposeful action within a defined space, yet also, perhaps, tinged with a sense of something lost.

    The fascinating aspect of Perfect Days is its suggestion of Hirayama’s past regrets. Later stages of the movie hint at pain from his past. And it leaves you wondering how much of Hirayama’s current life is avoiding the vulnerability and potential pain that comes with a deeper emotional connection. Is Hirayama’s routine an attempt to avoid the hurt he once experienced? Or is it a hard-won acceptance of life’s inherent limitations? A conscious choice to find joy and beauty in the present moment?

    Truth is always more complex. Self-preservation or acceptance is a false dichotomy. One lives through negotiation with the soul between contentment and yearning. Peace in the present versus striving for an unknown future. One with more potential for reward, but also failure, pain, or loss. The dance between what is and what could be.


  11. Kew Gardens and Colonialism

    Winter sunset at Kew Gardens

    My friend Joël recently shared the Empire podcast with me (which I was unfamiliar with) and an episode in particular: Empire of Plants: From Kew Gardens to Botany Bay. Anita Anand and William Dalrymple in conversation with Sathnam Sanghera discuss the history of botanic gardens and their role in colonialism.

    As background, in 2016 Joël took my family and I to the Kew Gardens on a trip we had made to the UK. We had a lovely day there. It was near Christmas time and we brought my then 4-year old daughter to explore. During the winter holidays, Kew Gardens put together a spectacular light show that adds a touch of magic to a place already rich to the senses: giant palms housed in Victorian glass, oversized lily pads floating on ponds, flowers spilling from manicured beds, and centuries old trees of so many varieties including black walnut, coastal redwood, mountain gum, and more. I have vivid memories of my daughter running playfully through the mature gardens, and watching into the sunset as the holiday lights put on a magical show. The Kew Gardens are a testament to human curiosity in the natural world and commitment to continued study of it’s beauty and diversity.

    But it also speaks to the complex and troubling history of British Colonialism, and how botany was a powerful tool for their empire. I was admittedly unaware of this aspect on our visit there. The podcast did a good job of framing how, in the economic exploitation of Britain’s colonies, Kew played a central role, with its scientists working to cultivate and transport valuable plants like rubber and quinine, often with devastating consequences for indigenous communities.

    The rubber industry in Malay particularly resonated with me as, in 2006–2007 I spent the better part of a year living in Borneo and saw the legacy of the rubber trees introduced by British colonists.

    A family-run rubber making facility Malaysian Borneo

    My experience in Borneo, witnessing the lasting impact of the rubber trade, brought this complex history into sharp focus. History, including that of Kew Gardens, is often complex, a story of human curiosity and cruelty, beauty and barbarism. It seems they are now grappling with this legacy, quoting from an article on their own website:

    Currently, Kew is in the middle of a journey; we are looking at our language, our collections, our scientific practices, our policies, and the histories we do and don’t tell about Kew’s entanglement with the British Empire.…In the words of the museum’s founder Sir William Hooker, our purpose was to show plants and ‘the uses which the ingenuity of man has derived from them’ – and to harness them at quite a cost

    Thanks for the share, Joël!


  12. A Forgotten Gist

    I was cleaning up some repos in GitHub and came across an old gist I created back in 2012.

    Honestly, I’d completely forgotten about it! Back then, Sublime Text was my IDE of choice, but I had recently started using Vim motions. I wasn’t quite ready to embrace MacVim or the terminal as my full-time coding environment, though.

    When Apple released macOS X Lion, they introduced an iOS-like context menu that appeared when you pressed and held a key. As a designer, I understood this was another step in bringing macOS and iOS closer together in terms of user experience. But it was painful if you were a designer clumsily making his way through Vim like me. After digging around online, I figured out how to disable this context menu for Sublime Text and documented it in a Gist for posterity. Honestly, I didn’t think about it again.

    Turns out, that Gist has been starred almost 400 times and has over 100 comments from people offering their thanks.

    Gist Screenshot

    First, thank you to all the commenters! Seriously, I can’t tell you how good it feels to know it helped so many people facing a similar challenge.

    But it also goes to show the power of learning in public. I didn’t create that Gist for eyeballs or traffic. I genuinely just made it to document what I had learned. I’ve come to realize that even seemingly insignificant things are worth documenting. What might be obvious to you after hours of research could be a revelation to someone else. By sharing our knowledge, we create a collective resource that benefits everyone. You never know when your learning journey can aid the person just behind you. And this is the beauty of the internet.


  13. >Don't Underestimate The Good Internet

    Anil Dash in his post The Web Renaissance takes off

    And I should never have underestimated the passion and resilience of the people who create the good internet, those who never stopped making things just for the love of the medium.

    This captures so perfectly this unexplainable draw I’ve felt recently to resurrect a personal site. It’s not for traffic, eyeballs, money. Truthfully, I deeply regret not having made a personal site a ongoing committment. But here we are.


  14. Google Gemini: My Neovim Configuration Assistant

    I love Vim. And while I’m a fan of its infinite customizability, I’m not a fan of having to remember every syntax and config parameter.

    I ran into a simple problem today: when using Telescope to find a file, I kept seeing repeated filenames in my tree (e.g., in this Hugo site, numerous files are duplicated between /content and /docs). This made it tough to know which file to choose. I wanted Telescope to show me the full pathname in order to help disambiguate the files. Easy enough, I assumed, but I don’t know Telescope and NeoVim’s syntax well enough to implement this without resorting to Google and clicking through some links. But then I remembered that Gemini now lets you upload code folders and I thought, why not just upload my entire NeoVim config and ask Gemini?

    I went to gemini.google.com and started a new chat with the Gemini Advanced 1.5 Pro model. One of the cool things about this model is that you can upload code for it to analyze and use as context for your session. I simply uploaded my entire ~/.config/nvim/ directory and asked:

    When I use <leader>ff, how can I make it so I see the full pathnames to better disambiguate files? Please give me the exact code snippet and file and line number to add it to.

    Gemini’s response:

    To see full pathnames when using <leader>ff to disambiguate files, you need to modify your Telescope configuration. Here’s how:

    File: nvim/lua/kai/plugins/telescope.lua

    Line Number: 7

    Original Code:

    path_display = { "smart" }

    Modified Code:

    path_display = { "absolute" }

    Explanation:

    The path_display setting in Telescope controls how file paths are displayed in the picker. By changing it to "absolute", you’ll see the full path for each file, making it easier to distinguish between files with the same name in different directories.

    This simple interaction saved me a ton of time, and it really highlights the potential of LLMs as collaborative “agents.” (To clarify, “agent behavior” in this context refers to the ability of an AI to act autonomously and complete tasks with minimal human intervention.) Simon Willison recently published his AI/LLM predictions for the next 1, 3, and 6 years, and while he’s generally bearish on the idea of fully autonomous “agents” in the near term, he does see potential in two key areas: coding assistants and research assistants. My experience with Gemini perfectly illustrates this. While it wasn’t exhibiting full-blown agent behavior, it demonstrated the impressive reasoning capabilities of current LLMs and their ability to be incredibly helpful with specific, well-defined tasks right now. This, to me, is a glimpse into the future of how we’ll work alongside these powerful tools.


  15. Finding Capture One Sessions on a Mac with Alfred

    One of the unique advantages of using Capture One is its concept of Sessions, which doesn’t exist in alternatives like Adobe Lightroom. In my workflow I use both: Sessions for individual shoots, and Catalogs as a way to aggregate sessions and photos.

    What I particularly like about Sessions is they are directly tied to the filesystem. Each Session gets its own dedicated directory for all the images, adjustments, and metadata. For me this keeps things organized and integrates well with how I already manage my photos and back up system to my NAS. I still use catalogs but the majority of my photoshoots start as Sessions, and then I use catalogs to aggregate across them.

    However, one of the drawbacks of Sessions, especially as you get more than a handful, is retrieving them. Spotlight doesn’t index Capture One Sessions (or catalogs) by default, so you’re really left with navigating your folders manually. Enter Alfred.

    I’m a big fan of launchers, dating back to Launchbar and Quicksilver. Most recently I use Alfred. Here’s how I’ve set it up so you can retrieve your Capture One Sessions through Alfred.

    1. Tell Alfred about Capture One

    Alfred Preferences: Adding .cosessionsdb

    First, Alfred needs to know what a Capture One session file is:

    • Open Alfred’s Preferences (⌘,).
    • Go to Features > Default Results.
    • Click Advanced…
    • Click the + button to add a new user-defined file type
    • Enter .cosessiondb and click Close

    2. Include Your External Drives

    Note: you can skip this step if you store your photos on your Mac’s internal drive.

    I store my images on an external SSD. But Spotlight (which Alfred uses for indexing) doesn’t always index external drives. Here’s the fix:

    • Open Terminal (Applications > Utilities > Terminal).
    • Paste in this command, replacing /Volumes/MyPhotoDrive with the name of your drive:
      sudo mdutil -i on /Volumes/MyPhotoDrive
    • Hit Enter, type in your password, and you’re done!

    If Alfred isn’t setup already to do so, ensure your the parent folder where you store all of your photos is part of the default search scope. You don’t need to do this if your photos are stored in your default home directory.

    • Go back to Alfred Preferences > Features > Default Results > Search Scope, and click the ”+” button.
    • Choose the folder where all your photography projects are stored.

    That’s it! Note: it will take a few minutes (or hours depending on the size of your index) for Spotlight to index the new files.

    Now, when I need a session, I just open Alfred (⌘ + Space), type space to trigger a file search, type part of the session name, and hit Enter. Alfred launches Capture One and opens the session.

    This is a fairly obvious solution in retrospect, but hopefully it helps!


  16. First Bird Photos of 2025

    It’s been a bit of a slow start to the year photographically. That’s not a bad thing as a big part is due to our recent trip to the Florida Keys where we got to do a bunch of diving. Besides spending as much time as possible underwater, I also had a goal of making my first short dive video. I’m pretty happy with the results, but I’m equally eager to get some photos made this year.

    With some time to kill this afternoon, I headed to one of my favorite places to see birds along the coast: the plot of land between Frenchman’s Creek and Dunes Beach in Half Moon Bay. I’m still a relatively inexperienced birder, which I honestly love as it means every outing I’m bound to experience something new by just paying attention. The beauty of the beginner’s mindset!

    Along the dunes, you get the usual suspects: gulls, pelicans, and the occasional osprey soaring overhead. But move just a few steps inland, and the landscape changes quickly. Red-tailed hawks circle above the grasslands, while crows and ravens perch on fence posts. Closer to the forested area: hummingbirds dive-bombing from a favorite perch, sparrows throughout the underbrush, chickadees and warblers in the trees, and the occasional towhee as well.

    One bird I’ve been wanting get a good picture of is the Northern Flicker, a member of the woodpecker family. I love the black-scalloped plumage and the flashes splashes of red and yellow. As luck would have it, I did spot a one, but unfortunately, I wasn’t able to get a real keeper image. Flicker tend to like to hide out, either in the underbrush or in branches overhead. This one was perched in a branch that prevented me from getting a clean background, and the dappled light was difficult to get the whole bird illuminated. Patience and persistence is the name of the game, but here is an image nonetheless.

    Northern Flicker

    Nearby, I came across a California Thrasher amongst the coastal shrubs. These guys also love to hide out. I’ve previously gotten a shot of one perched, but I kind of like how the out-of-focus branches frame this one.

    California Thrasher

    I also found a female Common House Finch. While the females lack the vibrant red plumage of the males, the soft blue-to-green ombre background provides a nice contrast to the warm browns.

    Common House Finch

    And of course, you can always find the ever-present Song Sparrows and White-Crowned Sparrows.

    White-Crowned Sparrow

    All images here were shot on my FujiFilm X-H2s with the 150-600mm f/5.6-8 lens.


  17. Scuba Diving The Florida Keys

    Head on over to YouTube to watch the video there if you prefer.

    This winter holiday, my family and I went diving in the Florida Keys. We joined friends who have a tradition of visiting around Christmas. We are a family of divers: my wife is a PADI Scuba Instructor, I’m a PADI Divemaster, and our daughter is a newly certified Junior Open Water Diver. It was a great excuse to visit Florida for the first time! We usually spend our winters skiing, so the tropical weather and warm water were a welcome change.

    We spent most of our time in Islamorada. It’s a fantastic area for newer divers, offering easy, shallow dives. We used the Islamorada Dive Center as our scuba home. They’re a very family-friendly operation and overall I was happy with them. Their boats accommodate around twenty. So, divers need to be self-sufficient, both on the boat and underwater.. Florida, like California, allows certified divers to dive without a guide (you’re paying for access to the boat). We preferred this. The sites are easy to navigate and being in our own group meant we could focus on our own diving. I recommend hiring a guide (which you can do through Islamorada Dive Center) if you are a less experienced diver or it has been a while since your last dive.

    While the shallow reefs were ideal for family-friendly dives, we were also eager to explore some of the area’s famous deeper wrecks. We spent one day on the U.S.S. Spiegel Grove out of Key Largo (using Quiescence Diving Services, which I highly recommend) and a second day on the U.S.S. Vandenberg out of Key West (using Southpoint Divers, another great outfit).

    Despite having around 2,000 dives, I’m inexperienced with wrecks. My only prior wreck diving was on the USS Liberty; I did this during my 2008-2009 Southeast Asia stay, during which we stayed quite a few months in Bali. The Spiegel Grove and Vandenberg are on another level. These ships are massive! The Spiegel Grove is 510′ while the USS Vandenberg is 523′. Officials sank these ships far enough offshore to ensure their tops remain at a sufficient depth, around 60 feet at the shallowest, preventing interference with shipping traffic. Each ship has a fascinating sinking history. Even more exciting: They will sink the SS United States, the largest ship to date, by the end of 2025 or early 2026, creating the world’s largest artificial reef.

    Diving these behemoths is something else. As you descend, they appear as ghostly silhouettes at first, hard to make out. And then their full forms reveal themselves in the hazy light and muted colors of the deep. The size is disorienting; towering masts and cavernous cargo holds stretch in opposite directions, leaving you wondering where to even begin exploring. Schools of barracuda patrol the decks, sharks prowl the outskirts of the superstructures, and Goliath Grouper lurk in the shadows. Swimming along, you feel dwarfed by the immensity and realize you could do hundreds of dives before seeing even a majority of these wrecks. I can’t wait to go back!

    A few technical details on the video for those interested:

    • All footage was recorded with a DJI Action 4 camera, stored in a housing, and shot in D-Log M.
    • All editing and color grading done in DaVinci Resolve Studio (2024 was the year I finally got into video editing!).
    • All sound is from the dives themselves, but the backing track is from https://artlist.io.

  18. The Books I read in 2024

    BookTok, r/suggestmeabook, Tiermaker… Everywhere you look online, people are ranking their yearly reads. I’m going old-school and just listing mine here. I read about 26 books in total this year, although some were larger commitments than others (ahem Brandon Sanderson). I read quite a bit more fiction than non-fiction and have no regrets. I’d like to get to a point where I process each book more thoroughly as I go. However, it’s also nice to look at the year in full, so here we go. This year I discovered some new favorite authors and genres, and found that themes of found family, resilience, and the power of nature resonated strongly with me.

    Remarkably Bright Creatures by Shelby Van Pelt

    Follows Tova Sullivan, an elderly cleaning woman at an aquarium who forms an unlikely bond with Marcellus, a giant Pacific octopus. Through their connection and Marcellus’s remarkable intelligence, they unravel the mystery of Tova’s son’s disappearance thirty years earlier. This was a delightful book. (Think talking octopus!) I would read this book if you liked House In The Cerulean Sea. Both had a magical, whimsical quality while exploring the themes of love and loss, second chances, and the family you make.

    “Humans. For the most part, you are dull and blundering. But occasionally, you can be remarkably bright creatures.”

    Tress Of The Emerald Sea by Brandon Sanderson

    Born from Brandon Sanderson’s Secret Projects and inspired by a personal viewing of The Princess Bride, Tress of the Emerald Sea transports readers to a unique Cosmere world where oceans are made of deadly spores. This standalone novel follows Tress, a capable young woman who breaks from fairytale tradition to undertake a perilous journey to save her beloved, all under the witty and often meta commentary of Hoid’s narration, ultimately delving into themes of courage, found family, and the subversion of traditional narrative tropes.

    Enjoy memories, yes, but don’t be a slave to who you wish you once had been.

    The Sunlit Man by Brandon Sanderson

    After reading Tress I was eager to try another of Brandon’s Secret Projects. This one didn’t captivate me as much, perhaps because the relentless action left less room for character development, but it was still an enjoyable, fast-paced read. The story follows Nomad (who we know is a character from another cosmere novel), constantly on the run from a seemingly unstoppable enemy. Landing on the latest planet in his flight, a world in a perpetual cycle of scorching sunrise and deadly freezing night, forcing its inhabitants to constantly migrate to survive. He doesn’t want to be involved but is forced to help those on the planet he’s landed on compelling an exploration of self-preservation vs. responsibility and the weight and cost of power.

    Even in science, faith plays a role. Each experiment done, each step on the path of knowledge, is achieved by striking out into the darkness. You can’t know what you will find, or that you will find anything at all. It is faith that drives us—faith in answers that must exist.

    Piranesi by Susanna Clarke

    I read Jonathan Strange & Mr Norrell when it first came out. I had heard about Piranesi but didn’t realize before I started it that it was by the same author. It tells the story of a man living a solitary existence in the House, a vast world of halls, statues, and tides. He meticulously documents his world, believing it to be the entirety of existence, only to slowly discover clues that hint at a much larger (and harsher) reality. I was struck by how the book explores the nature of reality and how our perception is shaped by the limits of our experience, while still finding beauty within those boundaries.

    Perhaps even people you like and admire immensely can make you see the World in ways you would rather not.

    The Great Alone by Kristin Hannah

    I probably wouldn’t have picked up The Great Alone if my wife and I didn’t share an Audible account, but I’m so glad I did. Set in Alaska in the 1970s, it tells the story of the Allbright family, who move to the remote wilderness hoping for a fresh start, only to find that their personal demons have followed them. Thirteen-year-old Leni is caught in the middle of her parents’ increasingly volatile relationship, made even more intense by the isolation and harsh realities of Alaskan life. As the family struggles to survive against both the elements and the growing threat within their own home, Leni is forced to grow up fast and make some incredibly tough choices. Kristin Hannah does a beautiful job of capturing the raw beauty and power of the Alaskan wilderness; to me, it became the central character of the whole book. This one’s definitely a heavier read, dealing with themes of survival, resilience, and the complexities of family bonds against a backdrop that’s both beautiful and brutal, but it’s a powerful story that stayed with me.

    Now she knew there were a hundred ways to be lost and even more ways to be found.

    The Magic Hour by Kristin Hannah

    After finishing The Great Alone, I decided to give Kristin Hannah another go, and some Reddit sleuthing led me to The Magic Hour. Set in the small, rain-soaked town of Rain Valley in the Pacific Northwest, the story centers around a young, feral child who mysteriously appears one day, and a child psychologist, brought in to help, who makes it her mission to unravel the girl’s past. While the setting plays a less dominant role here than in The Great Alone, I was captivated by the relationship that develops between the psychologist and the child. It’s another beautiful story about found family and how, in serving others, we can find the way forward to forgive and heal ourselves. While it didn’t quite reach the heights of The Great Alone for me, it was still a worthwhile read.

    Love rips the shit out of you and puts you back together like a broken toy, with all kinds of cracks and edges. It’s not about the falling in love. It’s about the landing, the staying where you said you’d be and working to keep the love strong.

    Stolen Focus by Johann Hari

    One of just a couple non-fiction books I read this year. But that’s OK. Even having worked in tech for 25 years, I learned somethings in this book. Johann Hari’s shows how our attention spans aren’t simply weakening, but are being actively stolen by powerful forces in modern society. From social media algorithms to the pressures of constant productivity, Hari explores the myriad ways our ability to concentrate is being eroded. One quote that really stuck with me perfectly summarizes why I read so much fiction:

    Perhaps fiction is a kind of empathy gym, boosting your ability to empathize with other people—which is one of the most rich and precious forms of focus we have.

    Hari argues that developing this ability to focus is a crucial step in reclaiming our attention. I didn’t agree with all the premises, or conclusions. But the book was eye opening just how systemic of an issue our lost attention is and individual effort may not be enough to fully recover it. At the same time, this book did compel me to better manage my focus. I removed TikTok. Blocked most notifications on my phone. Installed an app that forced a pause before opening certain apps. And you know, it helps.

    I felt in that moment that we all have a choice now between two profound forces—fragmentation, or flow. Fragmentation makes you smaller, shallower, angrier. Flow makes you bigger, deeper, calmer. Fragmentation shrinks us. Flow expands us.

    The Bloodsworn Trilogy by John Gwynne

    I’d read the first two books in this series already, The Shadow Of The Gods and The Hunger Of The Gods, but the 3rd and final book, The Fury Of The Gods, was one of my most anticipated books this year. I reread the first two books and eagerly jumped into the final installment when it first came out. And it didn’t disappoint. One of the things I love about John’s writing is he doesn’t pull punches. People you root for don’t all make it. I felt the middle of the book wandered a bit more at times than it needed to, but boy does the ending wrap things up tidily. Orka is one of my favorite fantasy characters ever. Enough said. I highly recommend this series to anyone who loves Norse mythology, brutal action, and complex characters.

    I long for a day when I awake and live from dawn to sleep without one moment of fear.

    The Mistborn Saga by Brandon Sanderson

    The Final Empire was actually the first Brandon Sanderson book I read over a decade ago. I really enjoyed it and it propelled me into his other series including The Stormlight Archive. Yet, somehow I missed reading the final book in the original trilogy. So this year I read all three books of the Mistborn Saga, The Final Empire, The Well Of Ascension, and The Hero Of Ages, and read The Alloy Of Law which takes place some 300 years after the original trilogy. These are fun books. They are easier to get through than The Stormlight Archive but still have an epic fantasy feel.

    Don’t worry that you aren’t giving people what they want. Give them who you are, and let that be enough.

    Better Living Through Birding by Christian Cooper

    A couple years ago I suddenly found myself interested in birds. It’s crazy how fast it sneaks up on you. I can’t really blame it on the pandemic as I didn’t get into it until 2023. Nevertheless, now I’ve got a whole photography section for birds and there is ample research showing the mental health benefits. Cooper shares the joys and solace he finds in birdwatching, while also frankly discussing the challenges and prejudices he’s faced in the predominantly white world of birding, most notably detailed in his viral Central Park incident. This book offers a unique perspective on the healing power of nature, the importance of diversity in the outdoors, and the need to make these spaces more inclusive for everyone. It’s a powerful reminder that the simple act of observing birds can be a profound source of connection, reflection, and even social change.

    To recognize something as beautiful, sometimes all it takes is a change of perspective.

    Best Served Cold by Joe Abercrombie

    A story of revenge told in predictably violent but humorous way only Joe seems to manage. I love the cast of characters in this book: the poisoner Castor Morveer, the mercenary Nicomo Cosca, the Northman Caul Shivers. This is a standalone novel set in the world of Joe’s First Law trilogy, but can absolutely be read on its own.

    You were a hero round these parts. That’s what they call you when you kill so many people the word murderer falls short.

    The Faithful And The Fallen series by John Gwynne

    While waiting for the conclusion to The Bloodsworn Trilogy, I dove into John Gwynne’s earlier series, The Faithful and the Fallen (four books in total: Malice, Valor, Ruin, and Wrath). Honestly, it didn’t grip me quite as much as Bloodsworn. The plot meanders a bit, and some characters feel a little less developed. That said, it’s still an enjoyable read, and the series wraps up nicely. It was also cool to see Gwynne’s growth as a writer between series. My advice? Start with this one before Bloodsworn. They’re not directly connected, but Faithful and the Fallen might feel like a step back in terms of writing and story if you read them in reverse.

    To my thinking, though, it’s what happens before death that’s important. All of us die. How many really live?

    The First Law Trilogy by Joe Abercrombie

    Logen Ninefingers is one of my favorite fiction characters—of any genre—of all time. I read The First Law years ago but somehow never managed to finish the series. I took care of that this year by reading The Blade Itself, Before They Are Hanged, and Last Argument Of Kings. What I love about this series is almost every character is morally gray. There are few true heroes or villains. Most characters make choices based on self-interest, survival, or flawed ideals but are unapologetic (although remorseful) in doing so. But in the moral murk, the


  19. 2024 Woodside Fall International 3-day Event


  20. Woodside Autumn Classic Horse Show