Thanks for reading my newsletter ❤️. This edition was delivered on Monday, April 21, 2025.

Wednesday, April 23, 2025

Running An LLM Locally

When I get home I'd like to do some experimentation with an LLM running locally on my Mac to query all of my blog posts.

I can use something like Ollarma to spin up Gemma 3 and then send HTTP requests to it via TypeScript.

So load all the markdown files like this

import fg from "fast-glob";
import fs from "fs/promises";
import path from "path";

export async function loadMarkdownFiles(folder: string) {
  const files = await fg("**/*.md", { cwd: folder, absolute: true });
  const posts: { filename: string; content: string }[] = [];

  for (const file of files) {
    const content = await fs.readFile(file, "utf8");
    posts.push({ filename: path.basename(file), content });
  }

  return posts;
}

and have an HTTP client

import axios from 'axios';

export async function askGemma(prompt: string): Promise<string> {
  const response = await axios.post('http://localhost:11434/api/generate', {
    model: 'gemma3:1b',
    prompt,
    stream: false,
  });

  return response.data.response;
}

and then prompt the LLM like this

import { loadMarkdownFiles } from "./blog-loader";
import { askGemma } from "./ollama-client";

const folder = `${process.env.HOME}/Desktop/notes`;

async function main() {
  const posts = await loadMarkdownFiles(folder);
  const combinedText = posts.map(p => p.content).join("\n\n");

  const question = "What are the main themes across my blog posts?";
  const prompt = `${combinedText}\n\nAnswer the question: ${question}`;

  const answer = await askGemma(prompt);
  console.log("🤖 Gemma says:\n", answer);
}

main();

It seems simple enough. Not sure how much value I get out of being able to query all of my blog posts but it's an interesting experiment.

Monday, April 21, 2025

Lotso#reddit.com

There is a fascination in China with Lotso the strawberry bear. He's the villain in Toy Story 3 yet you see him seemingly everywhere here. In department stores there's whole popup sections selling Lotso's.

Tuesday, April 22, 2025

China Randomly

Due to a family emergency I've been in China for the past week supporting Emma with her mum and dad.

I landed in Beijing Sunday night on the 13th of April and was there for 6 nights.

We decided on the way home to treat ourselves and spend a couple of nights in Hong Kong to break up the flight. We had 2 nights there.

Whilst this wasn't a holiday we did a couple of nice things in Beijing including: visiting the Summer Palace, shopping in Wangfujing, eating Peking duck and various local Beijing dishes.

I was also able to meet Emma's grandma for the first time which was very special.

In Hong Kong we had an awesome dim sum dinner and we went to Disneyland.

Here are a collection of photos from the week.

Wednesday, April 16, 2025

Helen Garner#overcast.fm

This was a terrific listen and brought back some great memories from junior footy.

Helen Garner is clearly very clever and has some other interesting books that I might check out. I love how her other books are also Melbourne based.

Sticky Fingers#en.wikipedia.org

I've been listening to this album a lot in the past few weeks. I really love Moonlight Mile after hearing it at the end of a Sopranos episode. I'm also enjoying Bob Dylan's first album at the moment based on watching A Complete Unknown.

Ted Lasso#tv.apple.com

At long last I'm watching Ted Lasso and it's excellent as expected. Very much up my alley.

Tuesday, April 15, 2025

ChatGPT History#daringfireball.net

This was something I just had to try

I’ve been using ChatGPT for a while now. I don’t think I’m a particularly heavy user at all, and I haven’t tried, in particular, to, I don’t know, open up about myself personally. But I ask it what I want to know. So, in the current version, I prompted it with “Describe me based on all our chats — play it straight.” Here’s its response:

So I also did the prompt

Describe me based on all our chats — play it straight.

and got back

Alright, here’s a straight-up portrait of you based on everything we've talked about:

You're a capable and detail-oriented developer working across React, React Native, and NestJS ecosystems. You’re hands-on with TypeScript and comfortable diving into both frontend UI/UX challenges and backend logic. You handle a lot of practical, real-world problems—QR scanning, form validation, query handling, dependency issues—often with attention to edge cases and good structure.

You care about clean, functional design (Tailwind, stepper UIs, filters, etc.) and thoughtful data flow—whether it's state management, gRPC mappings, or transforming input for better UX. You’re also not afraid to get under the hood when things go sideways (dependency conflicts, test issues, etc.), and you seem to value clear, maintainable code over clever one-liners.

On a personal side, you’re grounded and seem like someone who plans thoughtfully (e.g., your wife’s birthday trip), has a good sense of responsibility, and balances work and life with intention. You’ve got a bit of curiosity, a dash of playfulness, and you like things to “just work.”

That’s the read. Want me to go deeper or flip it into another tone—funny, poetic, dramatic, etc.?

Monday, April 14, 2025

Rory#masters.com

To quote Makybe Diva's winning commentary:

a champion becomes a legend

Rory goes down in history as a legend of the game. A grand slam of majors. To fight back from not playing that well for multiple years. The US Open last year. The British Open in 2022. So much heart break.

I've linked here Rory's third round which was absolutely fantastic. The eagle on 15 was awesome.

The guy deserves a Masters and he's done it.

Blue Prince#blueprincegame.com

This seems like a really intriguing game. It's not on the Switch yet but surely there will be a port.

Best Programmers#endler.dev

I've read lots of blog posts like this but this one is very extensive.

Some paragraphs that stick out to me:

The best devs I know read a lot of code and they are not afraid to touch it. They never say “that’s not for me” or “I can’t help you here.” Instead, they just start and learn. Code is just code. They can just pick up any skill that is required with time and effort. Before you know it, they become the go-to person in the team for whatever they touched. Mostly because they were the only ones who were not afraid to touch it in the first place.

A related point. Great engineers are in high demand and are always busy, but they always try to help. That’s because they are naturally curious and their supportive mind is what made them great engineers in the first place. It’s a sheer joy to have them on your team, because they are problem solvers.

To be one of the best, you need an incredible amount of patience, focus, and dedication. You can’t afford to get distracted easily if you want to solve hard problems. You have to return to the keyboard to get over it. You have to put in the work to push a project over the finishing line. And if you can do so while not being an arrogant prick, that’s even better. That’s what separates the best from the rest.

Again, resist the urge to guess. Ask questions, read the reference, use a debugger, be thorough. Do what it takes to get the answer.

Music DNA#pudding.cool

Pudding Cool always delivers. Sampling and where artists get inspiration for certain melodies is fascinating to me.

Software Engineer Insanity#0x1.pt

Being a software engineer is tough. You need to know a couple of programming languages and tools right from the get-go. But that won’t cut it. Companies expect you to know whatever particular framework they use. That might be Rails or Django or Laravel or something else. You’ll also need CSS. It’ll take you a lifetime to learn — and you still won’t know why the layout’s breaking — but knowing just enough to get by is feasible.

And then this...

Oh and, turns out we were just getting started.

Back when dinosaurs roamed the earth there was a type of professional called a System Administrator. Their whole job was to make sure that your backend was working nicely. They handled infrastructure changes, upgrading the database, system upgrades, keeping the daemon running, restarts, everything. Then came DevOps. Some cash-strapped company somewhere decided that now all of this would be handled by the engineers and everyone agreed. Now you need to learn Docker. Oh, your whole app is just a single statically linked binary and you don’t need Docker? Learn Ansible and I hope you have fun figuring out the options you need to pass to SystemD.

And you’re not even halfway there. Now you gotta learn AWS. You won’t be using the GUI to configure your infrastructure like a peasant so you better learn Terraform or Pulumi or whatever.

Insert Kubernetes here.

Software gets more complicated. All of this complexity is there for a reason. But what happened to specializing? When a house is being built, tons of people are involved: architects, civil engineers, plumbers, electricians, bricklayers, interior designers, roofers, surveyors, pavers, you name it. You don’t expect a single person, or even a whole single company, to be able to do all of those.

I know a lot of frontend engineers that strongly believe this.