RSSAmplifier

Blog

Chris Eidhof

Personal Blog

chris.eidhof.nlRSS feed ↗20 posts

Latest posts

Learning in the age of LLMs

I’ve been working on an experimental project with a friend, a static analyzer. This project has been in my head for years now, but it’s quite ambitious and in my estimate, it’d take at least a few months before you’d have something decent. My friend used AI to build it in a few days. He used a very sophisticated workflow (using beads_rust ) so that multiple agents could work on tickets at the same…

Deep Understanding while using LLMs

In our recent SwiftUI workshops, we have told people at the start to not use an LLM during the workshop. We think LLMs are great and help us to get to the results we want much quicker — for some tasks we easily get a ten times speedup. We tell the workshop attendees that they could solve all exercises within twenty minutes using an LLM, rather than two days of working through it by hand. The goal…

FormatStyle Guide

I just launched the FormatStyle Guide , a new project that explores Swift Foundation’s FormatStyle APIs in the browser via WebAssembly. Similar in spirit to the SwiftUI Field Guide , I always wanted a quick visual overview of the available APIs. Unlike the SwiftUI Field Guide, I didn’t want to reimplement all of the APIs in TypeScript. However, now that Wasm support is officially part of Swift I…

Alt Tech Talks

In 2013, I got rejected for Apple’s “Tech Talks”. At the time, with objc.io doing well, I assumed I would have been accepted. I jumped on my bike, cycled to the nearest cinema, and walked in asking what it would cost to rent the place for a day. They said €3,000. I realised I could probably get sponsors, and even if not, I could afford to lose it. So I said yes. I called Microsoft and asked them…

Building Pancake

In January, Nathan and I built a Mac app over the course of a month. Last year, I set the goal to collaborate more with other people in 2026, and Nathan was the first person I thought of. We’ve been doing SwiftUI workshops together throughout last year, and I really enjoy working with him. This post is a short story of what we’ve built and how we did it. Our goal was to build and ship an app in a…

Self-Forking Agents

Over the last weeks, I’ve been experimenting with building agents. An agent in itself is a simple concept. It’s a loop where you give it input, and then the LLM responds. Crucially, you can tell the LLM to use specific tools that you describe, and the LLM’s response can include calls to those tools. There is an inner loop where, before accepting the next user input, you process all the tool calls…

Integrating Dependencies into LLM-Assisted Projects

The other week I met Orta again. When talking about LLM-assisted coding, we also discussed dependencies. He told me about an approach he’s been taking: he just integrates dependencies into his code by literally pasting in the files and then adjusting them as needed. He also recommends this way of integrating for one of his projects. To me, it almost feels like “melting” the dependency into the…

Food Assistant

This month, I want to focus on using LLMs more, and AI in general, so I’m working on a bunch of projects. I’ve been using Claude (and more recently Codex) over the last year or so, but now I’m actually using them very intentionally with the goal of understanding how to work with them better and to understand what the possibilities are. This morning I built a small custom agent. I used the new…

2025

This has been a very eventful year for me personally. While I don’t want to talk publicly about all the bad things that happened, there’s been enough for a year. Yet, this is a hopeful post. I’m doing well given the circumstances. I learned a whole bunch of new things about myself. I found much more compassion for both myself and for others. I was able to show up in ways I couldn’t imagine before.…

Task Identity

When you write SwiftUI views, one of the big advantages over UIKit is that SwiftUI performs automatic dependency tracking. Whenever your model invalidates or one of your view’s properties change, your view is re-rendered. Consider the following view that loads an image. It runs the image loading code in a task . The task will run the first time the view appears, and it seems to work: struct…

LLMs for "Real Projects"

When I have an LLM assistant write prototypes in a language that I don’t know, my prompts are high-level and focused on features, not implementation. For simple projects, often a one-shot approach works. For example, I’ll say: take these notes from my therapist and help me build a simple react app that asks me those questions. For the project I was building above, I didn’t really care about the…

Agentic Coding

I teach SwiftUI for a living. Through our workshops , books, and videos we try to help people build a mental model of how SwiftUI works as well as show some of the details. I really, really enjoy doing that and have built a successful lifestyle business doing just that. Note: this post was written by me, not by an LLM. I don’t feel comfortable at all letting it do that. To me, the quality of the…

Presentation: Attribute Graph

I gave a talk about my understanding of the Attribute Graph. I created a presentation page that contains the video, an edited transcript and some references. It was really fun creating the talk: I used my “record typing” tool to automate the typing and animate the graph, preview and other bits. The graphs are draw in SwiftUI, but the layout is done in GraphViz.

SwiftUI View Model Ownership

When we cover SwiftUI’s state system in our workshops , we often get asked: How can I set up my view model in a view? There’s a bit more to this question, so let’s try to spell out the requirements: We want our view to create a view model and maintain ownership: when the view goes away, the object should go away. We want our view model to be an object (not a struct) and the object should use the…

SwiftUI Alignment Guide Bug

For the last few years SwiftUI’s alignment guides have been broken in combination with if -statements. Here’s a small example: struct ContentView: View { var value = true var body: some View { Color.green .frame(width: 100, height: 100) .overlay(alignment: .topLeading) { if true { Circle() .alignmentGuide(.leading) { $0.width/2 } } } } } I expected the horizontal center of the circle to be aligned…

Bindings

In SwiftUI, there are two kinds of bindings. There are bindings created using keypaths, and then there are bindings created using Binding(get:set:) . These are not the same at all. For example, consider the following (contrived) view: struct ContentView: View { @State var value1 = false @State var value2 = false var body: some View { VStack { Toggle("Test", isOn: $value1) Nested(value2: $value2) }…

Why I Avoid Group

In our SwiftUI workshops , we often see people reaching for the Group view. There’s a lot of code out there that does this, and yet, I noticed myself avoiding Group , even though it can be pretty handy. In investigating, I realized that it’s not even Group that is the problem. It seems to be the meeting point of SwiftUI and UIKit. In my understanding, Group is just a way to get view builder…

SwiftUI Phase Animation "Bug"

I noticed that phase animators weren’t behaving as expected, and I initially assumed I’d found a bug in SwiftUI. It took me way too long to realize the problem here, that’s why I am writing this up. Spoiler alert: there is no bug . I am preparing a workshop on SwiftUI Animations (this is a follow-up to our regular SwiftUI Workshop ). As I went through the exercises, I created a very minimal shake…

Weeknotes № 52

Just to be consistent I’ll add the notes for this week as well. Mostly had family time and managed to put in a few longer but very cold bike rides. We took the train to The Netherlands, the bike rides here are cold as well. I rented a gravel bike which is really nice (even though the brakes don’t really work all that well, so I’ll bring my own bike next time). I’ve spent a bit of time on preparing…

2024 in Review

This was a fun and busy year that flew by. At a personal level, a lot has happened (the oldest started school, we went on a bicycle holiday, and I started therapy again.) Work-wise, the biggest thing is that I started a new company in addition to objc.io. This is the new home for our workshops as well as new projects. The first project under the new company is the SwiftUI Field Guide . This is a…