<?xml version='1.0' encoding='utf-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xml:base="https://v5.chriskrycho.com"><title>Sympolymathesy, by Chris Krycho</title>
   <id>https://v5.chriskrycho.com/</id>
   <author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author>
   <link href='https://v5.chriskrycho.com/' />
   <link href='https://v5.chriskrycho.com/feed.xml' rel='self'/>
   <subtitle>Learning in public: on theology, technology, ethics, software, politics, art, and more.</subtitle><rights>copyright Chris Krycho, 2019–2026 under a Creative Commons Attribution 4.0 license</rights>
   <updated>2026-03-11T07:24:19.093-06:00</updated>
   <generator>Eleventy Atom Plugin by Chris Krycho</generator>
   <icon>https://v5.chriskrycho.com/assets/images/favicon.png</icon><entry><id>https://v5.chriskrycho.com/notes/what-happened-to-february/</id><title type="html">[notes] What Happened to February?</title><published>2026-03-11T07:15:00.000-06:00</published>
            <updated>2026-03-11T07:15:00.000-06:00</updated>
            <link href='https://v5.chriskrycho.com/notes/what-happened-to-february/'/>
            <summary type="html">Work. So much work!</summary>
            <content type="html">
               <![CDATA[<p><i>Work. So much work!</i></p><p>I just realized, on posting that bit about slices in Dorico, that I hadn’t written <em>anything</em> in February. I missed it, but then I barely got to any of my side projects in February. <a href="https://www.vanta.com">Vanta</a><span class="push-single"></span><span class="pull-single">’</span>s fiscal year starts on February 1, which means a lot of other things happen then as well:</p>
<ul>
<li>The annual Company Kick-Off is always the first week of February — this year, in Las Vegas, so I was traveling that whole first week.</li>
<li>The first quarter ramp-up into the new year’s priorities happens then.</li>
<li>This year, we had some internal leadership changes that led to a few of us spending a bunch of time on updates to our annual plans.</li>
</ul>
<p>As a bonus, we had a long-standing developer experience challenge get much worse as we tipped over some internal scaling issues, and that in turn led to creating an entirely new project that I have been running at the same time as trying to do all of that <em>other</em> work.</p>
<p>The result: a February so busy at work that I barely composed, did no public writing whatsoever, and managed — just — to hang onto my workout routine. Gladly, it seems to be slowing down a touch here in March (phew!), and I’m hoping to have more time and space and mental energy to write again more regularly.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20What%20Happened%20to%20February%3F">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="site meta"/><category term="writing"/></entry><entry><id>https://v5.chriskrycho.com/notes/exporting-graphic-slices-from-dorico/</id><title type="html">[notes] Exporting Graphic Slices From Dorico</title><published>2026-03-11T06:55:00.000-06:00</published>
            <updated>2026-03-11T06:55:00.000-06:00</updated>
            <link href='https://v5.chriskrycho.com/notes/exporting-graphic-slices-from-dorico/'/>
            <summary type="html">One of those handy features you don’t necessarily appreciate until you find yourself needing it.
</summary>
            <content type="html">
               <![CDATA[<p><i>One of those handy features you don’t necessarily appreciate until you find yourself needing it.
</i></p><p>I just used <a href="https://www.steinberg.net/dorico/">Dorico</a><span class="push-single"></span><span class="pull-single">’</span>s handy <a href="https://www.steinberg.help/r/dorico-pro/6.1/en/dorico/topics/engrave_mode/engrave_mode_graphic_slices_exporting_t.html">Exporting Graphic Slices</a> feature for, I think, the first time, and: what a thoughtful inclusion this is. For one issue of my music newsletter this year (comment on going quarterly some other time — likely the upcoming <dash-wrap>January – March</dash-wrap> issue!), I wanted to illustrate, like so:</p>
<figure><img src="https://cdn.chriskrycho.com/images/very-high-ledger-line.png" alt><figcaption>a very high ledger line</figcaption></figure>
<p>In the past, I might have tried to snag that by using a screenshot utility. Today, I remembered that Dorico has this functionality built in, so I pulled <a href="https://www.steinberg.help/r/dorico-pro/6.1/en/dorico/topics/engrave_mode/engrave_mode_graphic_slices_exporting_t.html">the aforelinked help page</a> and followed the instructions there to snag just this view and export it as a high-quality <abbr title="Portable Network Graphics (image format)">PNG</abbr> — with the ability to be much more precise with what I captured and with a good deal more versatility about what to export and how.</p>
<p>Handy!</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Exporting%20Graphic%20Slices%20From%20Dorico">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Dorico"/><category term="music"/></entry><entry><id>https://v5.chriskrycho.com/notes/three-theses-and-their-implications-about-software-engineering/</id><title type="html">[notes] Three Theses and Their Implications About Software Engineering</title><published>2026-01-30T18:50:00.000-07:00</published>
            <updated>2026-01-30T18:50:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/three-theses-and-their-implications-about-software-engineering/'/>
            <summary type="html">As a friend and I were discussing the industry at large.</summary>
            <content type="html">
               <![CDATA[<p><i>As a friend and I were discussing the industry at large.</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> A vaguely in-house conversation for folks acquainted with the dynamics of the tech scene.</p>
<hr/><p>Theses:</p>
<ol>
<li>
<p>People are responsible for their own choices and have agency, and the responsibility part is particularly applicable to people who want the right to call themselves<span class="push-double"></span> <span class="pull-double">“</span>engineers”.</p>
</li>
<li>
<p>People are social animals who respond deeply to the norms in their environment,<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> and who respond very strongly to their direct authority figures.<sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup></p>
</li>
<li>
<p>When something in an engineering organization is deeply broken, it is usually because (2) is undermining (1) in profound ways.</p>
</li>
</ol>
<p>One of the most formative experiences of my career, almost a decade now, was — after years of being profoundly beaten down by previous bosses — having an <abbr title="engineering manager">EM</abbr> more or less yell at me (we were friends and it was in a good way),<span class="push-double"></span> <span class="pull-double">“</span>Stop complaining to me and go change it! You’re an engineer, not a code monkey! That’s why we give you that title! You are actually empowered to go fix things!”<sup class="footnote-ref"><a href="#fn3" id="fnref3">3</a></sup></p>
<p>So many of the folks in the industry at large, perhaps especially in <abbr title="venture capital">VC</abbr>-funded or public co. land, have never had that desperately-needed pep talk/lecture. And too many <abbr>EM</abbr>s think their <abbr title="product manager">PM</abbr>s are their bosses, so they pass that onto their engineers.</p>
<p>And so: my job is to avoid getting upset when I see other engineers having done something less than desirable, not least when I can see that their intent is actually good, and to go fix as many of the underlying problems with (2) that I can so that they have a shot at doing what they should in (1) — and also to tell as many engineers as I can that (1) is in fact their responsibility regardless of what dynamics are in play under (2).</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>This is a better version of the<span class="push-double"></span> <span class="pull-double">“</span>people just respond to incentives” take that I often see floating around. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>I often think of the description of Jesus’ compassion on the crowds as<span class="push-double"></span> <span class="pull-double">“</span>harassed and helpless, like sheep without a shepherd” (Matthew 9:36b). I feel something of that same compassion for a lot of engineers with bad managers. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn3" class="footnote-item"><p>Bret, on the off chance you happen to read this: <em>Thank you.</em> <a href="#fnref3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Three%20Theses%20and%20Their%20Implications%20About%20Software%20Engineering">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="software development"/><category term="engineering"/><category term="from my outbox"/></entry><entry><id>https://v5.chriskrycho.com/notes/the-unreasonable-effectiveneess-of-writing-down-goals/</id><title type="html">[notes] The (Unreasonable?) Effectiveness of Writing Down Goals</title><published>2026-01-29T07:26:00.000-07:00</published>
            <updated>2026-02-01T09:15:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/the-unreasonable-effectiveneess-of-writing-down-goals/'/>
            <summary type="html">I try to do this every day, and I find it astonishing how much it helps me.
</summary>
            <content type="html">
               <![CDATA[<p><i>I try to do this every day, and I find it astonishing how much it helps me.
</i></p><p>I have mentioned before my habit — sometimes stronger, sometimes weaker, but never fully abandoned — of writing down what I want to do on various time scales: day, week, month (or, at work, quarter), year. For my personal goals, I do this in a modified bullet journal form in a <a href="https://www.leuchtturm1917.us/notebook-medium-a5-hardcover-251-numbered-pages-indigo-dotted.html">Leuchtturm1917 A5 dot grid notebook</a>. At work, I <a href="https://v5.chriskrycho.com/journal/writing-down-what-i-do-in-obsidian/">regularly</a> use a tool like <a href="https://obsidian.md">Obsidian</a> or <a href="https://bear.app">Bear</a>. In every case, I find it quite surprising how effective it can be simply to have <em>written down</em> what I want to do.</p>
<p>The first reason is that as long as I’m doing it right, writing down my goals forces me to decide, of the many things I could do, which I <em>will</em> do. Just these three big projects, this year. Just these chunks of those projects, this month. Three times working on each of those this week. This in the morning, that in the evening, today.</p>
<p>The second reason is that writing it down leaves a mark in my mind no less than on paper. It is as if I am making myself a little promise, and the reminder that those dots are there, waiting to be marked off once I have accomplished the goals, lingers in my thoughts throughout the day. Indeed, even as I write these words, I am very aware of the time and my goal of composing some music this morning: I had better stop writing this and get to that if I am going to accomplish that!</p>
<p>The writing is not itself the key. The key is choosing and remembering. Writing is a really great tool for helping myself choose and remember, though.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20The%20(Unreasonable%3F)%20Effectiveness%20of%20Writing%20Down%20Goals">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="writing"/><category term="working effectively"/><category term="note-taking"/></entry><entry><id>https://v5.chriskrycho.com/notes/thinking-about-anything-besides-the-big-thing-right-now/</id><title type="html">[notes] Thinking About Anything Besides the Big Thing Right Now</title><published>2026-01-19T18:13:00.000-07:00</published>
            <updated>2026-01-19T18:13:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/thinking-about-anything-besides-the-big-thing-right-now/'/>
            <summary type="html">Why I don’t write much about &amp;lt;abbr title=&amp;quot;large language model&amp;quot;&amp;gt;LLM&amp;lt;/abbr&amp;gt;s—and don’t expect that to change much in the near future, either.
</summary>
            <content type="html">
               <![CDATA[<p><i>Why I don’t write much about <abbr title="large language model">LLM</abbr>s—and don’t expect that to change much in the near future, either.
</i></p><p>It’s pretty simple, actually — a confluence of the following factors, in no particular order:</p>
<ul>
<li>
<p>They have effectively sucked up all the air in the room, but I still think there are plenty of other interesting things to think and talk about. Software engineering remains a large and wide discipline, and all the vast world beyond software is plenty interesting, too.</p>
</li>
<li>
<p>I have avenues where I <em>am</em> thinking and writing and talking about them. Just not <em>here</em>.</p>
</li>
<li>
<p>They <em>are</em> interesting in various ways, but I don’t usually have anything to say that others are not saying better. I think about them a fair bit at work — it’s literally part of my job to think about them, given where I sit in our org — but little if any of that is ready for public consumption.</p>
</li>
<li>
<p>I do not believe that anyone is obliged — no matter how heated the moment, and no matter how long they have been writing publicly — to comment on any given topic. Do I have thoughts, many of them deeply considered on <abbr>LLM</abbr>s? Yes. I do. Do I feel obliged to spend more of my time on <em>that</em> topic than on others I find more profitable? I do not.</p>
</li>
</ul>
<p>The running theme here is that I think we are spending far too much of our time and energy on these things culturally. I want to contribute to a culture of thinking about <em>other</em> things — things that are more important, more enduring, more fundamental.</p>
<p>I recognize this post itself contributes to the problem named here. I write it so that if (or when!) it comes up again in the future, I can simply point to this and move on! In the meantime, you can expect to hear relatively little from me on this front, and much more on other things. Go read other folks — the enthusiasts and the critics and the (few) folks walking a careful line in between — and let me know when you find real gems along the way.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Thinking%20About%20Anything%20Besides%20the%20Big%20Thing%20Right%20Now">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="writing"/><category term="site meta"/><category term="AI and ML"/><category term="software development"/></entry><entry><id>https://v5.chriskrycho.com/library/time-to-keep/creaturehood/</id><title type="html">[library] creaturehood</title><published>2026-01-05T07:10:00.000-07:00</published>
            <updated>2026-01-05T07:10:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/library/time-to-keep/creaturehood/'/>
            <summary type="html">‘Human beings are not self-given; they do not “emerge” from something else in a basic way…’
</summary>
            <content type="html">
               <![CDATA[<p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> Theologically-orthodox Christians, or folks interested in things that theologically-orthodox Christians think.</p>
<hr/><figure class="quotation">
<blockquote>
<p>Only God<span class="push-double"></span> <span class="pull-double">“</span>creates” in any substantive way; and the work that comes from God’s hands is always, by definition, some kind of<span class="push-double"></span> <span class="pull-double">“</span>creature.” Obviously, the Christian faith further specifies this creation as somehow being<span class="push-double"></span> <span class="pull-double">“</span>in Christ,” but the basic relationship of creature to Creator is undisturbed by this christological specification. Human beings are somehow<span class="push-double"></span> <span class="pull-double">“</span>made” by someone beyond their scope of action and being. Human beings are not self-given; they do not<span class="push-double"></span> <span class="pull-double">“</span>emerge” from something else in a basic way, even if we adopt evolutionary biological frameworks for explaining the origin of human life. Whether we are talking about atoms or the forces that order them or hold them together, it is not possible to avoid the question of what it means that any of this exists at all. The question of this original existence of all things and of their order is one that goes beyond physics. The Christian affirms that all things, including our very selves,<span class="push-double"></span> <span class="pull-double">“</span>come to be” because of the specific act of the Creator. This relationship to a divine act outside of us and outside of our own times makes our creaturehood something singular, in comparison with other relationships we have with people and things, past and present.</p>
</blockquote>
<figcaption>&thinsp;&mdash;&thinsp;Ephraim Radner, <cite><a href="https://bookshop.org/a/21126/9781481305457">A Time to Keep: Theology, Mortality, and the Shape of a Human Life</a></cite>, p. 7</figcaption>
</figure>
<p>The only thing I would add here is that while creaturehood is indeed <em>undisturbed</em> by being<span class="push-double"></span> <span class="pull-double">“</span>in Christ” — we do remain, always, creatures — , it is certainly <em>changed</em>. Call it<span class="push-double"></span> <span class="pull-double">“</span>theosis” or whatever you like, but being mystically united with the creator makes an awfully big difference in what it is to be a creature.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20creaturehood">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Ephraim Radner"/><category term="theology"/><category term="scripture"/><link rel='enclosure' href='https://cdn.chriskrycho.com/images/books/time-to-keep.jpg'/>
               <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://cdn.chriskrycho.com/images/books/time-to-keep.jpg"/></entry><entry><id>https://v5.chriskrycho.com/notes/why-not-astro-etc/</id><title type="html">[notes] Why Not Astro (etc.)?</title><published>2026-01-02T10:48:00.000-07:00</published>
            <updated>2026-01-02T10:48:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/why-not-astro-etc/'/>
            <summary type="html">A reasonable question I get asked regularly when I mention I’m slowly building my own site generator/engine.
</summary>
            <content type="html">
               <![CDATA[<p><i>A reasonable question I get asked regularly when I mention I’m slowly building my own site generator/engine.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who know what static site generators and website builders in general and specifically tools Astro, 11ty, etc. are.</p>
<hr/><p>Nearly any time I mention my slow but steady progress on building my own tool for building my website, I get questions of the form,<span class="push-double"></span> <span class="pull-double">“</span>Why not <some existing tool>?” Most recently, for example,<span class="push-double"></span> <span class="pull-double">“</span>Why not use Astro?”; in the past,<span class="push-double"></span> <span class="pull-double">“</span>Why move off of 11ty?”; and so on. These are invariably written kindly and from a place of reasonable curiosity, so I don’t begrudge them a bit. Here’s what I wrote in reply to the most recent such email:</some></p>
<p>Astro is great, and is one of the tools I would recommend to other folks who want to build their own <abbr title="content management system">CMS</abbr> or similar. For my part, this somewhat quick exotic journey is one I have been slowly working on for a decade. A big part of it is the fact that I simply always find the limits of every other tool, often in part because of its need for generality. One of the wins of building your own tool is that it can be as narrow and specific as make sense for your own purposes, and that’s helpful for me. I also really enjoy having it be written in Rust end-to-end, both because of the performance benefits and because if I’m going to work on a project like this, I would much rather write Rust than <abbr title="JavaScript">JS</abbr>/<abbr title="TypeScript">TS</abbr>.</p>
<hr>
<p>To this I’ll add: I am and have been using 11ty successfully for over 6 years now, and I used Pelican for a similar span before that. I <em>think</em> I’ll probably be able to use my own generator for everything by the end of this year — an exciting prospect. But it obviously hasn’t been a hard blocker for me to be using off-the-shelf tools.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Why%20Not%20Astro%20(etc.)%3F">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="software development"/><category term="site meta"/></entry><entry><id>https://v5.chriskrycho.com/essays/computing-convivially/</id><title type="html">[essays] Computing, Convivially</title><published>2026-01-01T10:45:00.000-07:00</published>
            <updated>2026-01-01T10:45:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/essays/computing-convivially/'/>
            <summary type="html">Digital technologies can be terribly destructive, but they can also be gloriously empowering. How do we shape them into tools for conviviality rather than means of domination?
</summary>
            <content type="html">
               <![CDATA[<p><i>Digital technologies can be terribly destructive, but they can also be gloriously empowering. How do we shape them into tools for conviviality rather than means of domination?
</i></p><p><b>A bit of context:</b> I wrote this for a magazine a couple years ago, but it ended up not working out, so I’m publishing it here instead.</p>
<hr/><h2 id="i" tabindex="-1"><a class="header-anchor" href="#i">I</a></h2>
<p>Most of us remember when we taught our children to ride their bicycles, and I am no exception. I also remember many moments teaching my daughters another tool: our family computer. From the moment we started letting our daughters use a computer regularly, we have let them play video games a little — but given them far more time if they will spend it to create.<span class="push-double"></span> <span class="pull-double">“</span>Does sending iMessages full of gibberish count as<span class="push-single"></span> <span class="pull-single">‘</span>creative time’?” is a question we have had to answer perhaps a few too many times as a result. Slowly, but surely, though, the message has stuck.</p>
<p>I took a picture a few years ago of my older daughter, then about ten years old. In the photo, she is sitting at our family iMac: she has headphones on, the GarageBand app open, a <abbr title="musical instrument digital interface">MIDI</abbr> keyboard at hand, and is happily composing a piece for drum kit and strings and her own voice. An hour later, she proudly shared it with us. It was about what you would expect from a talented, but not prodigy-like, ten-year-old. We smiled wholeheartedly at her and found things to praise in that first attempt. I loved how she wanted to follow, even a little, in my footsteps as a composer. Even more, though, I loved that she was learning how to make the computer not only one more means of entertainment, but a tool for bringing the good and beautiful into the world.</p>
<h2 id="ii" tabindex="-1"><a class="header-anchor" href="#ii">II</a></h2>
<p>Ivan Illich, in his 1973 book <cite>Tools for Conviviality</cite>, defined a convivial tool as a<span class="push-double"></span> <span class="pull-double">“</span>responsibly limited tool.” As an example, he offered a bicycle. Nearly anyone can ride a bicycle. Bicycles require no licensure, and no training process. They are easy to borrow and lend, and relatively simple to repair. They are very unlike automobiles, which both enable and demand a radical restructuring of geography. A bicycle extends our reach only so far as we are willing to pedal in the elements. Yet bicycles are also remarkably capable tools which can sharply alter the possibilities for any given person on any given day.</p>
<p>The most convivial tool in my life (besides my own bicycle, anyway) is my Mac. It was easy to learn and has grown with me through the many phases of life since I first got one nearly 20 years ago. Over those years, I have used my computers to learn, write, use social media, compose music, play video games, and build software. Those uses are decidedly mixed: ranging from entertainment and distraction to creative and life-giving work. Social media, for example, has been a great dissipation at times, but also a place I made some of my closest and most enduring friendships. Similarly, video games have filled very different roles in my life: joyful play with my family and mere diversion after a long work day. Yet in the main, my laptop has been a tool, not a toy. Every one of the many seminary papers, blog posts, and essays I have written in the past fifteen years was written on one of my Macs. With these machines, I have composed orchestra music and recorded it with musicians on the far side of an ocean, written church music for our little congregation, even teamed up with a poet-friend who lives in another state to co-create a bit of music for my wife and one of our best friends. Most importantly, I have made my living on these machines for the past 15 years as a wholly self-taught software engineer.</p>
<p>The idea of a<span class="push-double"></span> <span class="pull-double">“</span>home economy” sometimes gets conflated with an agrarian economy, as if it is only available to farmers. One of the few upsides to 2020’s terrible disruption, though, was that many people, and at least some companies, realized much more of their work could be done anywhere. The door to working at home cracked open for many us in the knowledge economy. If some knowledge work certainly falls under the rubric of<span class="push-double"></span> <span class="pull-double">“</span>bullshit jobs”, much of it is also generative and good. (That division goes for all work in a broken world. Nor should it escape our notice that<span class="push-double"></span> <span class="pull-double">“</span>bullshit job” and<span class="push-double"></span> <span class="pull-double">“</span>taskmaster” are metaphorical, if meaningful, for knowledge workers. Both terms were and are quite literal for many agrarian workers.) Even a frustrating job in the knowledge economy can be a step toward a real home economy. It was for me.</p>
<p>In early 2013, my wife and I moved across the country, our 7-month-old first daughter in tow, for me to start a Master of Divinity degree. I was able to persuade my employer to keep me on part-time, working remotely as a contractor. The bookcase in our kitchen I used as makeshift standing desk was not glamorous, but I wrote a lot of code and seminary papers alike there. One day a few years along stands out in my memory. Our first daughter was now deep in the throes of potty training and we had another energetic little girl on our hands as well. My wife looked at me very seriously and told me she was going to lose it if she had to clean another puddle of toddler pee off the floor. Most of the other seminary families would have been stuck in that moment. The dads were always out of the house, either studying or working. I worked at home, though. I sent my wife out to her favorite coffee shop with our younger daughter. For the rest of the day, I alternated between stints of coding and running our toddler to the bathroom… and sometimes, yes, cleaning up puddles off the floor. A home economy indeed.</p>
<p>Speaking at the Library of Congress in 1990, Steve Jobs described how remarkable bicycles are. Humans are far outclassed by many other animals when it comes to our ability to turn energy into motion with our own two feet. Our toolmaking makes us capable of feats we could never manage otherwise, though. A bicycle vaults humans’ energy efficiency far beyond any other animal. The same, Jobs argued, is true of computers. They enable creative work hardly possible before: any group which cares can publish a top-notch magazine, for example. In Jobs’ telling, a computer is like<span class="push-double"></span> <span class="pull-double">“</span>a bicycle for the mind”. The analogy is suggestive. Perhaps computers, like bicycles, can be convivial tools.</p>
<h2 id="iii" tabindex="-1"><a class="header-anchor" href="#iii">III</a></h2>
<p>Jobs’ speech has its roots in an intellectual and practical project Douglas Engelbart launched nearly thirty years earlier with his 1962 report, <cite>Augmenting Human Intellect</cite>. Engelbart outlined a vision of computer programs for note-taking, ready to be adapted to each user, so as to<span class="push-double"></span> <span class="pull-double">“</span>harness your creativity more continuously.” A variety of<span class="push-double"></span> <span class="pull-double">“</span>personal knowledge management” and<span class="push-double"></span> <span class="pull-double">“</span>tools for thought” apps carry on this stream today. Curiously, though,<span class="push-double"></span> <span class="pull-double">“</span>tools for thought” enthusiasts often end up focused on the tools rather than the thinking. I confess: I have indulged in this mistake myself. A folder on this very laptop contains thousands of plain text files, some 1½ million words of notes. I have spent many hours reorganizing them, experimenting with naming schemes,  trying to get the links between them just right, and following interesting trails through them. All my tinkering with that system has not made me a better thinker. No intelligence inheres in interlinked documents. (Else the world wide web would have made geniuses of us all.)</p>
<p>One reason I get sidetracked by tinkering is zeal for the quality of my tools. Another is that tinkering is always easier than actually thinking. I suspect, though, that the impulse is higher with this specific machine. The flexibility, the sheer generality, of computers means they do not focus or direct our use. They are not like a camera, dedicated solely to capturing photographs. This is computers’ greatness, but it is also what makes them easy to misuse. Their programmability can mislead us into believing the hard work of thinking itself is avoidable. Phrases like<span class="push-double"></span> <span class="pull-double">“</span>outboard brain” indicate a failure to understand how thinking works, and why it is — always — work. That goes equally for a notes system made up of plain text files and for large language model chat interfaces. Engelbart’s dream, like Jobs’ word-picture, was of computers as tools allowing us think better; too often we act as if they will do the thinking for us. We treat them like automobiles instead of bicycles. No matter how good our notes system or how fluent our chatbots, though, true understanding is hard-won. We have to pedal.</p>
<p>As with any such imaginative framing, then, the<span class="push-double"></span> <span class="pull-double">“</span>implementation details” matter very much. After all, some of my time spent with my notes system <em>has</em> been illuminating. Writing down ideas and considering how they relate to each other has sharpened, clarified, and expanded my thinking over time. Good tools can provide scaffolding for that kind of work. They can make it easier to use one’s existing notes for reflection and revision. At the end of the day, though, the thinking has to be done in real time by a human. That is what makes pen and paper note-taking so powerful.<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> A convivial note-taking app would respect that reality — and promise no more.</p>
<h2 id="iv" tabindex="-1"><a class="header-anchor" href="#iv">IV.</a></h2>
<p>In his February 2020 essay <a href="https://www.robinsloan.com/notes/home-cooked-app/">An app can be a home-cooked meal</a>, novelist Robin Sloan describes a tiny video messaging app he built for his own family, with the delightfully silly name BoopSnoop. The app did just enough for Sloan and his family. It had absolutely no need for a monetization strategy, the level of polish of a published app, or even a less silly name for an app store marketing. Sloan concludes the essay by arguing that there is something good about learning to code the way we might learn to cook. Few of us will become Michelin chefs. Many of us can enjoy cooking in its own right, though. Most of us can bless our family and friends and neighbors with food. The same can — should — be true of software.</p>
<p>This is not the only path to convivial computing, though, any more than the goodness of home-cooking rules out the goodness of great restaurants.</p>
<p>The most powerful companies in the world include computer companies. Amazon, Apple, Alphabet (née Google), Meta (née Facebook), Microsoft, and lately Nvidia top the list in America. There are many differences between these companies, but they all operate at nearly inconceivable scales. They have billions of users. Their products have cost billions of dollars to develop over the span of many decades; building competing platforms would take comparable amounts of both money and time. (For all that bicycles make for a pretty good business, it is hard to imagine them dominating our social, political, and even artistic spaces — still less our cultural imaginary — the way those tech giants do.) Does that fact of scale alone make computers un- or even anti-convivial technologies?</p>
<p>Social media is certainly industrial in scale, and most of its harms are directly due to industrializing what should not be: community and conversation. Scale itself is indeed most of the problem there. No one can moderate four billion<span class="push-double"></span> <span class="pull-double">“</span>users” (that is: people). At the same time, Sloan’s BoopSnoop was itself possible only because it built on the foundations laid by those massive corporations. It stood on the shoulders of thousands of corporate software developers and indie open source contributors alike. Likewise, consider how my own little home economy has both benefited from and contributed to mega-corporations — not least in a nearly five year stint at one of them.<sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup></p>
<p>Scale can dehumanize. It can also empower and enable. In the small, we are free to play, to experiment, to learn, to write essays for small magazines, to compose orchestra music, to keep in touch with friends around the world. In the large, we can collaborate on vaccines and antibiotics to defang a pandemic. The sheer generality of computing makes all of these possible. We are responsible to choose how, and when, and where, and even why we use computers. We must use them to magnify rather than diminish our humanity, and we must use them for human ends.</p>
<p>Technological enthusiasts in every age think novel technologies good — often rightly, but not always. The technological skeptics of every age think them bad, often justly — but not always. Computer aficionados have certainly fallen prey to the first temptation often enough. Tech critics have equally often fallen prey to the second. Mostly, the two camps speak past each other. Perhaps the two can have a real meeting of the minds today in the recognition that computing is not all it could be: that convivial computing is possible. Moral hazards around computing are real. So is the potential for the beautiful and good, though. I, for one, am unwilling to let the ills of social media, or the extractive aims of the largest companies in the world, have the final word on what computing is or can be. We must continue to push back against the idea of tools as substitutes for our humanity, must always insist on shaping them into the kinds of things which make us more truly human. But we should also rejoice in the ways they do just that.</p>
<p>These slabs of silicon, and the software that runs on them, can be a help to home economies. They need not be substitutes for thinking; they really can be bicycles for our minds. Convivial computing exists in the world today, and we should all of us encourage it wherever we find it. The next time you use a computer, then, think about what you are about to do. Will you scroll endlessly, feed the trolls, hate-read your political enemies? Or will you build a friendship, create a work of art, cultivate a new skill, share something beautiful: ultimately, glorify God? We get to <em>choose</em> whether our computing is convivial. Every time we make something genuinely good of computers’ capaciousness, we build — just a little more — a life fit for humans, tool-makers that we are.</p>
<h2 id="v" tabindex="-1"><a class="header-anchor" href="#v">V</a></h2>
<p>A month ago,<sup class="footnote-ref"><a href="#fn3" id="fnref3">3</a></sup> my younger daughter asked me to compose a setting for an acrostic poem she wrote — and so I did. Last night, I sat down at the piano with her to practice it: we both played, and she sang. I composed the piece as I always do: sitting at my Mac, with a <abbr>MIDI</abbr> keyboard at hand, entering the notes into one of my favorite pieces of software, listening to playback with samples from some of the best musicians in the world, printing it out at a quality unthinkable for this kind of home project even fifteen years ago. All of this <em>could</em> be done purely by hand, yes, but it was better this way — much better. And when we finished playing through it together, my younger daughter looked up at me, smiled a huge smile, said<span class="push-double"></span> <span class="pull-double">“</span>Thank you, daddy,” and hugged me hard.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Though we should also acknowledge that even writing can be a crutch. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>I worked at LinkedIn, a subsidiary of Microsoft and a behemoth in its own right, January <dash-wrap>2019 – October</dash-wrap> 2023. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn3" class="footnote-item"><p>Per the context comment at the top, this was<span class="push-double"></span> <span class="pull-double">“</span>a month ago” when I wrote this essay, but that was a couple years ago. <a href="#fnref3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Computing%2C%20Convivially">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Big Tech"/><category term="tech criticism"/><category term="technology"/><category term="tools"/><category term="thinking"/><category term="software"/><category term="creativity"/><category term="Robin Sloan"/><category term="Ivan Illich"/><category term="Douglas Engelbart"/><category term="working effectively"/><category term="parenting"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/writing/</id><title type="html">[journal] 2025 in Review: Writing</title><published>2025-12-31T17:21:00.000-07:00</published>
            <updated>2025-12-31T17:21:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/writing/'/>
            <summary type="html">Another year of writing a good-sized book‘s worth of words… and also contributing to a major revision of a book.
</summary>
            <content type="html">
               <![CDATA[<p><i>Another year of writing a good-sized book‘s worth of words… and also contributing to a major revision of a book.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>As usual, writing made up a huge part of my work — though not the sort I get paid for — this year. Between an article for <cite>Christianity Today</cite>, my music newsletter, and this site, I ended up writing around 85,000 words all told: no small feat in a year filled with many other responsibilities! I’m always surprised at the end of the year to see just how much writing I have done. At some point I should stop being surprised.</p>
<h2 id="elsewhere" tabindex="-1"><a class="header-anchor" href="#elsewhere">Elsewhere</a></h2>
<p>A few years ago, I set myself a goal of publishing at least one essay each year somewhere <em>not</em> my blog. I managed it again this year: I was published in <cite>Christianity Today</cite>, for their July/August 2025 issue on <abbr title="artificial intelligence">AI</abbr>: <a href="https://www.christianitytoday.com/2025/07/dont-conflate-intelligence-with-value/">Don’t Conflate Intelligence with Value</a>. Being published in a major magazine was a nice milestone, and I was glad to contribute to an area where my fields of expertise overlap such that I have something valuable to say.</p>
<p>My other major publishing win this year is that Carol Nichols and I also finished a major revision pass on <a href="https://doc.rust-lang.org/book/"><cite>The Rust Programming Language</cite> book</a> this year, including <a href="https://doc.rust-lang.org/book/ch17-00-async-await.html">the brand new chapter I wrote introducing <code>async</code> and <code>await</code></a>. The online version is largely up to date with our revisions. Meanwhile, print and <span class="all-smcp">EPUB</span> versions of the new edition will be out in February, with <span class="all-smcp">EPUB</span> actually available in early access now. (If you prefer either of those to the online version, you can buy them from NoStarch <a href="https://nostarch.com/rust-programming-language-3rd-edition">here</a>.) It’s a great feeling to have all that work out in the world, and soon to be out in the world physically.</p>
<h2 id="music-newsletter" tabindex="-1"><a class="header-anchor" href="#music-newsletter">Music newsletter</a></h2>
<p>Another major outlet for my writing this year was <a href="https://newsletter.music.chriskrycho.com/archive/">my music newsletter</a>. I managed to keep up my streak from last year and publish every month. All told, I wrote  21,099 words in the regular issues, with another few hundred words for the short issue where I announced the release of <a href="https://music.chriskrycho.com/works/holy-saturday-2025/"><cite>Holy Saturday&thinsp;&mdash;&thinsp;<abbr title="extended play">EP</abbr></cite></a>. As I mentioned in <a href="https://newsletter.music.chriskrycho.com/archive/december-2025-how-the-year-went/">the year-end issue</a>, having the forcing function of writing monthly was really good for me. If I am going to send something into the world, I want it to be worth reading. That meant I needed to be thinking throughout the month about what to say. It also incentivized me to do the writing sooner than the deadline, because getting it out on time was a near thing several months, and an outright miss once or twice.</p>
<h2 id="the-blog-aka-this-site" tabindex="-1"><a class="header-anchor" href="#the-blog-aka-this-site">The blog (a.k.a this site)</a></h2>
<p>As usual, a good bit of writing here: 63,357 words this year. (Amusingly, that number grew by about 8,150 words from the time I started writing this series to the time I finished it. This is always one of my highest writing times of year.) That’s in line with most<span class="push-double"></span> <span class="pull-double">“</span>normal” years for the past half decade. For comparison:</p>
<table>
  <tr>
    <th scope="row">2020</th>
    <td>60,069</td>
  </tr>
  <tr>
    <th scope="row">2021</th>
    <td>44,442</td>
  </tr>
  <tr>
    <th scope="row">2022</th>
    <td>39,603</td>
  </tr>
  <tr>
    <th scope="row">2023</th>
    <td>55,658</td>
  </tr>
  <tr>
    <th scope="row">2024</th>
    <td>79,885</td>
  </tr>
</table>
<p>This year’s count is very close to the average of the preceding 5 years, so no major surprise here!</p>
<p>The more interesting bit is how dramatically the frequency and volume of my writing shifted when I started my new role at Vanta in April. I published 32,618 of those words, or about 52%, from January through April. What is more, the post-April word count includes the full text of my LambdaConf keynote, <a href="https://v5.chriskrycho.com/elsewhere/infrastructure-common-goods-and-the-future-of-open-source-software/">Infrastructure, Common Goods, and the Future of Open-Source Software</a> (also covered in my <a href="https://v5.chriskrycho.com/journal/2025-in-review/public-speaking/">Public Speaking</a> post). No surprise that my writing dropped off dramatically after April: a full-time job takes a lot of time, and my writing volume prior to that was aimed in part at helping me land a new job.</p>
<p>The posts I published this year I am proudest of:</p>
<ul>
<li><a href="https://v5.chriskrycho.com/notes/working-effectively-instead-of-productivity/"><span class="pull-double">“</span>Working Effectively” Instead of<span class="push-double"></span> <span class="pull-double">“</span>Productivity”</a>: a helpful shift in language as a way of thinking more clearly about what I do.</li>
<li><a href="https://v5.chriskrycho.com/journal/this-is-not-your-last-job/">This Is Not Your Last Job</a>: a call to learn what is professionally interesting to you, regardless of its<span class="push-double"></span> <span class="pull-double">“</span>value” to your current employer.</li>
<li><a href="https://v5.chriskrycho.com/journal/essence-of-successful-abstractions/">The Essence of Successful Abstractions</a>: writing down one of my software design heuristics in a way that I can share with others.</li>
<li><a href="https://v5.chriskrycho.com/notes/big-packages-or-many-dependencies/">Big Packages or Many Dependencies</a>: a foray into a then-hot, now-simmering argument across a number of language ecosystems about using external dependencies.</li>
<li><a href="https://v5.chriskrycho.com/journal/how-progress-feels/">How Progress Feels</a>: on what improvement in a discipline — any discipline! — feels like.</li>
<li><a href="https://v5.chriskrycho.com/journal/own-your-music/">Own Your Music</a>: because you may lose access to your favorite music if you rely on the streaming services.</li>
<li><a href="https://v5.chriskrycho.com/notes/yes-hallucinations-are-the-least-dangerous-exactly/">Yes, Hallucinations are the<span class="push-double"></span> <span class="pull-double">“</span>Least Dangerous” — <em>Exactly</em></a>: on how we ought to think more clearly about the problems with <abbr title="large language model">LLM</abbr>s.</li>
<li><a href="https://v5.chriskrycho.com/journal/mozilla-and-pocket/">Some Products Just Aren’t Big Companies</a>: on Mozilla’s horrific mishandling of their acquisition and slow killing of Pocket.</li>
<li><a href="https://v5.chriskrycho.com/notes/software-change-stability-imperfect-markets.../">Software, change, stability, imperfect markets…</a>: on 1Password as synecdoche for how companies can leave behind their original and most loyal customers when chasing size.</li>
<li><a href="https://v5.chriskrycho.com/journal/context-and-trust/">Context and Trust, or: Test Suites Reflect Teams</a>: responding to a post making what I took to be some pretty bad arguments about automated test suites for software (old-school blogging at its finest!).</li>
<li><a href="https://v5.chriskrycho.com/notes/naming-policy-large-language-models-not-artificial-intelligence/">Naming Policy:<span class="push-single"></span> <span class="pull-single">‘</span>Large Language Models’, Not<span class="push-single"></span> <span class="pull-single">‘</span>Artificial Intelligence’</a>: just what it says on the tin, but also <em>why</em>.</li>
<li><a href="https://v5.chriskrycho.com/notes/reversion-to-the-mean/">Reversion to the Mean</a>: on <abbr>LLM</abbr>s being very poor editors if you have any style of your own.</li>
<li><a href="https://v5.chriskrycho.com/journal/friendly-little-wrapper-types/">Friendly Little Wrapper Types</a>: writing down another one of my software design heuristics.</li>
</ul>
<h2 id="public-theology" tabindex="-1"><a class="header-anchor" href="#public-theology">Public theology?</a></h2>
<p>One notable absence from the <em>blog</em> this year is much writing on theology or ethics. These continue to be major considerations of mine, and I spend a good deal of time talking about them privately. I am in the midst of what seems to be a decade-long transition in my public posture on them, though. I am very happy to write about these issues (see: being published in <cite>Mere Orthodoxy</cite>, <cite>The Gospel Coalition</cite>, and <cite>Christianity Today</cite>) but I find myself very much in flux in how I write about them <em>here</em>. This is a bit ironic, since the early days of my blogging were almost entirely about those themes.</p>
<p>That is actually a big part of <em>why</em> I find myself in flux in this area. I am keenly aware of how much I opined with relatively little knowledge in the late<span class="push-single"></span> <span class="pull-single">’</span>00s and early<span class="push-single"></span> <span class="pull-single">’</span>10s, and am only that much more aware of the limits of my knowledge now. I have some small degree of expertise in theology and ethics by dint of my M.Div., but the emphasis here ought to be on the word<span class="push-double"></span> <span class="pull-double">“</span>small”.  I still read omnivorously, and a great deal of my essay-reading in particular <em>is</em> theology and ethics. I find, though, that where I have enough expertise to dash off a post about programming with some confidence that it will be helpful even if it is<span class="push-double"></span> <span class="pull-double">“</span>thinking out loud” I do <em>not</em> have that confidence about off-the-cuff theological or ethical writing.</p>
<p>I also find this complicated by my very mixed audience! I know that many of my readers are orthodox Christians, but that many are also <em>not</em>, and addressing both parts of that audience <em>well</em> is very difficult. <a href="https://v4.chriskrycho.com/2018/assumed-audiences.html">Assumed Audience</a> headers only go so far. Part of what makes it easier to write for e.g. <cite>Christianity Today</cite> is that I can assume many more shared commitments. On the other hand, I <em>want</em> to do <a href="https://v5.chriskrycho.com/about/#theologian">public theological writing</a> for the good of the church and the world.</p>
<p>Perhaps I should write on these things more, then, despite my sense of just how much I do not know. Expertise is always relative, I can always provide appropriate caveats, and I know from many a conversation at church that I do have things to share for other Christians that are not<span class="push-double"></span> <span class="pull-double">“</span>mainstream” knowledge for them — and I find the same is often true when talking with friends who are <em>not</em> Christians. The trick, I think, is growing some confidence in posting on such things simply by doing it, as well as finding the right<span class="push-double"></span> <span class="pull-double">“</span>register” in which to write about them again.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Writing">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="writing"/><category term="music"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/rest-of-life/</id><title type="html">[journal] 2025 in Review: The Rest of Life</title><published>2025-12-31T16:56:00.000-07:00</published>
            <updated>2025-12-31T16:56:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/rest-of-life/'/>
            <summary type="html">Family, happy hours, parties, parenting, church, middle adulthood.
</summary>
            <content type="html">
               <![CDATA[<p><i>Family, happy hours, parties, parenting, church, middle adulthood.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>Most of life has been fairly ordinary this year, though<span class="push-double"></span> <span class="pull-double">“</span>ordinary” by no means dull or uninteresting. Quite the contrary: with an 8<sup>th</sup> grader and a 6<sup>th</sup> grader, our lives are quite full, and full mostly of joy — though I do not always remember that on the days when parenting is hard and tiresome, as inevitably it sometimes is. It is fun watching our little girls turn into young women, even as this transition comes with its own host of new complications and challenges. (Puberty and adolescence: what a ride! With only more to come!)</p>
<p>We continue to be grateful for dear friends in a healthy — imperfect, but healthy — congregation at Holy Trinity Anglican Church. Just this past Monday, we spent almost four hours out with some of our good friends celebrating Jaimie’s birthday, and it was sheer joy throughout. And as one of them commented afterward, we could have spent another six — we barely touched on so many good things! Good friendships like this are priceless, and the more so to me because I had spent so much of my adult life wondering if I would <em>ever</em> have them in person. Now we have many.</p>
<p>On a related note, this year we started hosting a monthly Happy Hour in our home, to which we have simply invited a bunch of friends and asked people to bring food or drink to share. We did not actually manage to host every month, but simply having it on the calendar meant that we did manage more months than not. More than that, knowing that we <em>were</em> doing it every month meant that missing one month was not the end of the world — whether because we had to cancel, as we did a couple of times, or because guests had to miss, as inevitably people did courtesy of schedule concepts. There’s always the next month!</p>
<p>In December, we went a step further and transformed it into a Fancy Christmas Party — with a dress code: ladies in cocktail dresses, men in at least slacks and a blazer. We said<span class="push-double"></span> <span class="pull-double">“</span>black tie allowed but not required” (because I don’t have a tux; Jaimie has the appropriate getup and would have killed it, of course), and delightfully one of our friends <em>did</em> show up in a tux. Personally, I hope to have acquired a tux by next year just so I can host in it. The party was one of my favorite nights of the whole year and I cannot wait for it to go from<span class="push-double"></span> <span class="pull-double">“</span>one-off” to<span class="push-double"></span> <span class="pull-double">“</span>tradition”.</p>
<p>If you haven’t tried anything like this, you should: the Christmas party required a bit more preparation and cleanup, but the Happy Hour required relatively little and was never especially burdensome.<span class="push-double"></span> <span class="pull-double">“</span>Have a bunch of friends over with good food and drink” is something our culture could use a lot more of — and used to do a lot more of.</p>
<p>Perhaps the most notable thing to me in this<span class="push-double"></span> <span class="pull-double">“</span>everything else” bucket has been realizing the extent to which Jaimie and I are no longer the<span class="push-double"></span> <span class="pull-double">“</span>young people” at church. One of our daughters is about to be in high school, for goodness’ sake: of <em>course</em> we are not the young people! Much as I <a href="https://v5.chriskrycho.com/journal/2025-in-review/professional/#:~:text=Perhaps%20the%20most,this%20age%20bracket!">commented</a> about my role at Vanta, I am increasingly aware as I look around our church that increasingly it is our responsibility not only to participate in the life of the church but to lead.</p>
<p>Nothing brought this home to me more forcefully this year than having a few younger adults in the congregation very distinctly connect with Jaimie and me <em>as</em> an older couple in their lives. None of that was explicit, and as a result it actually took me a bit to recognize what I was seeing, but once I saw it, I could not <em>un</em>-see it. And of course that is true! A decade ago, we were looking at couples a decade ahead of us. The difference is that we’re now in our late 30s, so we can be the couple a decade ahead in life. It is a bit odd to consider that I am only 18 months away from being 40: as much as 30 seemed a big milestone, 40 seems a bigger one — well into middle adulthood.</p>
<p>In so many parts of life, no one really tells you these transitions are coming. We should, though! Again, as I said in the Professional update about the same dynamic in our careers, there is more to say here — I hope to write a little more about this in a dedicated post sometime soon.</p>
<p>In all these areas, though, I am glad to be able to say that we are doing well. Not every year have I been able to say that! But for 2025, I can.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20The%20Rest%20of%20Life">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="parenting"/><category term="family"/><category term="church"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/professional/</id><title type="html">[journal] 2025 in Review: Professional</title><published>2025-12-31T16:09:00.000-07:00</published>
            <updated>2025-12-31T16:09:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/professional/'/>
            <summary type="html">Getting things going at Vanta and shipping a lot in my Year of Shipping.
</summary>
            <content type="html">
               <![CDATA[<p><i>Getting things going at Vanta and shipping a lot in my Year of Shipping.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>This year, I had two major areas of<span class="push-double"></span> <span class="pull-double">“</span>professional” work: <a href="https://v5.chriskrycho.com/journal/next-vanta/">joining Vanta</a> in April and my <a href="https://v5.chriskrycho.com/topics/year-of-shipping/">year of shipping</a>. Both of these went pretty well overall.</p>
<p>Joining Vanta was, of course, a big change from what I had spent the preceding year and a half doing, and a big change even from my time at LinkedIn. There’s a huge difference between doing the same basic kind of work at a megacorporation and doing it at a hypergrowth startup. I wrote a bit <a href="https://v5.chriskrycho.com/journal/next-vanta/">about joining Vanta</a> when I started, and I noted that<span class="push-double"></span> <span class="pull-double">“</span>hypergrowth” through the 1,000 employee mark represented<span class="push-double"></span> <span class="pull-double">“</span>a new set of challenges and opportunities” and that has certainly proven out.</p>
<p>Most of my work this year has been focused on making both our codebase and our processes scale. That meant everything from getting into nitty gritty details of our use of TypeScript in the codebase and solving nasty type checking performance problems to leading one of our cross-cutting all-engineering initiatives. I have done all sorts of other things along the way, too, unsurprisingly, from mentoring other engineers, to doing design and architecture sessions with other teams as they tackle rewrites of important parts of the application, to an awful lot of interviews. It has been <em>busy</em>.</p>
<p>Perhaps the most striking part of these first 8 months at Vanta was looking around and realizing that I am not only a leader, but one of the most senior and experienced leaders at the company. I have been writing software professional since some of my colleagues were in elementary and middle school. There comes a point in all of our lives where we find that we are not just grown-ups, but indeed the people on whose shoulders much of the responsibility falls, because there is no one else who is going to solve any given set of problems. Often no one else even has the experience and context to <em>see</em> the problems, still less to figure out how to fix them. That point is one well-taken in general for folks in this age bracket! (More on this some other time soon!)</p>
<p>My<span class="push-double"></span> <span class="pull-double">“</span>year of shipping” went better and further along some axis than I expected at the start of the year, while seeing much less progress than I might’ve hoped to along others. Unsurprising! This was always going to be an area where I was going to do what I could, when I could, and that often meant following my fancy where it led me, given that it had to come in after work and other commitments. Mainly, then, I did a lot of incremental work on <a href="https://true-myth.js.org">True Myth</a>, the library a friend and I wrote now eight years ago for safer and more robust handling of errors, nothing, and as of late last year also synchrony in TypeScript.</p>
<p>Since the start of the year, True Myth releases have included:</p>
<ul>
<li>
<p>a new <code>Task</code> type for fallible asynchronous operations, with full parity for the built-in <code>Promise</code> in JavaScript as well as an <abbr title="application programming interface">API</abbr> for retries that I really like.</p>
</li>
<li>
<p>a <em>bunch</em> of new utilities and tools across the <code>Result</code>, <code>Maybe</code>, and <code>Task</code> types.</p>
</li>
<li>
<p>a brand new documentation site with many fixes for the existing documentation, though there are sadly still a bunch of broken examples — getting that fixed is one of my personal hopes for 2026.</p>
</li>
<li>
<p>a dedicated integration with <a href="https://zod.dev">Zod</a> and out of the box <a href="https://standardschema.dev">Standard Schema</a> integration.</p>
</li>
</ul>
<p>I also published a couple other very small things. The first was a tiny little tool called <code>jj-gcp</code> that I built (and still use off and on) that uses <abbr>LLM</abbr>s to generate a branch name for an anonymous <code>jj</code> branch before pushing it with <code>jj git push</code>. The second was a simple <a href="https://www.barebones.com/products/bbedit/">BBEdit</a> syntax <a href="https://github.com/chriskrycho/bbedit-jj-syntax" title="a tiny little bit of software">definition</a> for <a href="https://www.jj-vcs.dev/latest/">Jujutsu</a> commit messages.</p>
<aside>
<p>Yes, I continue to use Jujutsu as my main version control tool. Every single commit I have written at Vanta has been done with <code>jj</code>, and it has been absolutely invaluable. I do a <em>lot</em> of sets of big cross-cutting refactors that I then split into smaller chunks to land independently, and I use the workflow I described <a href="https://v5.chriskrycho.com/journal/jujutsu-megamerges-and-jj-absorb/">here</a> pretty much constantly. I have plausibly worked more on<span class="push-double"></span> <span class="pull-double">“</span>megamerge” topologies than<span class="push-double"></span> <span class="pull-double">“</span>normal” branch topologies this year!</p>
</aside>
<p>If you want to poke at any of the details, they’re all listed under <a href="https://v5.chriskrycho.com/topics/year-of-shipping">my Year of Shipping topic</a>.</p>
<p>Looking forward, I hope to make 2026 another such year of shipping, though likely with less focus on True Myth and more on other side projects. I have made a <em>lot</em> of progress on getting my extremely bespoke and personal site generator working the way I want, for example, and only have one last yak to shave (I think!)… but it is a very large one. That said, it is also one that I expect to yield dividends for me in a bunch of areas only tangentially related at most to building websites, so I am excited to spend a chunk of the year shaving that last big yak.</p>
<p>In any case, having this explicit goal was good for me this year. Much like my commitment to publishing my music newsletter every month, it was both focusing and motivating for me, because I had publicly committed myself to getting things out into the world.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Professional">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="software development"/><category term="career"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/music/</id><title type="html">[journal] 2025 in Review: Music</title><published>2025-12-31T12:25:00.000-07:00</published>
            <updated>2025-12-31T12:25:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/music/'/>
            <summary type="html">Symphony progress, an &amp;lt;abbr title=&amp;quot;extended play&amp;quot;&amp;gt;EP&amp;lt;/abbr&amp;gt; release, social media sadness, and more.
</summary>
            <content type="html">
               <![CDATA[<p><i>Symphony progress, an <abbr title="extended play">EP</abbr> release, social media sadness, and more.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>This year I:</p>
<ul>
<li>I composed and published <a href="https://music.chriskrycho.com/works/holy-saturday-2025/"><cite>Holy Saturday</cite></a>, a short chamber work, with versions <a href="https://chriskrycho.bandcamp.com/track/holy-saturday-version-for-piano">for piano</a>; <a href="https://chriskrycho.bandcamp.com/track/holy-saturday-version-for-violin-viola-cello-and-contrabass">for violin, viola, cello, and contrabass</a>; and <a href="https://chriskrycho.bandcamp.com/track/holy-saturday-version-for-chamber-orchestra">for chamber orchestra</a>.</li>
<li>I finished a first draft of the third movement of the symphony I am writing.</li>
<li>I wrote <a href="https://soundcloud.com/chriskrycho/on-the-craft">a tiny bit of music</a> for <a href="https://www.youtube.com/@ChrisKrycho-Music">my music-focused YouTube channel</a>.</li>
</ul>
<p>See <a href="https://newsletter.music.chriskrycho.com/archive/december-2025-how-the-year-went/">the corresponding issue</a> of <a href="https://newsletter.music.chriskrycho.com">my music newsletter</a> for more details and reflection on all of this!</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Music">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="composing"/><category term="music"/></entry><entry><id>https://v5.chriskrycho.com/notes/invalid-email-address-error-in-apple-mail/</id><title type="html">[notes] “Invalid Email Address” Error in Apple Mail</title><published>2025-12-30T11:23:00.000-07:00</published>
            <updated>2025-12-30T11:23:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/invalid-email-address-error-in-apple-mail/'/>
            <summary type="html">Talk about poor &amp;lt;abbr title=&amp;quot;user interface&amp;quot;&amp;gt;UI&amp;lt;/abbr&amp;gt; design!
</summary>
            <content type="html">
               <![CDATA[<p><i>Talk about poor <abbr title="user interface">UI</abbr> design!
</i></p><p>Back in November, I had cause to update my password in Apple Mail on my iPhone,<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> and ended up seeing a thoroughly inscrutable error:<span class="push-double"></span> <span class="pull-double">“</span>Invalid Email Address”. Seeing as I had not changed the email address used for the account settings, only the password, this made absolutely no sense.</p>
<p>The problem, it turned out, was that I had aliases set up with which I can reply, because I have multiple domains that run through the same email account transparently. The solution was to remove all of the aliases and retain only the main email address for the account, confirm the password change, and then add back the aliases.</p>
<p>This is a terrible error message, and frankly a dumb design (I would just call it a bug, in fact!), But hopefully this explanation and work around will help someone else out there.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>I’d also love to have a better email app but for my purposes — using <abbr title="Internet Message Access Protocol">IMAP</abbr> with <a href="https://join.fastmail.com/4dcac080">Fastmail</a> (<em>n.b.</em>: affiliate link) — or <abbr title="JSON Meta Application Protocol">JMAP</abbr> even! — nothing I have tried is better and most are worse. Alas, we find ourselves in a world of stagnant app development. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20%E2%80%9CInvalid%20Email%20Address%E2%80%9D%20Error%20in%20Apple%20Mail">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Apple"/><category term="software development"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/health-and-fitness/</id><title type="html">[journal] 2025 in Review: Health and Fitness</title><published>2025-12-29T12:54:00.000-07:00</published>
            <updated>2025-12-29T12:54:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/health-and-fitness/'/>
            <summary type="html">A couple of marathons, a bicycle tour, and… passing out and going to the ER. What a year.
</summary>
            <content type="html">
               <![CDATA[<p><i>A couple of marathons, a bicycle tour, and… passing out and going to the ER. What a year.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>This was perhaps the strangest year in memory for me in terms of health and fitness. On the one hand, I spent a big part of the year dealing with ongoing challenges related to a herniated disc. On the other hand, <em>despite</em> those challenges, I ran my first two marathons and they went smashingly well, and I also completed the longest bike rides I have ever done.</p>
<p>Last October, I started lifting weights as part of an effort to avoid injury, and ended up hurting myself quite badly. It turns out that single-leg Romanian dead lifts are best approached very carefully, with someone who knows what they’re doing, and at much lower weights than I used. The resulting herniated disc left me with both acute and chronic problems that affected the rest of last year and much of this year.</p>
<p>My plan at the start of the year was:</p>
<ul>
<li>Run the Denver Colfax Marathon and see what the marathon is like (my<span class="push-single"></span> <span class="pull-single">‘</span>A’ race for the spring).</li>
<li>Participate in the Courage Classic fundraiser cycling tour, riding the long routes if possible.</li>
<li>Run the Indianapolis Monumental Half Marathon event (my<span class="push-single"></span> <span class="pull-single">‘</span>A’ race for the fall).</li>
<li>Stay at my target weight.</li>
</ul>
<p>The injury meant that this did not quite go to plan. The target weight bit I pretty much nailed. The rest of it, well… let’s get into it.</p>
<hr>
<p>All last winter and spring I worked on slowly healing up from the herniated disc — in part by training. My physical therapist and the orthopedic specialist I saw agreed that as long as running was helping and not hurting, I not only could but <em>should</em> keep doing it. Over the course of the late winter and spring, running was great, and my back issues and associated sciatica slowly improved. By March or so, I felt normal, and was turning in training runs that had me hopeful for my marathon debut. When I actually ran the race, it went better than I even hoped. I ran it only 3 seconds per mile slower than I ran the <em>half marathon</em> event at Colfax in 2024, and notably faster than any half marathon pace I had <em>ever</em> run before 2024. There’s a more detailed race report <a href="https://v5.chriskrycho.com/journal/2025-colfax-marathon-race-report/">here</a> if you want more details!</p>
<p>After a breather, I started working on building toward the Courage Classic fundraiser bicycle tour and my fall<span class="push-single"></span> <span class="pull-single">‘</span>A’ race of the Indianapolis Half Marathon. I had <em>so</em> much fun with Colfax that I started mulling on running the Boulderthon Marathon as a<span class="push-single"></span> <span class="pull-single">‘</span>B’ race. And then, the day after a slightly-too-long bike ride to celebrate my birthday — a long ride has become a tradition for me over the past few years — my back flared up badly again. This time, it turned into awful overnight sciatica that meant I was sleeping only about <dash-wrap>5½ – 6</dash-wrap> hours per night throughout much of June and July, which in turn made training quite difficult as fatigue piled up.</p>
<p>I ended up taking some time off as I started getting physical burnout symptoms, and managed to ride the Courage Classic well — doing the 60 net-downhill miles of the 80-mile long on the first day (not doing the climb back up over Vail Pass, because I thought I probably could but would risk exacerbating injury) and the normal “medium” 40-ish-mile course the second day, and it felt great.</p>
<p>I chose at that point not to try to <em>race</em> the Boulderthon Marathon event in the fall, but to leave open the options of running it at an easier pace or of dropping down to the half marathon distance — either way, still aimed at Indianapolis. I started a proper half marathon training plan a week or so later, and things went pretty well for a while.</p>
<p>In the end, I ran the Boulderthon Marathon event, <em>not</em> racing it, but treating it as a very long fitness-builder workout: alternating two kilometers easy, one kilometer at marathon pace. The last few miles I was a little tired, but nothing to write home about — indeed, it was easier than many other workouts I had done. I ended up finishing at 2:54:57, averaging a 6:40/mile pace, which surprised me for how fast it was — I had gone out expecting to finish right around the 3 hour mark — but perceived exertion had felt right and heart rate agreed that I was <em>not</em> over-doing it.</p>
<p>The next week I participated in a race as a pacer for the first time, running with another guy for the lead pace group at the Colorado Springs Half Marathon. Pacing was a <em>blast</em>, and I definitely hope to do more of it in the future. It was really cool having folks at the end tell us that they hit their goals because we were there to run with, or to chase, or to just-barely-hang-onto at the tail end of the race. I have never run with a pacer group when racing — at first because I was just trying to find my own pacing, but then because I have been faster than any available pace groups for a long time (not bragging, just the facts), so I had never really experienced that dynamic. It was quite rewarding, and races are fun to participate in even when not racing, so I expect to do more of this!</p>
<p>However, in the weeks before those two races, I was getting a bunch of nagging fatigue and near-burnout symptoms again, even though I was<span class="push-double"></span> <span class="pull-double">“</span>only” doing a (hard) training build for a half marathon. The two days after the Colorado Springs Half, I felt <em>bad</em>, even though the half had been one of my easier long runs in weeks, and didn’t directly leave me feeling fatigued at all. After talking with Jaimie and various other friends, and considering, I decided to pull the plug and not run Indianapolis after all. A bunch of things about my body were just indicating that I was a bit overcooked and needed to back off.<span class="push-double"></span> <span class="pull-double">“</span>Better to stay healthy and run another year”, I thought.</p>
<p>This proved an <em>extremely</em> providential decision, albeit an ironic one.</p>
<hr>
<p>That very next Saturday, I had to pull our ~55-pound dog away from something nasty in the yard, because her collar was off and my wife couldn’t get the dog away from it. Even though I tried to use my legs rather than my back, I ended up with a classic lift-and-twist motion, and I felt my back <em>pop</em> in a very bad way, and it immediately started tightening back up. I knew this was the herniated disc flaring up again. I tried to walk enough and stay mobile enough to keep it from getting worse, and for the rest of the day, it seemed like it was bad but not terrible.</p>
<p>It got worse, though: the next morning I rolled out of bed — literally rolled, because the pain was pretty bad when I tried to sit up at all — and then tried to carefully stretch and get up off the floor so I could go to the bathroom. The pain was so agonizing that it took me several tries over the course of a few minutes to find a way to lever myself off the floor and walk into the little water closet in our master bathroom. Once I was standing, the pain diminished a ton, which seemed like a positive sign, until I walked into the water closet and flipped on the lights and discovered that the wall was swimming in front of me.<span class="push-double"></span> <span class="pull-double">“</span>That’s weird, doesn’t seem good…” I thought, and then then next thing I knew I was on the ground looking up at the toilet instead of down at it.</p>
<p><a href="https://www.mayoclinic.org/diseases-conditions/vasovagal-syncope/symptoms-causes/syc-20350527">Vasovagal syncope</a> is a reaction — sometimes an overreaction — to certain triggers. Your heart rate and blood pressure drop dramatically, and you can faint as a result. This is what happens when people pass out at the sight of blood, for example. This is why the advice is to put your head between your knees or lie down if you start feeling that way. But vasovagal syncope is also a natural response to overwhelming pain. When I stood up and the pain seemed to drop dramatically, it wasn’t because the pain was gone. It was because the reduced blood flow to my brain meant I wasn’t processing it consciously in the same way, and was indeed short on consciousness in general. I had never passed out before! It was novel! It was not fun. I would not recommend it.</p>
<p>I let out some loud, distressed noises, and — not yet realizing what the underlying mechanics here were — tried to get off the floor again. Jaimie came over, hearing me calling out, and I explained that I had passed out. Again, I found that straightening normally was impossible because excruciating, but that if I levered myself <em>just so</em>, I could get to vertical. But when I got to vertical, I was immediately extremely dizzy and saw the room starting to spin, and said,<span class="push-double"></span> <span class="pull-double">“</span>Nope, I’m going to pass out again if I stay on my feet.” I carefully laid myself down on my back — the one position that only hurt a <em>lot</em> instead of <em>unbearably</em>, and told Jaimie we needed to call 911. Also new to me!</p>
<p>I ended up going to the hospital in an ambulance (also new to me!) and getting my first-ever dose of morphine to deal with the pain (also new to me!) and getting a <abbr title="computed tomography">CT</abbr> scan to make sure I hadn’t fractured part of my spine, which thankfully I had not. Then, with a new prescription of steroids to help address the inflammation around the nerve and advice to cycle ibuprofen and acetaminophen, I was discharged and sent home. Since then, I have been working with a good pain management doctor, several physical therapists, and an orthopedic specialist to get healthy.  I have confirmed via <abbr title="magnetic resonance imaging">MRI</abbr> that there is nothing else abnormal going on — just a worsened version of the same disc herniation from a year ago.</p>
<p>Things are all tracking the right direction, albeit more slowly than I would like. I got to the other side of <em>horrific</em> sciatica that followed the initial injury — I was sleeping only <dash-wrap>4&thinsp;&ndash;&thinsp;5</dash-wrap> hours a night for about a month — courtesy of a central nervous system depressant that I’ll be on for at least a few more months. I am back to running — training, with help from a coach, for a very relaxed time at the Boston Marathon, and holding the whole thing with an open hand because I’d rather be healthy than run it. There’s always another year, as I was telling myself about Indianapolis just before this happened! (I was grateful that I had already reconciled myself to not running Indianapolis when the injury happened.<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup>) I am able to sit for a few hours at a stretch again, I no longer require pain meds most days or nights, and I am sleeping well. I’m on the mend.</p>
<p>And I’m doing a lot of Pilates, and expect I will be forever, as the only shot I have at not going through this and worse in the future.</p>
<hr>
<p>To wrap this up on a more positive note, a few notes on what I learned about myself as an athlete this year — </p>
<p>One of the big things I took away from the combination of the two marathons was that <em>this</em> is what my body loves. I have known for years that I am much more of a<span class="push-double"></span> <span class="pull-double">“</span>slow twitch”, aerobic runner than a<span class="push-double"></span> <span class="pull-double">“</span>fast twitch”, anaerobic runner. (Even today, I have friends I am minutes per mile faster than in a long race, but who can handily outrun me over short distances.) From the start of running seriously, my body responded very quickly and effectively to aerobic training. Meanwhile,<span class="push-double"></span> <span class="pull-double">“</span>tempo” and speed work have been difficult and the rewards from them have come very slowly. This had long made the half marathon a sweet spot for me, because it is a largely aerobic event, though one that burns an awful lot in the last few miles in particular, and that as a friend put it to me a few days ago<span class="push-double"></span> <span class="pull-double">“</span>still feels like racing” because it has a real speed component.</p>
<p>What is more, shorter distances have always just been brutally painful for me, because they push into speed territory that makes my (very mild) exercise-induced asthma flare up. Everyone hurts during faster races, but the chest pain I get is <em>awful</em>, and it always has been. I had to have an inhaler to be functional in high school football workouts, and while I don’t need one today, I do still get that agonizing, bent-over-and-cannot-continue pain when I am pushing into those ranges today. The workouts where I am likeliest to have to<span class="push-double"></span> <span class="pull-double">“</span>pull the plug” are those where I am running <abbr title="5 kilometer">5K</abbr> pace or faster and it’s cold.</p>
<p>Going into this year’s training, then, I knew that I perform very well aerobically, and that my body has always responded extremely well to aerobic training, and that I have managed to use speed work well <em>enough</em> to turn that aerobic talent into fairly fast (for amateurs!) times in half marathons. I did not know what to expect from the experience of running a marathon by comparison. What I learned is: my body <em>loves</em> marathon training and racing. The whole thing felt like I had finally found what I am best-suited-for in running. A friend got a video of me running by at mile 16 of Colfax, and I was working, but I was working in a comfortable, at-ease way I have never felt in any other context, and having a blast.</p>
<p>I’m hopeful, looking forward, that I’ll be healthy enough to run a race <em>hard</em> again in the fall. In the meantime: onwards, <em>carefully</em>.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Counterfactuals: it’s possible I would not have gotten injured this way at all if I had <em>not</em> made that decision, of course. I might well have been out on a long run that morning; certainly the timing and dynamics of the issue with the dog would have been completely different. It’s also possible that the <em>letdown</em> from taking a few days off combined with the dog situation to cause the herniation to flare up. But it’s impossible to know, and I am not worried about it, even if I have considered it with some bemusement. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Health%20and%20Fitness">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="fitness"/><category term="health"/><category term="running"/></entry><entry><id>https://v5.chriskrycho.com/notes/a-feed-bug-i-keep-tripping-over/</id><title type="html">[notes] A Feed ‘Bug’ I Keep Tripping Over</title><published>2025-12-29T09:32:00.000-07:00</published>
            <updated>2025-12-29T09:51:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/a-feed-bug-i-keep-tripping-over/'/>
            <summary type="html">Or, one of the limitations of using version-controlled plain text as a content management system.</summary>
            <content type="html">
               <![CDATA[<p><i>Or, one of the limitations of using version-controlled plain text as a content management system.</i></p><p>A little bit ago, I changed the <abbr title="universal resource locator">URL</abbr> for <a href="https://v5.chriskrycho.com/journal/friendly-little-wrapper-types/">a post</a> I published on Saturday so the <abbr>URL</abbr> would match the title of the post. I renamed the source file, which my static site generator uses to generate the slug automatically, and added a redirect to my <a href="https://render.com">Render</a> config. Unfortunately, I forgot one important step in the rename process: adding a bit of metadata to the renamed post (which I name <code>feedId</code>) to match the original slug so that it would not be treated a new feed entry by subscribers to the feed.</p>
<p>The net was that the same blog post showed up for any of you reading along in feed readers or via email subscription, for which I apologize!</p>
<p>The<span class="push-double"></span> <span class="pull-double">“</span>bug” to which the title of this post refers is really both a limitation of the current implementation of my website and a generally challenging design issue for website generators that use plain text files in a version controlled repository to build the site, rather than a more traditional <abbr title="content management system">CMS</abbr>. In a traditional <abbr>CMS</abbr>, most posts have a unique identifier living in a database — an identifier that is stable regardless of the title or slug of the post. In a well-behaved <abbr>CMS</abbr><span class="push-single"></span><span class="pull-single">’</span>s feed generator that identifier (or one derived from it) is also the identifier for the feed item, which prevents this issue from showing up.</p>
<p>With plain text files on disk as the source of truth, though, no such stable identifier exists, at least by default! This makes it much harder to avoid accidentally doing what I did when renaming a file. I can certainly think of process- or tool-based ways to do it, including making your site generator smart enough to handle everything involved with this kind of rename and only conducting renames using the site generator. (This is probably what I will do with the next version of my site, with a generator I have built from scratch for my own purposes.) With a<span class="push-double"></span> <span class="pull-double">“</span>general-purpose” site generator like <a href="https://www.11ty.dev">the one I currently use</a>, though, this is a pretty difficult problem to solve robustly. I<span class="push-double"></span> <span class="pull-double">“</span>just” have to remember.</p>
<p>This post is thus three things:</p>
<ul>
<li>A <em>mea culpa</em> for my readers.</li>
<li>An explanation of the basics of the underlying issue for other folks out there.</li>
<li>A way of trying to make this problem<span class="push-double"></span> <span class="pull-double">“</span>stick” in my mind a bit better for as long as I am using my current site generator.</li>
</ul>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20A%20Feed%20%E2%80%98Bug%E2%80%99%20I%20Keep%20Tripping%20Over">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="software development"/><category term="web development"/><category term="site meta"/></entry><entry><id>https://v5.chriskrycho.com/journal/friendly-little-wrapper-types/</id><title type="html">[journal] Friendly Little Wrapper Types</title><published>2025-12-27T15:13:00.000-07:00</published>
            <updated>2025-12-30T09:52:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/friendly-little-wrapper-types/'/>
            <summary type="html">What you can do with a “thing” in your system really, really matters!
</summary>
            <content type="html">
               <![CDATA[<p><i>What you can do with a “thing” in your system really, really matters!
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> Software developers. Assumes basic knowledge of wrapper types and uses some <a href="https://martinfowler.com/bliki/DomainDrivenDesign.html">Domain-Driven Design</a> concepts; discusses about software services and assumes a fair bit about large systems. You’ll follow along fine without knowing much about either, though, as long as you know some basics of software.</p>
<hr/><p>A while back I was having a friendly debate with a colleague about whether there’s value in providing an opaque<span class="push-double"></span> <span class="pull-double">“</span>wrapper” type around things like identifiers — a user <abbr title="identifier">ID</abbr>, for example — in a service that doesn’t treat those as a core concern.</p>
<p>What I mean by an opaque wrapper type is something like this in TypeScript:</p>
<pre><code class="language-typescript"><span class="hljs-keyword">class</span> <span class="hljs-title class_">UserId</span> {
  #<span class="hljs-attr">value</span>: <span class="hljs-built_in">string</span>;

  <span class="hljs-title function_">constructor</span>(<span class="hljs-params"><span class="hljs-attr">value</span>: <span class="hljs-built_in">string</span></span>) {
    <span class="hljs-variable language_">this</span>.#value = value;
  }

  <span class="hljs-title function_">serialize</span>(): <span class="hljs-built_in">string</span> {
    <span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.#value;
  }
}
</code></pre>
<p>Or like this in Rust:<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup></p>
<pre><code class="language-rust"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">UserId</span> { value: <span class="hljs-type">String</span> }

<span class="hljs-keyword">impl</span> <span class="hljs-title class_">UserId</span> {
    <span class="hljs-keyword">fn</span> <span class="hljs-title function_">new</span>(value: <span class="hljs-type">String</span>) <span class="hljs-punctuation">-&gt;</span> UserId {
        UserId { value }
    }
    
    <span class="hljs-keyword">fn</span> <span class="hljs-title function_">serialize</span>(<span class="hljs-keyword">self</span>) <span class="hljs-punctuation">-&gt;</span> <span class="hljs-type">String</span> {
        <span class="hljs-keyword">self</span>.value
    }
}
</code></pre>
<p>Types like this get your code away from<span class="push-double"></span> <span class="pull-double">“</span>primitive obsession”: the software design anti-pattern of leaving many (all too often <em>most</em>) types in the system as just the primitives supplied by the programming language — numbers, strings, booleans, and so on. Even though the underlying data may be just one of those primitives, the <em>semantics</em> of the data are not necessarily the same as those. The classic example is an email that has been tested to conform to <a href="https://datatracker.ietf.org/doc/html/rfc5322#section-3.4.1">the specification</a> (<abbr title="request for comments">RFC</abbr> 5322). You can reduce — quite dramatically — what the rest of your system has to concern itself with if you <a href="https://v5.chriskrycho.com/journal/where-dry-applies/#:~:text=Repetition%20of%20the,in%20a%20codebase.">isolate</a> parsing the email to just one part of your system, and use the tools of your programming language to <a href="https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-validate/">capture that fact</a>.</p>
<p>For example, you might write something like this for email parsing in Rust, to capture the fact that not all strings are valid emails, and to let the rest of the system reliably <em>know</em> that it has a carefully-parsed email:</p>
<pre><code class="language-rust"><span class="hljs-keyword">struct</span> <span class="hljs-title class_">Email</span> { value: <span class="hljs-type">String</span> }

<span class="hljs-keyword">impl</span> <span class="hljs-title class_">TryFrom</span>&lt;<span class="hljs-type">String</span>&gt; <span class="hljs-keyword">for</span> <span class="hljs-title class_">Email</span> {
    <span class="hljs-keyword">type</span> <span class="hljs-title class_">Error</span> = ParseError;

    <span class="hljs-keyword">fn</span> <span class="hljs-title function_">try_from</span>(s: <span class="hljs-type">String</span>) <span class="hljs-punctuation">-&gt;</span> <span class="hljs-type">Result</span>&lt;Email, ParseError&gt; {
        <span class="hljs-comment">// actual complicated email parsing</span>
    }
}

<span class="hljs-keyword">enum</span> <span class="hljs-title class_">ParseError</span> {
    MissingLocalPart,
    MissingAmpersat,
    MissingDomain,
    InvalidLocalPart,
    InvalidDomain,
    <span class="hljs-comment">// ...</span>
}
</code></pre>
<p>My colleague’s contention was that while this is obviously valuable in the case of something like email parsing, it’s just needless complexity in contexts where all you have is a simple identifier that isn’t relevant to the service in question — people will just pass it through anyway, right?</p>
<p>An obvious first rejoinder might be that we actually <em>don’t</em> know what people will do with a given item in the system. Long experience has taught me that other developers (including my future self running on insufficient sleep: a situation in which I have sadly found myself a few times this year!) will do all sorts of silly things they shouldn’t. Wrapping a user identifier into a type does not make it <em>impossible</em> for someone to do those silly things, but it adds some real friction: the kinds of things that are likelier to catch someone’s attention in code review or, for that matter, when writing the code in the first place.<span class="push-double"></span> <span class="pull-double">“</span>Why <em>can’t</em> I just use this as a string here?” is a really good question to prompt someone to ask, after all!</p>
<p>My contention here is a much more fundamental design heuristic, though:</p>
<section class="callout" aria-role="note"><p>The choice of representation should not be visible to other users of some piece of data when the underlying data does not have the same semantics as the item being represented.</p>
</section>
<p>Viewed through that lens, this kind of abstraction is no more and no less valuable in a service that merely shuttles a user identifier along than in a service where users are core concerns for the domain. In both cases: the fact that a user ID is a string (or number, or…) under the hood is besides the point. Relevance to the domain is actually irrelevant!</p>
<p>Once you have constructed a <code>UserId</code>, you should not be able to check the length of the string that represents it, or concatenate it with some other string, or get a subslice of it, or to call <code>String.prototype.splice</code> on it and mutate its contents. None of those are meaningful things to do with an identifier. To the contrary: the only semantics associated with the item are its use <em>as an identifier</em>, passed around as a token that other operations can reliably depend on because they can trust it to represent the user and not to behave like a string.</p>
<aside>
<p>This is also one of my favorite parts of the Rust design I showed above. It uses ownership so that the only way to get a <code>UserId</code> is to give up access to the original string, and the only way to get access to a string representation of it is to give up access to the <code>UserId</code>. If you want to work with the thing in a raw form, you can no longer use it as an identifier — and <em>vice versa</em>!</p>
</aside>
<p>Not all abstractions<span class="push-double"></span> <span class="pull-double">“</span>pay for their weight” all the time. Some rarely do — you should only reach for deep and<span class="push-double"></span> <span class="pull-double">“</span>fancy” type abstractions when you’re getting something really significant for their cost — some deeply important constraint there is no other, lighter way to express: Think of a formally-proven <a href="https://github.com/project-everest/mitls-fstar?tab=readme-ov-file">implementation</a> of <abbr title="transport layer security">TLS</abbr> written in <a href="https://fstar-lang.org">F*</a>. Most sit on some middle ground — the normal tradeoffs of do-I-or-don’t-I that we all use in deciding how to build software. Very, very few are the abstractions that are <em>so cheap</em> and their value <em>so high</em> that it basically always makes sense reach for them. This sort of little wrapper type is one of those few.</p>
<p>It is clean and clear. It takes away all the hooks and handles from the underlying representation that the domain object shouldn’t have. It lets you provide to users of the thing just what they should have, while still giving you total freedom to do with the underpinnings what you will. It gives you all of those benefits for almost nothing: a tiny runtime wrapper — or, with the right incantations in some languages, no runtime cost at all<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">1:1</a></sup>; a tiny bit of compile-time overhead — or, with the right incantations in some languages, <em>less</em> compile-time cost than using the<span class="push-double"></span> <span class="pull-double">“</span>primitive” underneath, because the comparisons are simpler.<sup class="footnote-ref"><a href="#fn2" id="fnref2">2</a></sup></p>
<p>Go forth and use little wrapper types like this. They’re cheap-as-free and they’ll make your life much easier in general — and where they add a little friction, it’s for very good reason.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>In Rust I would actually use <code>#[repr(transparent)]</code> to make this truly zero-cost at runtime — no wrapper type at all, at runtime, just the checking at compile time. I do acknowledge that there <em>can</em> be allocation costs from using the wrapper types in something like JavaScript/TypeScript — an extra object allocation for each of these types. That said, unless you are creating many, <em>many</em> of these object types, you likely will not notice. <a href="#fnref1" class="footnote-backref">↩︎</a> <a href="#fnref1:1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Looking at you, TypeScript assignability checks with union types. <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Friendly%20Little%20Wrapper%20Types">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="software development"/><category term="type systems"/><category term="TypeScript"/><category term="Rust"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/public-speaking/</id><title type="html">[journal] 2025 in Review: Public Speaking</title><published>2025-12-27T13:45:02.000-07:00</published>
            <updated>2025-12-27T13:45:02.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/public-speaking/'/>
            <summary type="html">Just one thing—but a big one!</summary>
            <content type="html">
               <![CDATA[<p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. All of the posts are available at the <a href="https://v5.chriskrycho.com/journal/2025-in-review/">2025 in Review</a> series page.</p>
<hr/><p>The year went <em>exactly</em> as intended with public speaking: I gave exactly and only one talk: <a href="https://v5.chriskrycho.com/elsewhere/infrastructure-common-goods-and-the-future-of-open-source-software/">Infrastructure, Common Goods, and the Future of Open Source Software</a>, the opening keynote for <a href="https://www.lambdaconf.us">LambdaConf 2025</a>.<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup> Given it was a keynote, it took a lot of prep time: Any talk takes me <em>many</em> hours to prepare; a 50-minute long keynote all the more so. I also hoped I would be starting a new job (as indeed I did: more on this below) and expected — correctly — that I would be quite busy the rest of the year. I therefore chose not to submit to any other <abbr title="call for proposals/papers">CFP</abbr>s.</p>
<p>That keynote is the talk I am <em>second</em> proudest of in my career to date, after last year’s <a href="https://v5.chriskrycho.com/elsewhere/seeing-like-a-programmer/">Seeing Like a Programmer: Resiliency, Limits, and Moral Hazards in Software Engineering</a>. I am glad to have given it and proud of what I said! That said, I also learned something really important through the experience: I have a far easier time <em>preparing</em> a talk when I have something burning in me to say. I was so honored to be invited to give this keynote that I said<span class="push-double"></span> <span class="pull-double">“</span>yes” basically without thinking about it — but then I struggled <em>hard</em> to come up with first the pitch and then the content of the talk. Honestly, I think it shows. This keynote was a solid talk, but it lacks both the punch and anything like the sophistication of the writing of<span class="push-double"></span> <span class="pull-double">“</span>Seeing Like a  Programmer”.</p>
<p>I have no regrets here — quite the contrary! — , but in the future I will certainly think harder about invited talks vs. pitched talks: not a thing I have ever had to consider before!</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>At which conference Curtis Yarvin, provocateur and fool, also spoke. I’ve been slowly working on an essay about shared stages ever since I found out he’d be there, which may (or may not) make its way to some publication including this one, at some point in the next year. It has been a rough year, though, and time for essay-writing has been limited. <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Public%20Speaking">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="public speaking"/></entry><entry><id>https://v5.chriskrycho.com/journal/2025-in-review/reading/</id><title type="html">[journal] 2025 in Review: Reading</title><published>2025-12-27T13:45:01.000-07:00</published>
            <updated>2025-12-27T13:45:01.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/journal/2025-in-review/reading/'/>
            <summary type="html">My stated goal at the start of the year was to read 25 volumes each of non-fiction and fiction. (I picked 25 volumes for 2025.) I may get there with nonfiction in the next few days — my current count…</summary>
            <content type="html">
               <![CDATA[<p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People who like reading year-in-review summaries. (I always assume that’s mostly just me, a few years in the future!)</p>
<p><b>A bit of context:</b> For many years now, I have made it my habit to write up one of these summaries. In this case, I have tried to make it a bit more digestible by breaking into smaller chunks. You can find them all <a href="https://v5.chriskrycho.com/journal/2025-in-review/">here</a>.</p>
<hr/><p>My stated goal at the start of the year was to read 25 volumes each of non-fiction and fiction. (I picked 25 volumes for 2025.) I <em>may</em> get there with nonfiction in the next few days — my current count is 24 — , but I’m nowhere close with fiction. Fiction is only going to top 5 books this year because I started rereading <cite>Harry Potter</cite> along with my daughters as they started their first reads through it.<sup class="footnote-ref"><a href="#fn1" id="fnref1">1</a></sup></p>
<p>Some of this is down to my habit of reading long, deep essays instead — magazine articles, essay-length blog posts, and the like. That is particularly true of my before-bed reading, which is when I get done a lot of my reading. This is also just the first of the areas where my sleep deficits hit me hard. Nor were my long stints of time awake in the middle of the night conducive for reading or even listening to audiobooks. I had to spend a lot of time pacing, and my brain was so tired that I could barely handle podcast listening a lot of times.</p>
<p>You can see the full list of books I read <a href="https://v5.chriskrycho.com/library/reading-list/#2025">here</a>. My top nonfiction reads for the year, in the order I finished them:</p>
<ul>
<li><a href="https://bookshop.org/a/21126/9780393867237"><cite>Taming the Octopus: The Long Battle for the Soul of the Corporation</cite></a>, Kyle Edward Williams (new)</li>
<li><a href="https://bookshop.org/a/21126/9780593237342"><cite>The Life We’re Looking For: Reclaiming Relationship in a Technological World</cite></a>, Andy Crouch</li>
<li><a href="https://bookshop.org/a/21126/9781541675599"><cite>Dominion: How the Christian Revolution Remade the World</cite></a>, Tom Holland</li>
<li><a href="https://bookshop.org/a/21126/9780593296707"><cite>Status and Culture: How Our Desire for Social Rank Creates Taste, Identity, Art, Fashion, and Constant Change</cite></a>, W. David Marx</li>
<li><a href="https://bookshop.org/a/21126/9780801018664"><cite>The Tech-Wise Family: Everyday Steps for Putting Technology in Its Proper Place</cite></a>, Andy Crouch</li>
<li><a href="https://bookshop.org/a/21126/9780593732540"><cite>Things Become Other Things: A Walking Memoir</cite></a>, Craig Mod</li>
<li><a href="https://bookshop.org/a/21126/9780593086599"><cite>How Infrastructure Works: Inside the Systems That Shape Our World</cite></a>, Deb Chachra</li>
<li><a href="https://bookshop.org/a/21126/9780618257591"><cite>J. R. R. Tolkien: Author of the Century</cite></a>, Tom Shippey</li>
<li><a href="https://bookshop.org/a/21126/9780802126788"><cite>Eccentric Orbits: The Iridium Story</cite></a>, John Bloom</li>
<li><a href="https://bookshop.org/a/21126/9781668053379"><cite>Apple in China: The Capture of the World’s Greatest Company</cite></a>, Patrick McGee</li>
</ul>
<p>The only new fiction to make the list for me this year is <a href="https://bookshop.org/a/21126/9781101972120">Stories of Your Life and Others</a>, by Ted Chiang. The latest Brandon Sanderson doorstopper was fine and fun, and rereading Harry Potter with my girls this week has been fun, but the former is not on my<span class="push-double"></span> <span class="pull-double">“</span>you should go read it” list, and the latter does not need any introduction from me!</p>
<p>One of my goals for next year is to use Instapaper<span class="push-double"></span> <span class="pull-double">“</span>Liked” articles as<span class="push-double"></span> <span class="pull-double">“</span>Best Of” articles, so that I can share my favorite essays at the end of the year. I started moving that way a <em>little</em> bit this year, but I was not perfectly disciplined about it and that list also had some disruption in my move <em>back</em> from Pocket to Instapaper once Kobo launched its Instapaper integration (in the wake of Pocket’s shutdown — more on that later!).</p>
<hr class="footnotes-sep">
<section class="footnotes">
<h2 id="footnotes"><a class="header-anchor" href="#footnotes">Notes</a></h2><ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>They’re 13½ and 11½, and while this is much older than many people let their children read the series, we’ve tried to guide our girls to fiction that works well for them at the ages they are with their own levels of sensitivity. One of them will almost certainly be pausing after the first three books, given the <em>sharp</em> increase in seriousness, tonal darkness, and psychological intensity from <cite>Goblet of Fire</cite> onwards. It’s a big shift! <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%202025%20in%20Review%3A%20Reading">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="annual reflections"/><category term="reading"/></entry><entry><id>https://v5.chriskrycho.com/notes/the-void-of-great-zero-based-budgeting-apps/</id><title type="html">[notes] The Late-2025 Void of Great Zero-Based Budgeting Apps</title><published>2025-12-22T10:00:00.000-07:00</published>
            <updated>2025-12-22T10:00:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/the-void-of-great-zero-based-budgeting-apps/'/>
            <summary type="html">One of a few categories of yaks I steadfastly refuse to shave (but the temptation mounts!).
</summary>
            <content type="html">
               <![CDATA[<p><i>One of a few categories of yaks I steadfastly refuse to shave (but the temptation mounts!).
</i></p><p>It’s that time of year again, when I am wishing desperately that there were good alternatives to <abbr title="You Need a Budget">YNAB</abbr> for zero-based budgeting software — preferably with genuinely great native Mac and iOS apps. There are, as far as I can tell, <em>not</em>.</p>
<p>I have evaluated the alternatives. Scoured the subreddits! Monarch is<span class="push-double"></span> <span class="pull-double">“</span>what if Mint had figured out how to be nice and done some genuinely useful things?” EveryDollar is<span class="push-double"></span> <span class="pull-double">“</span>what if <abbr>YNAB</abbr> were worse and also gave money to a guy I find rather distasteful?” Actual went open-source and is therefore now actually maintained, but I don’t trust their hosting to exist long-term and don’t want to run my own.</p>
<p>Lunch Money looks like it gets close, and I may even give it a try, <em>and</em> I like that it’s a small company, but it’s also hard to tell what their prospects are of being here in five years. (<abbr>YNAB</abbr>: will be here in five years. I just may be five years more annoyed.) Everything else seems to be aimed at dumbing things down or is… let’s go with <em>not to my taste or standards</em> design-wise.</p>
<p>That net of all of that is basically: «sigh»</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20The%20Late-2025%20Void%20of%20Great%20Zero-Based%20Budgeting%20Apps">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author></entry><entry><id>https://v5.chriskrycho.com/notes/some-of-us-actually-like-coding/</id><title type="html">[notes] Some of Us Actually Like Coding</title><published>2025-12-17T18:50:00.000-07:00</published>
            <updated>2025-12-17T18:50:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/some-of-us-actually-like-coding/'/>
            <summary type="html">Yes, even amongst the “senior engineer” cohort. Shocking, I know!</summary>
            <content type="html">
               <![CDATA[<p><i>Yes, even amongst the “senior engineer” cohort. Shocking, I know!</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> People paying attention to and interested in the ongoing “discourse” around <abbr title="large language model">LLM</abbr>s and so-called <abbr title="artificial intelligence">AI</abbr> in software engineering.</p>
<hr/><figure class="quotation">
<blockquote>
<p>Coding agents replace the part of my job that involves typing the code into a computer. I find what’s left to be a much more valuable use of my time.</p>
</blockquote>
<figcaption>
<p> — <a href="https://simonwillison.net/2025/Dec/14/justhtml/#atom-everything">Simon Willison</a>, commenting on <a href="https://friendlybit.com/python/writing-justhtml-with-coding-agents/">How I wrote JustHTML using coding agents</a>.</p>
</figcaption>
</figure>
<p>This theme seems pervasive lately, and there’s a sense in which I understand and indeed already enact some part of what people mean when they say it. I spend a lot of my time doing things that are not writing code because they are more valuable to my employer than writing code is: mentoring, collaborating with engineering management on organizational design, project lead work including developing plans for further projects, you name it. That’s Staff Engineering in a nutshell.</p>
<p>But I <em>enjoy</em> writing code, and am delighted to get opportunities to be<span class="push-double"></span> <span class="pull-double">“</span>typing code into the computer”. So many of these people seem to enjoy something else (even if they once enjoyed writing code, too). That’s fine. But it’s definitely different from me.</p>
<p>I also think a lot of these folks pretty deeply underestimate in these kinds of posts the value of typing it in yourself for learning. They’re doing the equivalent of reading a book full of code samples without typing any of them out<span class="push-double"></span> <span class="pull-double">“</span>by hand”. Anyone who has done that knows that you might learn a bunch that way, but far, far less than you would if you typed them out. (Same as with any other discipline!)</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Some%20of%20Us%20Actually%20Like%20Coding">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="software development"/><category term="AI and ML"/><category term="from my outbox"/></entry><entry><id>https://v5.chriskrycho.com/notes/pop-overs/</id><title type="html">[notes] Pop-Overs</title><published>2025-12-13T12:17:00.000-07:00</published>
            <updated>2025-12-13T12:17:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/pop-overs/'/>
            <summary type="html">A pox upon a dreadful pattern and all its purveyors.</summary>
            <content type="html">
               <![CDATA[<p><i>A pox upon a dreadful pattern and all its purveyors.</i></p><p>The modern web interaction I find most infuriating — given my long use of ad blockers, which remove the truly worst parts — is this: beginning to read some piece, scrolling, and suddenly being interrupted by an email signup pop-over. Substack the exemplar but far from unique. Do you want me to read this piece or do you not? The answer, it increasingly seems to me, is that you do not: You would rather me sign up for your list than read the piece I came to read, of which I have read a few paragraphs at most. I have no idea whether I want to read <em>more</em>; I have not even read <em>this</em>! It is rude. All pop-overs are rude, but this is especially rude.</p>
<p>(The even worse version: Substack and similar obstructing the content of a site with a signup form before I have seen or read anything at all. Perhaps it<span class="push-double"></span> <span class="pull-double">“</span>converts better” but it is absurd and annoying.)</p>
<p>May it stop, and may everyone who has done this in the pursuit of engagement be afflicted with boils: a just punishment for so great a sin.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Pop-Overs">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="web development"/></entry><entry><id>https://v5.chriskrycho.com/notes/sony-alpha-7-4k60-and-aps-c-crop/</id><title type="html">[notes] Sony α7 4K60 and APS-C Crop</title><published>2025-11-29T09:00:00.000-07:00</published>
            <updated>2025-11-29T09:00:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/sony-alpha-7-4k60-and-aps-c-crop/'/>
            <summary type="html">“This operation or setting not available as follows: Rec Frame Rate: 60p”
</summary>
            <content type="html">
               <![CDATA[<p><i>“This operation or setting not available as follows: Rec Frame Rate: 60p”
</i></p><p>This week I was trying to do some video recording directly to my Sony α7R V (for the sake of <a href="https://youtu.be/dVZkAXRutEY">the video essay version</a> of <a href="https://newsletter.music.chriskrycho.com/archive/november-2025-writing-for-your-performers/">this month’s issue</a> of <a href="https://newsletter.music.chriskrycho.com">my music newsletter</a>), and could not for the life of me figure out why it kept reporting that 60p was unavailable when I had been recording in 60p literally five minutes earlier. The error message was inscrutable:</p>
<figure>
<img src="https://cdn.chriskrycho.com/images/camera-screen-error-message.jpg" alt="Sony back panel showing an error message that reads, “This operation or setting not available as follows: Rec Frame Rate: 60p”">
<figcaption>
<p><em>What</em> operation or setting?!?</p>
</figcaption>
</figure>
<p>After a few minutes of mucking around, I finally realized that I had accidentally been tapping the custom button next to the record button on top of the camera — </p>
<figure>
<img src="https://cdn.chriskrycho.com/images/sony-a7rv-top.jpg" alt="The top of a Sony α7R V, with the word ‘whoops’ and an arrow pointing to the C2 button">
<figcaption>
<p>It helps if you hit the right button.</p>
</figcaption>
</figure>
<p> — which I have mapped to toggle between full frame and <abbr title="Advanced Photo System type-C">APS-C</abbr> crop, and had also set the camera to record in 4K60… and <em>apparently</em> that combo isn’t supported. If you try to switch to the <abbr>APS-C</abbr> crop while in a mode where you have set the video recording to 4K60, the camera will just refuse… specifying only that the function is unavailable, and not <em>why</em>. Boo, Sony. Boo.</p>
<p>So if you (including if<span class="push-double"></span> <span class="pull-double">“</span>you” here is just future <em>me</em>) see this message, check that you’re not doing something silly like hitting the C2 button and trying to activate some function that isn’t supported.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Sony%20%CE%B17%204K60%20and%20APS-C%20Crop">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="photography"/><category term="Sony Alpha"/><category term="Sony α7R V"/></entry><entry><id>https://v5.chriskrycho.com/notes/grateful-2025/</id><title type="html">[notes] Grateful (2025)</title><published>2025-11-28T09:50:00.000-07:00</published>
            <updated>2025-11-28T09:50:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/grateful-2025/'/>
            <summary type="html">Prompted by a quiet morning at home on Thanksgiving Day (…and the day after).</summary>
            <content type="html">
               <![CDATA[<p><i>Prompted by a quiet morning at home on Thanksgiving Day (…and the day after).</i></p><p>An incomplete list of things I am grateful for, vaguely in order of importance:</p>
<ul>
<li>
<p>A happy, healthy, thriving marriage to a wonderful woman. And to see <em>her</em> thriving in her various gifts: not only an excellent mother and homemaker (though she very much is), but also an excellent actress, singer, artist, and writer.</p>
</li>
<li>
<p>Happy, healthy daughters who are <em>very</em> 13 and 11 in ways that are sometimes challenging but mostly joyful and excellent.</p>
</li>
<li>
<p><a href="https://www.holytrinityanglican.church">Holy Trinity Anglican Church</a>.<span class="push-double"></span> <span class="pull-double">“</span>Messy but not toxic”, as our rector regularly puts it, and rightly. As I sometimes append when talking to people: Because you don’t get to avoid the<span class="push-double"></span> <span class="pull-double">“</span>messy” part; you <em>only</em> get to choose whether<span class="push-double"></span> <span class="pull-double">“</span>messy” will also mean<span class="push-double"></span> <span class="pull-double">“</span>toxic”.</p>
</li>
<li>
<p>The many good friends in our lives — those in and around our church community, those I have known literally my whole life, those I have been friends with since college, those I have come to know since then, and those (not few!) with whom I have been friends almost entirely via the internet.</p>
</li>
<li>
<p>Opportunities to <a href="https://www.christianitytoday.com/2025/07/dont-conflate-intelligence-with-value/">write</a> and <a href="https://v5.chriskrycho.com/elsewhere/infrastructure-common-goods-and-the-future-of-open-source-software/">speak</a> publicly in ways that I hope will move the needle at least a tiny bit in helpful directions — something I didn’t exactly <em>set out</em> to do earlier in my career but which has become really important to me.</p>
</li>
<li>
<p>The fact that some small list of people cares about my <a href="https://chriskrycho.music">music</a> — the folks who subscribe to <a href="https://newsletter.music.chriskrycho.com">my music newsletter</a> and <a href="https://www.youtube.com/@ChrisKrycho-Music">YouTube channel</a> are few but very encouraging as I keep <a href="https://newsletter.music.chriskrycho.com/archive/november-2024-a-symphony-yes-that-kind/">slogging away at a symphony</a>.</p>
</li>
<li>
<p>Being solidly employed: not a small thing, or remotely guaranteed, in this very wacky software job market!</p>
</li>
<li>
<p><a href="https://loyalcoffee.co">Loyal Coffee</a>. I spend a <em>lot</em> of time there, and it’s a lovely space and very good coffee.</p>
</li>
<li>
<p><a href="https://cinchonacoffee.com">Cinchona Coffee</a>, which I frequent less than Loyal, but which has perhaps the best coffee in Colorado Springs. Bonus: the fact that it’s colocated with <a href="https://www.provisionbread.com">Provision Bread &amp; Bakery</a>, which along with <a href="https://www.nightingalebread.com">Nightingale Bread</a> semi-regularly supplies our family with <em>very</em> yummy bread — and Provision is also a great source of locally-made granola.</p>
</li>
<li>
<p>Jennifer at <a href="https://www.vagaro.com/lincolnstbarbers">Lincoln St. Barbers</a>. Having a reliably excellent haircut is an underappreciated Very Good Thing.</p>
</li>
<li>
<p><a href="https://www.steinberg.net/dorico/">Dorico</a> for writing music. Even after half a decade, I remain incredibly impressed by it; it <em>still</em> feels like a breath of fresh air compared to Sibelius. Every significant work I have composed in that time has been written there.</p>
</li>
</ul>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Grateful%20(2025)">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author></entry><entry><id>https://v5.chriskrycho.com/elsewhere/true-myth-9.3.0/</id><title type="html">[elsewhere] True Myth 9.3.0</title><published>2025-11-25T12:30:00.000-07:00</published>
            <updated>2025-11-30T19:55:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/elsewhere/true-myth-9.3.0/'/>
            <summary type="html">A new &amp;lt;code&amp;gt;inspect&amp;lt;/code&amp;gt; method, some bug fixes, and some documentation fixes.
</summary>
            <content type="html">
               <![CDATA[<p><i>A new <code>inspect</code> method, some bug fixes, and some documentation fixes.
</i></p><p><b><a href='https://v4.chriskrycho.com/2018/assumed-audiences.html'>Assumed audience</a>:</b> TypeScript developers with an interest in even safer typed programming with a functional flair. Assumes a fair bit of types knowledge, but you can get the high level without that!</p>
<hr/><p>Just released: <a href="https://github.com/true-myth/true-myth/releases/tag/v9.3.0">True Myth v9.3.0</a>… and <a href="https://github.com/true-myth/true-myth/releases/tag/v9.3.0">v9.3.1</a>, because I thought it had not published correctly to npm, because npm was lagging and didn’t show the <span class="all-smcp">README</span> for several minutes after publication… and then suddenly <em>did</em>. Love it. You can install either version and functionality will be identical, in any case.</p>
<p>This release comes with bug fixes, docs fixes, and a family of <code>inspect</code> helper functions and methods so you can perform side effects like logging or tracing easily on a <code>Maybe</code>, <code>Result</code>, or <code>Task</code>, including in both chains and with standalone values. There are <code>inspect</code> functions and methods for each core type, along with <code>inspectErr</code> for <code>Result</code> and <code>inspectRejected</code> for <code>Task</code>.</p>
<p>Using <code>inspect</code> with a (contrived) <code>Maybe</code> example looks like this:</p>
<pre><code class="language-ts"><span class="hljs-keyword">import</span> <span class="hljs-title class_">Maybe</span> <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;true-myth/maybe&#x27;</span>;

<span class="hljs-keyword">const</span> <span class="hljs-title function_">log</span> = (<span class="hljs-params"><span class="hljs-attr">value</span>: <span class="hljs-built_in">unknown</span></span>) =&gt; <span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">&quot;The value:&quot;</span>, value);
<span class="hljs-keyword">const</span> <span class="hljs-title function_">randomInteger</span> = (<span class="hljs-params"></span>) =&gt; <span class="hljs-title class_">Math</span>.<span class="hljs-title function_">floor</span>(<span class="hljs-title class_">Math</span>.<span class="hljs-title function_">random</span>() * <span class="hljs-title class_">Number</span>.<span class="hljs-property">MAX_SAFE_INTEGER</span>);

<span class="hljs-keyword">const</span> finalMaybe = <span class="hljs-title class_">Maybe</span>.<span class="hljs-title function_">of</span>(<span class="hljs-title function_">randomInteger</span>())
  .<span class="hljs-title function_">inspect</span>(log)
  .<span class="hljs-title function_">map</span>(<span class="hljs-function">(<span class="hljs-params">n</span>) =&gt;</span> n % <span class="hljs-title function_">randomInteger</span>())
  .<span class="hljs-title function_">inspect</span>(log)
  .<span class="hljs-title function_">andThen</span>(<span class="hljs-function">(<span class="hljs-params">n</span>) =&gt;</span> n % <span class="hljs-number">2</span> === <span class="hljs-number">0</span> ? <span class="hljs-title class_">Maybe</span>.<span class="hljs-title function_">just</span>(n / <span class="hljs-number">2</span>) : <span class="hljs-title class_">Maybe</span>.<span class="hljs-title function_">nothing</span>())
  .<span class="hljs-title function_">inspect</span>(log);
</code></pre>
<p>For any given run, this will always log two values; it will also log a third when the modulo check passes. The resulting <code>finalMaybe</code> is just the normal <code>Maybe</code> value.</p>
<p>v9.3.0 also has an important bug fix for the types for <code>result.all</code>, <code>result.any</code>, and <code>result.transposeAll</code>. An interesting case where the types were complicated enough that <abbr title="TypeScript">TS</abbr> just straight up did not catch the errors, even though no casts were involved — yikes! Fixed, now, though, thanks to a user report.</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20True%20Myth%209.3.0">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Year of Shipping"/><category term="software development"/><category term="TypeScript"/><category term="True Myth"/><category term="open-source software"/></entry><entry><id>https://v5.chriskrycho.com/notes/orion-1.0/</id><title type="html">[notes] Orion 1.0</title><published>2025-11-25T10:30:00.000-07:00</published>
            <updated>2025-11-25T10:30:00.000-07:00</updated>
            <link href='https://v5.chriskrycho.com/notes/orion-1.0/'/>
            <summary type="html">A little less hegemony in the browser ecosystem? Yes, please!</summary>
            <content type="html">
               <![CDATA[<p><i>A little less hegemony in the browser ecosystem? Yes, please!</i></p><p>Today, <a href="https://kagi.com">Kagi</a> published the 1.0 release of their <a href="https://orionbrowser.com">Orion browser</a>: stable and ready for everyone in the Apple ecosystem to use. You can read more about it <a href="https://blog.kagi.com/orion">here</a>:</p>
<blockquote>
<p>In a world dominated by Chromium, choosing a rendering engine is an act of resistance.</p>
<p>From day one, we made the deliberate choice to build Orion on <a href="https://webkit.org/">WebKit</a>, the open‑source engine at the heart of Safari and the broader Apple ecosystem. It gives us:</p>
<ul>
<li>A high‑performance engine that is deeply optimized for macOS and iOS.</li>
<li>An alternative to the growing Chromium monoculture.</li>
<li>A foundation that is not controlled by an advertising giant.</li>
</ul>
</blockquote>
<p>These are all things I value very highly! You should definitely read the rest of <a href="https://blog.kagi.com/orion">the announcement post</a> and <a href="https://orionbrowser.com">download the browser</a>. I’ll content myself with saying that I’ve had Orion on all my devices for a while and quite like it. My<span class="push-double"></span> <span class="pull-double">“</span>daily driver” browser is still Safari, but I reach for Orion regularly, and as they keep pushing it forward I could readily imagine it becoming my daily driver or a constantly-available secondary browser.</p>
<p>It’s fast and lightweight, it’s an extremely well-behaved native app on macOS, iPadOS, and iOS — something all too rare these days! — , and it supports using Firefox and Chrome extensions as well as Safari extensions. It’s really good. So, again, if you haven’t checked it out, <a href="https://orionbrowser.com">you should</a>!</p>
<hr/><p>
                     Thanks for reading my feed! Thoughts, comments, or questions?
                     <a href="mailto:hello@chriskrycho.com?subject=Re%3A%20Orion%201.0">Shoot me an email</a>!</p>]]>
            </content><author>
   <name>Chris Krycho</name>
   <email>hello@chriskrycho.com</email>
   <uri>https://v5.chriskrycho.com/</uri>
</author><category term="Apple"/></entry></feed>
