Dia

I tried Dia. It's a new browser from the Browser Company that's all about AI-assisted browsing.

Verdict: Hard no.

First up, this was the first time I've ever experienced a sign-up form that refused to accept an iCloud address. Rude.

Second, I just can't switch to a browser that misses all the native integrations which Safari enjoys. I can't touch my fingerprint to my keyboard to sign-in, or handoff to my phone, or auto-fill from Apple Passwords, use Apple Pay, that sort of thing.

Last, it's not clear what this browser adds on top of the ChatGPT for Mac app. I've already got Option+Space ready to invoke ChatGPT everywhere on my computer. If I need a YouTube video summarised, or a web search, or some code… ChatGPT is already available to me when and where I need it. I don't need a specialised web browser for this.

There must be a type of person who uses the browser for everything, from word processing to entertainment to email. I don't. I use apps like Pages, Apple TV (or the excellent Play by Marcos Tanaka), or Mail. I read my favourite websites through an RSS reader app. Going through my App Defaults, the only thing I use the browser for is Search, and Auphonic.

You know, while writing that previous sentence, I just wondered to myself: does Auphonic have a Mac app?1 My first inclination is to invoke ChatGPT right here in my Nova editor (where I'm writing this post) and ask. Opening a browser, navigating to the Auphonic website, and asking the Dia browser AI… it's just so many extra steps.


  1. No. ↩︎

Crossword x Daring Fireball

I've been reading John Gruber's work since I was in high school. I've listened to every Dithering episode to date. I once started a blog about inspired by Daring Fireball (it petered out, as blogs sometimes do).

And for the past five years, I've been recording Crossword with Jonathan Wold. It's a podcast about WordPress and the Open Web, with 15-minute (Dithering inspired) episodes.

We recently talked with John in a guest episode of Crossword, and he was kind enough to link to our show from his blog.

It's been a bit of a viral moment for us! My mind is a little blown that I am – right now – writing about my conversation with the creator of Markdown in Markdown.

That's one of the topics we cover in the episode, along with Substack, RSS, browsers, the open web, and where WordPress missed a trick.

Gruber joins the list of Open Web A-Listers we've spoken to on Crossword, including Aaron Gustafson, Peter Saint-Andre, and Ryan Singer.

I'm marking this one down as a career highlight. Huge thanks to Jonathan for his hard work editing the audio and transcript.

Discoverability vs. Monetisation

I don't speak much about WordPress on this blog, but it's a very important part of my life. I've been working in WordPress for nearly 20 years! I've contributed to core, run releases, spoken at WordCamps, built and sold businesses on WordPress.

I recently spoke about the WordPress Plugin repo at WordCamp Brisbane 2025. The session was recorded and is now available to watch on YouTube.

The WordPress ecosystem is very unique. In a world hyper-optimised to micro-transact, greedily extracting every last dollar, WordPress stands apart. It's version of an "app store", the plugin repo, is strictly open-source, and 100% free. You couldn't buy a plugin from WordPress.org if you tried.

That poses some interesting challenges for plugin authors who want to build a sustainable business. That's what my talk is about.

Pretty Good

I’m excited to announce Pretty Good Podcasts, a podcast network I’ve founded alongside Joshua and Jonathan Wold.

The network right now is no more than a website which lists our podcasts. Our goal is to grow the list, grow an audience, and cross promote our shows.

The website is pretty good, too. I hand coded it in HTML and CSS. No dependencies. No build. No AI. Took about 3 hours. Had a lot of fun doing it too!

The range of shows is somehow both diverse and also… of a kind. I don’t know quite how to describe that. They seem to fit a theme, but I’m not sure which one.

Friend of the Show has only one episode. Async has just published episode 100! Crossword has recorded 9 seasons over 5 years.

You can hear me on Crossword, Async, and Pirate School. If you already subscribe to one Pretty Good podcast, you might enjoy some of the others too.

On-Device AI Game Dialogue

Just a few quick thoughts on my first real experimentation with on-device Apple Intelligence.

My project started out as a game where you are imprisoned, and you need to convince the jail guard to free you! The guard's dialogue would be AI generated on the fly, as well as set of possible responses for the player to select from.

I felt that giving the player options to respond with, instead of freeform text, would make it more interesting and easier to play. I was right! It's way more fun. My guess is that it has something to do with cognitive overhead. You don't want to think too hard while playing a game.

In terms of Apple Intelligence, type specification is a killer feature. I don't think I'll ever be able to programatically communicate with an AI's API without it. I could do things like this:

@Generable
struct Reply: Hashable, Equatable {
	@Guide(description: "A short description of the disposition with which the reply is given.")
	let mood: Mood

	@Guide(description: "The spoken reply.")
	let dialog: String

	@Guide(description: "The person replying.")
	var speaker: Speaker
}

And the response would be in exactly that format. Note that Mood and Speaker are enums with a predefined set of possible values.

In terms of speed, it was a little slower than I had hoped. But then, I was only running it in the simulator, so I can't be sure. Also I'm doing a lot of work, and I'm sure some of it can be optimised, or even pre-loaded. The time it takes it about on par with a network request to ChatGPT though.

I frequently hit a "sensitive content" error. SensitiveContentSettings: Sanitizer model found unsafe content in value. The error doesn't really give me a lot to go on, and in the end I figured that it must be related to the player being in prison or something. So I changed it to a generic fantasy setting, and prompted the dialogue to be in "ye olde English".

And that gave me another sporadic error response. Unsupported language pl detected. (sometimes other languages). If I removed the silly old English, this resolved itself.

A screen capture of an AI game dialog on iOS.

The "game" part didn't really work because the AI wasn't able to drive the conversation to a natural conclusion. If I wanted to spend more time on it, I'd have multiple different prompts, or prompt variations. The prompt would change depending on mood, and conversation length, to help find a natural ending. One prompt for whatever success looks like: receiving the quest or learning the information. If the NPC becomes angry, or the conversation has lasted too long, a prompt for wrapping the conversation up saying goodbye.

If you'd like to see the project code, let me know, I'm happy to share.

Family Apocrypha

I've been working on some family genealogy, tracing back my maternal grandfather's line. There's quite a mystery there!1

Ronald Fabri's Baptism record.

Ronald Fabri's Baptism record from Alexandria, Egypt.

The best part of family research is talking to family about all the old family stories. They're unlikely, maybe even impossible tales, but surely some parts must be true!

Here are two of my favourites.

Budelli

A Fabri of old went gambling one night in Alexandria, and he won big! He on his way back home when he was mugged by some Arabs. They stabbed him many times, took his money, and left him for dead on the street.

But this Fabri was strong. He got up, and discovered that he'd been stabbed him so many times that his budelli (guts) were falling out! He held his budelli in his hands and walked to the hospital. They attempted to operate on him, but it wasn't looking good. The hospital staff found him dead the next day, with his cot's cast iron rails twisted around himself. The pain was so bad he had bent the rails.

La Pipa

This story comes from Edwin. The Bonnicis (my Nonno's mother's family) were ship-makers in Malta. At some point, they decided to leave Malta. They built their own ship and sailed to Alexandria. Their captain was Giuseppe Bonnici, who apparently had a tail.

One night, Giuseppe docked the boat, and went out all night to a party. It was raucous and loud, and in the chaos he left his pipe on the mantlepiece. The next day he went to retrieve it, and the whole place was boarded up. Cobwebs! He broke in, and found the pipe precisely where he had left it.


  1. We're Italians. We speak Italian, we eat Italian, my grandfather and his brother both married Italian wives. My Nonno's DNA is 71% Italian! The Fabris came to Australia from Venice, via Alexandria. Or so always thought. As it turns out, baptism records, marriage certificates, and burial records, always list our nationality as Maltese, and while we were in Egypt, we married Maltese wives. What! And how!? Further to that, we were in Alexandria for at least seven generations! And in every generation, our family is listed as "Fabri (Maltese)". Now we're trying to figure out how far back it goes (we're currently stuck at 1823), and whether there truly is, at some point in history, a migration from Venice to Alexandria. ↩︎

Higher Order

Bloom's Taxonomy is a mainstay in education circles. It provides a structure for thinking about cognition, and how we learn. Basically, we structure knowledge by refining information through a process. This starts with lower-order thinking, and moves through to higher-order thinking skills.

Wait! Forget Bloom for a moment. Those two concepts, let's focus there:

  1. Lower Order Thinking Skills (LOTS)
  2. Higher Order Thinking Skills (HOTS)

Understanding what these are is absolutely essential in an world where LLMs are at our fingertips.

Especially since MIT has noticed that LLMs have been turning people into sheep:

The LLM undeniably reduced the friction involved in answering participants' questions compared to the Search Engine. However, this convenience came at a cognitive cost, diminishing users' inclination to critically evaluate the LLM's output or ”opinions” (probabilistic answers based on the training datasets). This highlights a concerning evolution of the 'echo chamber' effect: rather than disappearing, it has adapted to shape user exposure through algorithmically curated content.
Kosmyna et al., Your Brain on ChatGPT: Accumulation of Cognitive Debt when Using an AI Assistant for Essay Writing Task

(Based on my subjective experience with ChatGPT, the echo chamber effect is further amplified by the "memory" feature.)

So what is lower order and higher order thinking? Let's return to Bloom's Taxonomy. This is typically presented as a pyramid, to represent the fact that each level of thinking skills is built upon the one below it.

HOTS        *        Creating
  ↓        ***       Evaluating
          *****      Analyzing
         *******     Applying
  ↑     *********    Understanding
LOTS   ***********   Remembering

It's a simple framework. We build knowledge by remembering information, then understanding it. In order to master that knowledge, we must apply it, analyse it, evaluate it, and ultimately, create something new with it.

Those higher order thinking skills are absolutely essential to critical thinking, problem solving, and innovating. Cognitive fitness requires regular training. If we get in the habit of using LLMs to do the hard thinking for us, we'll naturally fall out of practice! It's a terrifying, but very real, possibility!

LLMs are helpful for practicing our lower order thinking. Using ChatGPT to practice a language, recall key facts, or explain a new idea can be incredibly effective. However, we should be very mindful and careful to structure our prompts to target lower order thinking.

Get excited! Higher order thinking isn't a chore that you want to farm off to the machines! it's what makes us human. And if we can use LLMs to help reduce cognitive load for lower order thinking tasks, we'll have more in the tank for higher order thinking.

Tonic

Ugh. Facebook.

There's a lot of us out there. Those strange, backward people who refuse to use Facebook or Instagram. Ads? algorithms? influencers!? ick!

Unfortunately, those of us who prefer to stay signed-out of such social media platforms often find ourselves attempting to access a business Facebook page, or some Instagram post that a well-intentioned friend found amusing. In such cases, we're bombarded by nagging login prompts, blocking the content and barring our way.

As it says in the scriptures:

Better to dwell in the wilderness than with a quarrelsome and nagging website.
— Broverbs 21:19
A nagging app is like the dripping of a leaky roof in a rainstorm.
— Broverbs 27:15

So, I built a free Safari extension to help Facebook and Instagram find some chill.

Tonic hides all login popups and nags from Facebook and Instagram. It let's you see the content, without the pestering attempts to produce a new account sign-up.

Tonic is MacOS only for now. It's mostly working on iOS too (there's some lingering difficulty with getting Instagram to play nicely), so let me know if that would be useful to you.

If you find Tonic helpful, please share it on, and leave an App Store review.

Download Tonic free on the Mac App Store

Prompt

I believe AI is a multiplier. AI tools multiply:

  • The quality of the work
  • The speed at which the work can be done
  • The competency of the operator

But! You can only pick two.


Speed + Quality

If you are already very competent at producing the work on your own, you can leverage AI to increase the speed of your work while maintaining a high standard of quality. It won't make you any better at what you do, but it will reduce the time you spend doing it.

Speed + Competency

You can use AI to quickly spin up a prototype version of the work. The results will be messy, but if you pay attention you might just pick up a thing or two about how the work gets done.

Quality + Competency

You can add AI steps to your workflow that will increase the quality of your work. You can learn from what the AI produces so that, in time, you'll get better at producing the work yourself.


Your choice will be reflected in your prompt.

For Speed + Quality use "for me" language. Command an action, usually a starting point request. This sounds like:

Scaffold a [work].
Suggest an outline for [work].
Setup a boilerplate [work].

For Speed + Competency use "together" language. Ask for a complete solution, along with the explanation. This sounds like:

Let's create a [work] together, step by step.
How can we fix [work]?
What's the best way for us to create a [work]?

For Quality + Competency use "my" language. Ask for suggested edits or changes, explicitly requesting them as dot points. This sounds like:

Does my [work] match the requirements?
Suggest changes to my [work].
How could I improve my [work]?

Consider carefully the kind of work you're creating, and why you're creating it. Are you trying to become a better writer? coder? thinker? Maybe you're just trying to quickly prove an idea, or hoping to get the work done faster. Once you know, choose an approach, and prompt accordingly.

Non-Standard

Pursuant to my previous post regarding the en dash (wherein I beseech readers to consider British style selections for the dash parenthetical), I further propose the adoption of a little non-standard grammar to more plainly distinguish human writing from that which was contrived by large language models.

I'm not suggesting we simply make up new rules! However, we might consider leaning a little on historical precedent.

I've been reading Sense and Sensibility, where I've become smitten by Austen's use of run-on sentences which employ a lowercase letter after a terminal punctuation mark. You'll often find this follows a mid-sentence interrogative. "Would it be distracting? or merely a charming affectation?" Sometimes, after a mid-sentence exclamation. "Distracting? certainly not! if anything, it's more conversational."

Please don't mistake this as a step in the direction of sam altman's all-lowercase tweet style. Nor need we go so far as Laurence Sterne's exhausting run-on sentences ; full of spaced semicolons ; like an ADHD child with a sugar high talking about dinosaurs ; have you ever heard of a Megalodon?

This 19th century callback might just serve as a quiet reminder that there are still pockets of the internet which are written by real people. Who doesn't love a little "non-standard" literary disobedience, anyway? nothing wrong with bending a few rules.