Home

Why this blog exists

Most of what I learn does not deserve a chapter. A compiler flag that finally explained a warning, a Rust lifetime that took an afternoon to understand, a SwiftUI layout that behaves differently on an iPad — each is a paragraph, maybe two. Writing a book around them would be dishonest padding.

So this is where those go. The books stay where they are, for material that earns a table of contents. Everything else lands here, short and dated.

What to expect

Posts about Swift and SwiftUI, Rust, and the occasional note about building this site. No schedule — I write one when there is something worth writing down, and nothing when there isn’t.

Code appears when the code is the point:

extension Duration {
    /// A duration reads better in tests than a bare number of nanoseconds.
    static func frames(_ count: Int, at rate: Int = 60) -> Duration {
        .seconds(Double(count) / Double(rate))
    }
}

Everything on this page is written in Markdown, so a post is one file with a title, a date, and the text — the same way the book chapters work, minus the chapter numbering.