justin․searls․co

Still got it

10 pounds. 19 liters. Vision Pro, MacBook Air, spare battery, and all the clothes and toiletries I need to travel indefinitely.

Still got it.

Neat HomePod Update

The latest batch of 17.3 updates appear to have nuked all my HomePods. Very neat.

Trying VS Code's Terminal Loader instead of foreman or overmind

I did a video about debugging Rails in Visual Studio Code a couple years ago that showed off how to use the remote interface of the debug gem with Rails 7's Procfile-based bin/dev workflow. Using foreman or overmind and the remote debugger interface is fine but it's honestly no replacement for the developer experience of running binding.irb directly against a dedicated terminal running nothing other than rails server.

So I decided to give this Terminal Loader extension a try to see if I could have my cake and eat it too: a one-shot way to run all of my development servers across multiple terminals. The verdict? It works!

  1. Install the extension
  2. Run the command TLoader: Load Terminals (via Command-Shift-P) once, which will:
    • Launch a couple dummy terminals with split-views, which you can feel free to kill manually
    • Create a workspaceConfiguration/LoadTerminal.json, which you can (and should, IMO) add to .gitignore
  3. Edit the LoadTerminal.json file to specify which terminal groups you want to open, how many columns per group, and the commands to run for each one

This is my config for a straightforward Rails 7 app that runs the Rails server, the tailwind CLI, a Rails console, and Solid Queue. Because I don't typically need to interact with tailwind or my queue daemon, I relegated those to a shared terminal group. And while I didn't have need for it in this case, I appreciate that the extension allows you to set a different working directory for each terminal, which will be a huge boon to my projects that embed sub-libraries and example apps.

Here's my first crack at a LoadTerminal.json for this project:

{
  "version": "1.2.1",
  "groups": [
    {
      "name": "Rails Server",
      "description": "Rails Server",
      "enabled": true,
      "terminals": [
        {
          "name": "server",
          "path": ".",
          "cmd": [
            "env RUBY_DEBUG_OPEN=true bin/rails server -p 3000"
          ],
          "num": 0
        }
      ]
    },
    {
      "name": "Rails Console",
      "description": "Rails Console",
      "enabled": true,
      "terminals": [
        {
          "name": "console",
          "path": ".",
          "cmd": [
            "bin/rails console"
          ],
          "num": 0
        }
      ]
    },
    {
      "name": "Other",
      "description": "Tailwind / Queue",
      "enabled": true,
      "terminals": [
        {
          "name": "tailwind",
          "path": ".",
          "cmd": [
            "bin/rails tailwindcss:watch"
          ],
          "num": 0
        },
        {
          "name": "queue",
          "path": ".",
          "cmd": [
            "bin/rake solid_queue:start"
          ],
          "num": 0
        }
      ]
    }
  ]
}

Seems to work fine! Nice change of pace not having to juggle virtual-terminals-within-an-electron-wrapper-within-a-terminal anymore.

What if I replaced myself with a chatbot?

Potential preview of coming attractions.

The entire reason I started blogging was to avoid repeating myself to people, so the prospect of uploading a corpus of hundreds of thousands of words I've written and hundreds of open source repositories I've created to build a Searls-flavored ChatGPT was immediately attractive.

Unfortunately, it still dishes takes I disagree with too often for me to turn it on publicly. Unclear whether this custom GPT feature represents a very thin candy shell with a lot of ego projection and wish-casting to make it seem more "real".

Filtering iCloud Shared Photo Library by Contributor

Since its release last year, how to filter the photos in our shared library to only show the photos I contributed has eluded me. Individual photo metadata shows who contributed a photo (and in the case of duplicates, multiple people might have contributed the same photo), but there was no way to view one's contributions in bulk.

After a few months of latent frustration, I figured out a way!

In the search bar, enter the e-mail address of the contributor's Apple ID and you should see a auto-suggestion like "👥 Shared by person@example.com".

If you're on macOS and you want to create an album of just these photos, you can create a smart album by selecting "Text" as your criteria, "is" as your condition, and the e-mail address (e.g. "person@example.com") as the text, and the album will include the same set of photos.

Nifty!

Return of the Swipe!

watchOS 10 removed one of my favorite Apple Watch features, swapping the active watch face by swiping from left or right. Well, it's back by popular demand in watchOS 10.2, but it's hidden behind this setting.

Settings ➡ Clock ➡ Swipe to Switch Watch Face

Trimming the Tree

You know what's easier than hanging lights on a tree? Hanging a picture of a tree that embeds battery-powered lights.

Conference Speaking Prevention Hotline

I realize that people find public speaking to be extremely scary, but I didn't realize it was THIS bad.

Paywall Logic

Is this a preview of one of the puzzles included in my subscription? Is this a Wordle? Am I in a Wordle?

Will paying yearly save me from having to do math?

Quest Complete

I just received this email from my ENT's second-rate patient portal. Apparently they thought it made sense to treat appointments like quests to be completed? If I go often enough will I start earning achievements?

Staples is getting thirsty

Earlier this year when Amazon announced Staples stores would start accepting returns, I figured Staples was trying to increase foot traffic to its failing retail stores. I did not expect that they would be so thirsty that they'd pay customers $10 to do so.

I'm sure they'll make it up in volume.

On-site in Louisville

Just got back from a lovely in-person meeting with my marketing colleagues in Louisville. Last night I said, "what a great on-site," before remembering the term is actually "off-site." But I contend that word no longer makes any sense when everyone is remote and there is no permanent office site! The off-site is as on-site as things get!

See you in St. Louis

In a brief one-day visit to St. Louis, I didn't get much chance to see the sights but I did have a pretty impressive array of craft cocktails

Siri's Announce Notifications detects image content in iOS 17.1

I didn't see this reported elsewhere, but it's pretty impressive that Siri is now doing realtime recognition of the contents photos (and in this case, animated GIFs!) when announcing messages to your AirPods or via CarPlay.

Genuinely impressive, even if it's still rudimentary at this point.

Using AI to dig up the lede that AI buried

A frustration I have with how articles are written in this era is that the lede is necessarily buried in order to keep time-on-page stats high enough for the content to perform as chum in the advertising market.

So I thought it'd be interesting to use the Copilot sidebar to summarize articles for me, rather than me waste my time scrolling down four paragraphs to figure out whatever the headline is teasing. A more general purpose prompt could probably get me the answer I really want when I see headlines like this: "is there actually any news here or is this just content for content's sake?"

Can't wait for the natural endgame:

  1. Publishers use AI to write articles designed to perform well as advertising inventory
  2. Advertisers use AI to place the best ads alongside that content
  3. Readers use AI to bypass all of the above and extract the small morsel of valuable information the article contains, if any

Great job, everyone.

Siri achieves general unintelligence

A lot of people knock Siri's implementation as more or less a dialog tree of magic phrases one can utter to achieve a discrete set of tasks, but one that I just can't get my head around is Announce Notifications. You can tell it to stop announcing, to start announcing, and to pause/mute them for an hour or for the day. But in my most recent thirty attempts, Siri only successfully muted announcements for an hour one time. Usually it mutes my phone or, more recently, does nothing at all.

Every time my ears are inundated with text messages and calendar events I don't care about, I try my damndest to remember what it is I said to get Siri to temporarily back off, but I'll be shocked if there's a consistently correct answer. Ask the same thing five times and get five different results.

Infrared saunas are something else

As a fan of saunas and steam rooms generally, I'd always kind of wanted one for use at home. Now that we have the space on our pool deck, I finally (ahem) took the plunge and bought one from SalusHeat (though our model is in cedar).

A bunch of people had told me that infrared saunas confer certain therapeutic medical benefits, but it all struck me as a typical Internet wellness marketing scam. In particular, most of what I read was about near infrared (the light closer to the visible spectrum), but—being a cheapskate—most of the saunas in my price range (including the one we bought) emit far infrared, which penetrates the body more deeply.

Anyway, now that we have had it for a couple days, I have two major takeaways:

  1. A max temp of 65ºC seemed really low compared to traditional saunas, but it turns out you're basically being microwaved, so even if the air temp isn't 95º, you'll sweat and feel as if it is

  2. Holy cow is this effective treating deep muscle pain and soreness. Between lifting weights and riding roller coasters, I occassionally find myself with pretty severe neck and back soreness, and nothing I try really helps much. 40 minutes in this thing punctuated by a couple cold plunges into my pool? Total game changer

Anyway, if you're sauna curious, I figured I'd feed Google something about these infrared ones because they appear to not be marketing bullshit. It may separately be the case that I'm gonna be absolutely riddled with cancer from whatever EMF this thing is emitting, but at least I won't be sore!

A tale of artificial intelligence in four acts

I was wondering if I should keep dragging my hacky little OpenAI API wrapper class from script to script, so:

  1. Search rubygems.org for "gpt"
  2. Find one called chat_gpt described as "This is OpenAI's ChatGPT API wrapper for Ruby"
  3. Click the "Homepage" link
  4. The code repository is archived and contains the disclaimer "NOTE this code was written by ChatGPT and may not work"

Great job, everyone.

Vision Pro has its work cut out for it

I'm as excited for using Vision Pro as a remote display for my Mac as anybody, but the fact that neither of my brand new, clean install Macs can initiate screen sharing reliably doesn't bode well that it'll somehow work better in a VR headset.

Love too set up a new iPhone