diff --git a/CLAUDE.md b/CLAUDE.md index f0fec31..ee76ad5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -5,20 +5,4 @@ If anything in this file conflicts with `AGENTS.md`, this file takes precedence. ## Writing -If you write or review prose for posts follow these rules: - -### Oxford comma - -Always use the Oxford comma: "music, surfing, and living." - -### Em dash - -No spaces around em dashes: "Her book—published in March—is excellent." - -### Attribution dash - -Use an en dash for attributions: "– Miles Davis" - -### Title case - -Post titles use title case. Capitalize nouns, verbs, adjectives, and adverbs. Lowercase articles, conjunctions, and short prepositions (a, an, the, and, but, or, for, in, of, on, to). Always capitalize the first and last word: "The Quiet Activism of Living Pleasantly" +When you write or review prose for posts, follow `STYLE.md`. diff --git a/STYLE.md b/STYLE.md new file mode 100644 index 0000000..a62a36c --- /dev/null +++ b/STYLE.md @@ -0,0 +1,114 @@ +# Style Guide + +How posts on michaelnisi.com are written: typography, voice, structure, and form. + +--- + +## Typography + +### Oxford comma + +Always use the Oxford comma: "music, surfing, and living." + +### Em dash + +No spaces around em dashes: "Her book—published in March—is excellent." + +### Apostrophes + +Use only curly apostrophes, never straight ones: "It’s the note you play afterwards." + +### Attribution dash + +Use an en dash for attributions: "– Miles Davis" + +### Title case + +Post titles use title case. Capitalize nouns, verbs, adjectives, and adverbs. Lowercase articles, conjunctions, and short prepositions (a, an, the, and, but, or, for, in, of, on, to). Always capitalize the first and last word: "The Quiet Activism of Living Pleasantly" + +## Voice + +- **First person, sparingly.** "I" appears when there is a personal stake—an anecdote, a recommendation, an opinion. Otherwise, the prose speaks directly to the reader as "you." +- **Calm and certain.** State things plainly. No hedging, no hype, no exclamation marks. "Constraint was never the enemy. It was always the condition." +- **Warm, not cute.** Humor is dry and understated: "This website is where I put things I feel like sharing—and occasionally embarrass myself." +- **Generous to others.** When quoting someone, credit them with an adjective or a clause that shows why they are worth reading: "Doug Gregor opens his brilliant Swift Craft 2025 talk…", "I’ve been appreciating Matteo Collina since early Node.js days." +- **Grounded in practice.** Abstract ideas are anchored in concrete experience: longboard surfing, jazz, Swift code, working with Claude. Craft, attention, and judgment are recurring themes. + +## Post Types + +### Quote + +The most common form. A blockquote followed by an attribution line, nothing else. + +```markdown +# The Quiet Activism of Living Pleasantly + +> Because think of the amazing people that you see every day. … + +– Jon Stewart to David Remnick at the [New Yorker festival](https://…) +``` + +### Quote With Commentary + +A blockquote followed by one or two sentences of context or response. The commentary names the author in prose and carries the link. + +```markdown +Lorin Hochstein relaxes the AI conversation by [adding perspective](https://…). +``` + +Keep it short. The quote does the work; the commentary frames it, often with a light twist: "Fittingly, the warning reads like it could have been written by a model." + +### Essay + +Longer pieces (300–850 words) built on a single idea. + +- **Open with an epigraph**—a blockquote and an en-dash attribution. +- **Reframe the epigraph** in the first paragraph, then move to the present: "Gide wrote that a century ago, but it lands differently now." +- **One idea per paragraph.** Paragraphs are short. Single-sentence paragraphs mark turns: "The constraint hasn’t disappeared. It’s migrated." +- **Carry a metaphor through.** Surfing, music, or another physical practice is developed across paragraphs, not dropped in once. +- **End short.** The last line is brief, often a fragment, and echoes the title or the opening: "Just scale." "Everything depends on how you keep moving." "The window narrows because no one noticed it was moving." + +### Code + +Code can be the whole post. A fenced block with a language tag, followed by a single sentence explaining why it matters, with a link to the source. + +## Sentences + +- **Vary rhythm.** Follow a long, layered sentence with a short one. Fragments are welcome: "Infinite scroll." "Clean. No judgment in it." +- **Use contrast.** Many key lines turn on a pair: "Not wrong. Not bad. Just… contained." "They’re brilliant at structure and terrible at continuity." "Abundance promised freedom and delivered paralysis." +- **Use em dashes** for asides and pivots—they are a signature of this site. +- **Use triplets.** Lists of three give a line its cadence: "music, surfing, and living." +- **Prefer plain words.** Say "use," not "leverage." Technical terms are fine when precise. + +## Titles + +- Title case, per Typography. +- Short and declarative, or a phrase lifted from the quote: "Ready or Not," "LLMs Are Savants," "Constraint Was Never the Enemy." +- "On …" is used for reflective pieces: "On the Next Move," "On Progressive Disclosure in Swift." +- Questions are rare but allowed: "What Drives You Nuts?" + +## Formatting + +- **One `#` heading per post**, the title. Essays run without subheadings. +- **Links go inline on meaningful words**—"[talk]", "[adding perspective]", a publication name—not on "click here." A bare "[here]" is acceptable in a short commentary line. +- **Italics** for book and work titles (*Tractatus Logico-Philosophicus*, *Universal Principles of Design*) and for occasional emphasis on a single word (*make*, *this*). +- **Quotes in their original language** are fine; give a translation or paraphrase right after: "Art is born of constraints, lives through struggle, dies of liberty." +- **Bold** is not used in posts. + +## Attribution + +- Standalone attribution: the name on its own line, after an en dash. Add context after a comma when useful. + - `– Miles Davis` + - `– Ludwig Wittgenstein, *Tractatus Logico-Philosophicus*` + - `– Liane Finck, who drew the cover of the August 2025 issue of [The New York Review of Books](https://…)` +- In-prose attribution: name the person, their role if helpful, and link the source: "Mustafa Suleyman, the British AI entrepreneur who runs Microsoft AI, [cautions](https://…) against…" + +## Checklist + +- [ ] Title in title case +- [ ] Oxford commas +- [ ] Em dashes without spaces +- [ ] Curly apostrophes only +- [ ] En dash for attributions +- [ ] Source linked +- [ ] Last line earns its place diff --git a/Sources/App/Partials/now.md b/Sources/App/Partials/now.md index 0a26801..76fa13d 100644 --- a/Sources/App/Partials/now.md +++ b/Sources/App/Partials/now.md @@ -2,6 +2,6 @@ *Updated August 1st, 2026, from Stenbjerg, Denmark.* -Endless autumn, that's the summer in Thy, and I love every minute of it. Returning to a place that feels like home has a soothing kind of beauty. Meeting old and new friends, experiencing familiar places from a matured perspective. +Endless autumn, that’s the summer in Thy, and I love every minute of it. Returning to a place that feels like home has a soothing kind of beauty. Meeting old and new friends, experiencing familiar places from a matured perspective. I spend my days working at [Block65](https://block65.dk/) in Hanstholm. The combination of gym, co-working space, and community—500m from two of my favorite surf spots, Fakir and Fisken—could not be more inspiring. diff --git a/Sources/App/Partials/posts/2025-10-03-brain.md b/Sources/App/Partials/posts/2025-10-03-brain.md index fc6f407..22c1f21 100644 --- a/Sources/App/Partials/posts/2025-10-03-brain.md +++ b/Sources/App/Partials/posts/2025-10-03-brain.md @@ -1,6 +1,6 @@ # Brain Rot Dot Com -Pay attention to [The Sirens' Call](https://sirenscallbook.com) by Chris Hayes. +Pay attention to [The Sirens’ Call](https://sirenscallbook.com) by Chris Hayes. ![image_column_one](https://res.cloudinary.com/duiiv2f8o/image/upload/ar_4:2,c_auto,g_north,w_1000/IMG_3915_ohupo4 "Example Image") diff --git a/Sources/App/Partials/posts/2025-10-09-swift.md b/Sources/App/Partials/posts/2025-10-09-swift.md index d37ae1b..3eb4ee7 100644 --- a/Sources/App/Partials/posts/2025-10-09-swift.md +++ b/Sources/App/Partials/posts/2025-10-09-swift.md @@ -30,4 +30,4 @@ struct Image { } ``` -By running async functions in the caller's execution context, concurrency is more approachable now with [Swift 6.2](https://www.swift.org/blog/swift-6.2-released/). +By running async functions in the caller’s execution context, concurrency is more approachable now with [Swift 6.2](https://www.swift.org/blog/swift-6.2-released/). diff --git a/Sources/App/Partials/posts/2025-11-09-activism.md b/Sources/App/Partials/posts/2025-11-09-activism.md index 2a2d521..9a68607 100644 --- a/Sources/App/Partials/posts/2025-11-09-activism.md +++ b/Sources/App/Partials/posts/2025-11-09-activism.md @@ -1,5 +1,5 @@ # The Quiet Activism of Living Pleasantly -> Because think of the amazing people that you see every day. Think of the quiet activism of living pleasantly. There's more good than bad. I always will believe that. I always will believe that the odds are in our favor. +> Because think of the amazing people that you see every day. Think of the quiet activism of living pleasantly. There’s more good than bad. I always will believe that. I always will believe that the odds are in our favor. – Jon Stewart to David Remnick at the [New Yorker festival](https://www.newyorker.com/video/watch/the-new-yorker-festival-jon-stewart-talks-with-david-remnick-2025-10-31) diff --git a/Sources/App/Partials/posts/2025-12-07-mistakes.md b/Sources/App/Partials/posts/2025-12-07-mistakes.md index bb0fa65..61e5d2a 100644 --- a/Sources/App/Partials/posts/2025-12-07-mistakes.md +++ b/Sources/App/Partials/posts/2025-12-07-mistakes.md @@ -1,6 +1,6 @@ # On the Next Move -> It's not the note you play that's the wrong note—it's the note you play afterwards that makes it right or wrong. +> It’s not the note you play that’s the wrong note—it’s the note you play afterwards that makes it right or wrong. – Miles Davis @@ -8,7 +8,7 @@ Herbie Hancock shares this [anecdote](https://youtu.be/C-GrRIgdmW8) In music, as in life, a single moment rarely defines anything. What matters is the movement that follows. A step that feels misplaced, a choice that seems off, a hesitation that interrupts the rhythm—none of these are final. Meaning is created in the continuation, in how you choose to respond to what just happened. What we call a “mistake” becomes part of the texture once we treat it as material rather than failure. -Longboard surfing works exactly the same way. You cross-step, but maybe you plant your foot a little too far inside, or the rail catches earlier than expected. The board wobbles. For a split second it feels wrong—but the wave hasn't judged you yet. What decides everything is what follows: how you adjust, how you shift your weight, how the line evolves. A misstep isn’t the problem; refusing to flow through it is. Good longboarding isn't about perfection—it's about recovering with style, using the unexpected to guide the next move. +Longboard surfing works exactly the same way. You cross-step, but maybe you plant your foot a little too far inside, or the rail catches earlier than expected. The board wobbles. For a split second it feels wrong—but the wave hasn’t judged you yet. What decides everything is what follows: how you adjust, how you shift your weight, how the line evolves. A misstep isn’t the problem; refusing to flow through it is. Good longboarding isn’t about perfection—it’s about recovering with style, using the unexpected to guide the next move. Life, like a wave, doesn’t freeze on your mistakes. It keeps unfolding, giving you the chance to respond, reinterpret, and turn tension into direction. The art lies in staying open enough to make the next move meaningful. A wrong step only becomes wrong if you stop. If you keep moving, it becomes part of the story, part of the rhythm, part of the line you’re drawing through the world. diff --git a/Sources/App/Partials/posts/2026-02-18-code.md b/Sources/App/Partials/posts/2026-02-18-code.md index 5c29dc3..dc79840 100644 --- a/Sources/App/Partials/posts/2026-02-18-code.md +++ b/Sources/App/Partials/posts/2026-02-18-code.md @@ -2,6 +2,6 @@ > a generation of developers skipping learning and just prompting AI, leaving us with critical systems nobody understands. -I've been appreciating Matteo Collina since early Node.js days, [here](https://adventures.nodeland.dev/archive/yes-learning-to-code-is-still-valuable/) he gives a cohesive summary of his recent thoughts about AI and software development. +I’ve been appreciating Matteo Collina since early Node.js days, [here](https://adventures.nodeland.dev/archive/yes-learning-to-code-is-still-valuable/) he gives a cohesive summary of his recent thoughts about AI and software development. -If you're making decisions about AI tooling in your organization, read this. I could not have said it any better. +If you’re making decisions about AI tooling in your organization, read this. I could not have said it any better. diff --git a/Sources/App/Partials/posts/2026-02-28-savants.md b/Sources/App/Partials/posts/2026-02-28-savants.md index a5571d3..59bf695 100644 --- a/Sources/App/Partials/posts/2026-02-28-savants.md +++ b/Sources/App/Partials/posts/2026-02-28-savants.md @@ -1,16 +1,16 @@ # LLMs Are Savants -> It's like having a savant colleague who can solve differential equations in their head but forgets where they parked their car. +> It’s like having a savant colleague who can solve differential equations in their head but forgets where they parked their car. – [Claude](https://claude.ai/) -I just watched Claude make the same mistake three times in five minutes. I was updating my /now page, mentioning that Xcode 26.3 finally made agentic coding possible. Claude "corrected" it to Xcode 16.3, assuming I'd made a typo. I fixed it back to 26.3. Claude apologized and changed it to 16.3 again. I explained that Apple switched to year-based versioning in 2026. Claude understood, fixed it back to 26.3, then immediately asked me what typo I'd introduced. +I just watched Claude make the same mistake three times in five minutes. I was updating my /now page, mentioning that Xcode 26.3 finally made agentic coding possible. Claude "corrected" it to Xcode 16.3, assuming I’d made a typo. I fixed it back to 26.3. Claude apologized and changed it to 16.3 again. I explained that Apple switched to year-based versioning in 2026. Claude understood, fixed it back to 26.3, then immediately asked me what typo I’d introduced. -The thing is, I don't care. While Claude was having this small cognitive crisis, it had already helped me implement a complete sitemap.xml endpoint with proper ETag caching, fix Makefile portability issues, and refine the prose on my now page. The version number confusion was annoying, but it didn't matter because Claude isn't my memory—it's my encyclopedic technical reference and code generator. +The thing is, I don’t care. While Claude was having this small cognitive crisis, it had already helped me implement a complete sitemap.xml endpoint with proper ETag caching, fix Makefile portability issues, and refine the prose on my now page. The version number confusion was annoying, but it didn’t matter because Claude isn’t my memory—it’s my encyclopedic technical reference and code generator. -This savant quality is precisely what makes LLMs so useful for coding. You don't need them to remember conversational context perfectly. You need them to generate correct Swift concurrency code, understand REST semantics, follow architectural patterns, and recall obscure API details. They're brilliant at structure and terrible at continuity. +This savant quality is precisely what makes LLMs so useful for coding. You don’t need them to remember conversational context perfectly. You need them to generate correct Swift concurrency code, understand REST semantics, follow architectural patterns, and recall obscure API details. They’re brilliant at structure and terrible at continuity. -The division of labor is clear: the human provides sanity, continuity, and judgment. The LLM provides encyclopedic technical knowledge and execution. It's a partnership where both parties contribute what they're actually good at. You stop expecting the AI to "understand" you and start treating it like what it is—a savant colleague who's invaluable despite (or because of) its limitations. +The division of labor is clear: the human provides sanity, continuity, and judgment. The LLM provides encyclopedic technical knowledge and execution. It’s a partnership where both parties contribute what they’re actually good at. You stop expecting the AI to "understand" you and start treating it like what it is—a savant colleague who’s invaluable despite (or because of) its limitations. -The future of coding isn't about AI replacing developers. It's about developers learning to work with savants. +The future of coding isn’t about AI replacing developers. It’s about developers learning to work with savants. diff --git a/Sources/App/Partials/posts/2026-03-08-ready.md b/Sources/App/Partials/posts/2026-03-08-ready.md index f5acd9f..91d9802 100644 --- a/Sources/App/Partials/posts/2026-03-08-ready.md +++ b/Sources/App/Partials/posts/2026-03-08-ready.md @@ -1,23 +1,23 @@ # Ready or Not -> Ready or not, here I come / you can't hide / gonna find you / and take it slowly / and make you want me +> Ready or not, here I come / you can’t hide / gonna find you / and take it slowly / and make you want me – Fugees -There's something the ocean teaches that no classroom can: you cannot negotiate with a wave. +There’s something the ocean teaches that no classroom can: you cannot negotiate with a wave. You can read it, anticipate it, position yourself for it—but you cannot rush it, and you cannot hold it back. The wave arrives on its own terms, shaped by storms thousands of miles away, by seafloor topography. Your job is simply to be ready when it comes. This is a different kind of patience than waiting. Waiting is passive—you sit somewhere and endure until time passes. What the water asks for is active stillness: fully present, reading the horizon, feeling the current, neither grasping nor checked out. The surfer who paddles frantically for every lump on the water catches nothing. The one who waits too long, always second-guessing, watches the best sets roll through unridden. The sweet spot is a state of relaxed readiness—attentive without tension. -Timing, when it comes, isn't really a decision you make. It's more like a recognition. The wave and the moment align, and something in your body knows before your mind does. You commit. That commitment—unhesitating, full—is what transforms a lump of water into a ride. +Timing, when it comes, isn’t really a decision you make. It’s more like a recognition. The wave and the moment align, and something in your body knows before your mind does. You commit. That commitment—unhesitating, full—is what transforms a lump of water into a ride. -Nobody talks about positioning. Because current and wind make it so hard to stay in the right place. You can do everything right—read the swell, time your paddle, stay present—and still find yourself twenty meters out of position because something invisible moved you there while you were waiting. You're never as fixed as you think you are. The ocean is moving you even when you're sitting still. +Nobody talks about positioning. Because current and wind make it so hard to stay in the right place. You can do everything right—read the swell, time your paddle, stay present—and still find yourself twenty meters out of position because something invisible moved you there while you were waiting. You’re never as fixed as you think you are. The ocean is moving you even when you’re sitting still. -Miss your positioning, watch it peel perfectly down the line—and you want it in a way that's almost painful. The wave doesn't need you. You need it. That longing is what sharpens your reading of the horizon, what gets you up before dawn, what keeps you honest. +Miss your positioning, watch it peel perfectly down the line—and you want it in a way that’s almost painful. The wave doesn’t need you. You need it. That longing is what sharpens your reading of the horizon, what gets you up before dawn, what keeps you honest. -And yet even desire and discipline and presence aren't enough to fully master this. The ocean doesn't know you're there. It's not testing you, not indifferent to you in any meaningful way—you're just not part of its calculation at all. A tiny human on a plank, recalibrating against forces that have been running since long before humans existed and will keep running long after. +And yet even desire and discipline and presence aren’t enough to fully master this. The ocean doesn’t know you’re there. It’s not testing you, not indifferent to you in any meaningful way—you’re just not part of its calculation at all. A tiny human on a plank, recalibrating against forces that have been running since long before humans existed and will keep running long after. -Being put in your place by something that doesn't even notice you—that's a very particular kind of humbling. Clean. No judgment in it. +Being put in your place by something that doesn’t even notice you—that’s a very particular kind of humbling. Clean. No judgment in it. Just scale. diff --git a/Sources/App/Partials/posts/2026-04-13-constraint.md b/Sources/App/Partials/posts/2026-04-13-constraint.md index 91b4fe0..d7622aa 100644 --- a/Sources/App/Partials/posts/2026-04-13-constraint.md +++ b/Sources/App/Partials/posts/2026-04-13-constraint.md @@ -1,6 +1,6 @@ # Constraint Was Never the Enemy -> L'art naît de contraintes, vit de luttes et meurt de liberté. +> L’art naît de contraintes, vit de luttes et meurt de liberté. – André Gide @@ -8,18 +8,18 @@ Art is born of constraints, lives through struggle, dies of liberty. Gide wrote The constraint used to be scarcity. You watched what was on. You read what was in reach. Access was limited, so curation happened by default—not because you were deliberate, but because you had no choice. Limited options forced you to choose carefully, to live with the choice, to make something of it. -Then came the streaming age. Ten thousand titles. Infinite scroll. The external constraint lifted, and what replaced it? An hour of scrolling to watch nothing. Abundance promised freedom and delivered paralysis. Netflix didn't give you more choices—it dissolved the pressure that made choosing meaningful. +Then came the streaming age. Ten thousand titles. Infinite scroll. The external constraint lifted, and what replaced it? An hour of scrolling to watch nothing. Abundance promised freedom and delivered paralysis. Netflix didn’t give you more choices—it dissolved the pressure that made choosing meaningful. Now the same thing is happening one level up, on the side of creation. -AI removes the friction from making. You can generate text, images, music, and code as fast as you can type a prompt. The blank canvas problem has been solved in the most literal sense: the canvas fills itself. What's left is a different paralysis—not the inability to choose what to watch, but the inability to choose what to *make*. Infinite output, collapsing meaning. +AI removes the friction from making. You can generate text, images, music, and code as fast as you can type a prompt. The blank canvas problem has been solved in the most literal sense: the canvas fills itself. What’s left is a different paralysis—not the inability to choose what to watch, but the inability to choose what to *make*. Infinite output, collapsing meaning. -The constraint hasn't disappeared. It's migrated. +The constraint hasn’t disappeared. It’s migrated. -It now lives entirely in the person. Your taste. Your judgment. Your willingness to say no—to the draft that's technically fine, to the image that almost works, to the code that runs but doesn't fit. Steve Jobs put it plainly: "Innovation is saying no to a thousand things." That was always true. Now it's the only thing left that can't be outsourced. +It now lives entirely in the person. Your taste. Your judgment. Your willingness to say no—to the draft that’s technically fine, to the image that almost works, to the code that runs but doesn’t fit. Steve Jobs put it plainly: "Innovation is saying no to a thousand things." That was always true. Now it’s the only thing left that can’t be outsourced. -This is what Gide understood before any of it existed. Constraint isn't a cage—it's a condition. It creates the problem, and the problem creates the work. A twelve-bar blues, 140 characters, a photo that has to say everything in one frame: the limit is where the meaning lives. Loosen the form too much and it stops meaning anything at all. +This is what Gide understood before any of it existed. Constraint isn’t a cage—it’s a condition. It creates the problem, and the problem creates the work. A twelve-bar blues, 140 characters, a photo that has to say everything in one frame: the limit is where the meaning lives. Loosen the form too much and it stops meaning anything at all. -In the AI age, Gide's warning sharpens. Liberty to generate anything means death of anything meaningful—unless you bring the constraint back yourself. The skill isn't producing more. It's knowing what to delete. The human as editor, as the one who refuses. +In the AI age, Gide’s warning sharpens. Liberty to generate anything means death of anything meaningful—unless you bring the constraint back yourself. The skill isn’t producing more. It’s knowing what to delete. The human as editor, as the one who refuses. Constraint was never the enemy. It was always the condition. diff --git a/Sources/App/Partials/posts/2026-06-27-comments.md b/Sources/App/Partials/posts/2026-06-27-comments.md index cb4310f..6d41a8e 100644 --- a/Sources/App/Partials/posts/2026-06-27-comments.md +++ b/Sources/App/Partials/posts/2026-06-27-comments.md @@ -10,7 +10,7 @@ What closed is the solution space. And the mechanism is almost embarrassingly mu When Claude reads a codebase, it reads everything. Types, logic, and structure—and prose. The difference is that code is constrained by a compiler. The compiler does not care what you intended; it cares what you wrote. Comments have no such check. They are unconstrained natural language, written in the same register the model uses to reason about intent. So when Claude encounters a doc comment that says *Handles authentication state transitions*, it does not read that as a description. It reads it as a decision. A prior decision, apparently made deliberately, worth preserving. -Say you have a class that manages thread safety with a lock, and a prior session left a comment describing the lock. Claude will not propose replacing it with an actor or a serial queue. Not because it can't—it knows those patterns—but because the comment has framed the lock as the design. Alternatives that would require departing from that framing simply don't appear. +Say you have a class that manages thread safety with a lock, and a prior session left a comment describing the lock. Claude will not propose replacing it with an actor or a serial queue. Not because it can’t—it knows those patterns—but because the comment has framed the lock as the design. Alternatives that would require departing from that framing simply don’t appear. The trouble is that most of those comments were not written deliberately. They were generated—by Claude, in a previous session, as part of a documentation pass. They carry the confident, declarative voice of something that knows what it’s doing. Every function summarized, every parameter explained. Total coverage, zero signal. diff --git a/Sources/App/Partials/posts/2026-07-18-disclosure.md b/Sources/App/Partials/posts/2026-07-18-disclosure.md index dd2b071..037574d 100644 --- a/Sources/App/Partials/posts/2026-07-18-disclosure.md +++ b/Sources/App/Partials/posts/2026-07-18-disclosure.md @@ -4,4 +4,4 @@ Doug Gregor opens his brilliant Swift Craft 2025 [talk](https://www.youtube.com/watch?v=opqKGgJavkw) about progressive disclosure in Swift with this quote from *Universal Principles of Design*. -In reply, I'd point to Rich Hickey's [Simple Made Easy](https://www.youtube.com/watch?v=SxdOUGdseq4) and this [thread](https://forums.swift.org/t/contemplating-default-isolation-control/88205) on the Swift forums, which wrestles with the same tension. +In reply, I’d point to Rich Hickey’s [Simple Made Easy](https://www.youtube.com/watch?v=SxdOUGdseq4) and this [thread](https://forums.swift.org/t/contemplating-default-isolation-control/88205) on the Swift forums, which wrestles with the same tension.