Sympolymathesy, by Chris Krycho
https://v5.chriskrycho.com/ (RSS)
Make sure that every value you need to use in a minijinja template function implements `serde::Deserialize`, or you will have a bad time.
Historically, conditional types only gave you type safety on the caller side. Now, for a key subset, they give you safety within a function, too.
Some technical notes for thinking about the legal and ethical questions around “generative” AI systems.
Trying to find a job is an exercise in doing a great deal of work and getting nothing for it: which is exhausting.
Especially (but of course not only!) on hard days.
For all the times when I don’t have the discipline to dodge social media and chat myself, I use Freedom to make sure I still do what I most desire.
We heard that there are some big gaps in True Myth’s docs for `Task` in particular. It’s true! Some thoughts on why… and how I hope to fix it.
An experience report “from the field” as it were.
True Myth v8.5 adds a handy new function to allow you to retry any task—with good defaults, and also with great progressive disclosure of complexity.
A very simple tool for getting structured chains of errors in JavaScript using the ES2022 `Error.prototype.cause` property.
I still dislike the book, but I’m not well-studied-enough to review it meaningfully, and I can do better as a reader and reviewer!
If you are redirecting mdBook chapters, make sure you update links in `SUMMARY.md`, or else your redirects will not work.
You can pass a revset, including one that specifies a fileset, to `jj desc` and describe multiple commits at the same time. Cool!
Complexity has to live somewhere; but it does not have to live everywhere.
What should we make of generative AI systems in software engineering?
The little tool I use to generate descriptive branch names for jj is now more configurable and reliable. And I learned some things!
One of the many ways I use a great app in day-to-day life!
And how to fix it as a jj user.
Genre, medium, content… delivery mechanism?
Just like life! And just like life, you just have to deal with it.
Some great additions to my systems thinking vocabulary, courtesy of Lorin Hochstein.
Yes, it makes things look nicer in a very few, very specific places. But it makes it that much worse everywhere else.
The `Task` type is now feature complete. So where does the library go from here?
Recommended: In which Williams demonstrates lucidly and extensively just how much of the modern debates about corporations turns out to be merely an extension of long-running arguments going back over a century. This is an excellent popular history of the corporation in culture in the 20th century.
Adding all the bits we didn’t have in the first Task release… and deprecating some mistakes, too.
You can use `jj squash --from` with a revset to move changes out of a set of commits into another commit. Handy for breaking up changes into small PRs!
Recommended With Qualifications: Much better than average in the “how to be a better thinker” space, and worth a read. Her view on “identity” is almost right, but worth a closer look—especially if, like me, you think identity framed rightly is extremely important!
Year, month, week, day, hour—and probably not further.
Inspiration is not always conscious; sometimes we cannot even say what it is we want to try artistically until we are already trying it.
Years ago, a colleague asked me why I cared about Rust when we would never use it. Part of the answer: that was not my last job.
True Myth now has a tool for safe async in TypeScript: a `Task` type, the glorious combination of a `Promise` and a `Result`.
Reflecting on 2024 helped me see how I should approach 2025: by committing to do things which help me put work into the world—and not to dither.
These days, I speak and write and think in terms of “working effectively” rather than “being productive”—a subtle shift in framing that matters a lot.
I try (and have mostly succeeded for the past year) to do daily, weekly, monthly, and annual reviews with a particular structure: wins, misses, learnings, mulling.
A very strange year: parts of it far exceeding my hopes, others falling rather flat.
My first-ever keynote! I am speaking at LambdaConf 2025, in May 2025, about open source software as a public good—indeed, as infrastructure.
TrainingPeaks Virtual (formerly IndieVelo) will only correctly send incline changes to the bike if it sees the bike primarily as a virtual trainer rather than as a power meter.
Doesn’t that just make things worse somehow?
title: Why the Jujutsu posts are all about differences from Git subtitle: After all, it can do all the normal Git workflows, too… date: 2024-12-25T17:05:00-0700 qualifiers: audience: > Although…
A really handy approach for splitting apart changes into multiple branches but working on their combination.
The built-in functionality is great, actually.
Many workouts include a structured cool-down. The physiological benefits of this are well-known… but there are significant psychological benefits, too.
Recommended With Qualifications: A book of two minds, as it were—the first half interesting and well worth your time, a fascinating look at what we know about the brain hemispheres; the second half an off-the-rails cultural history that goes far beyond the evidence.
It’s one thing to know that perceived exertion is affected by mental state; it’s something else entirely to experience it.
You can use the `components` field of `rust-toolchain.toml` to specify which version of `rust-analyzer` to use in a project.
This should be built in, but it isn’t, so this is of limited use. But not none!
A bunch of small nice improvements… and a rewrite in Rust!
Noteblogging is what I am doing in my “Notes” section, and that Simon Willison does every day: blog as public notebook and notes to friends.
You can publish to GitHub pages via GitHub Actions, but you need to configure both the project’s GitHub Pages setup and its github-pages environment.
Byword.app is still a great writing tool on Mac, despite its having gone without significant updates for the past few years.
If you want your shell scripting to be as bug-free and reliable as possible, use Shellcheck!
Upsides and downsides of configuring your editor to always use the version of rust-analyzer which came with the version of Rust you are using.
My note about using Drop in Rust last week had a serious error!
A deep dive into Rust’s vec::Drain and its Drop implementation as an example of how ownership prevents subtle bugs—memory and otherwise!
Reserve exceptions for exceptional behavior. Use a union type or a `Result` type for excepted errors!
I defined a revset and tweaked my defaults in Jujutsu so now I never have to think about `gh-pages` unless I actively want to.
A software product that is not indulging in winner-take-all, try-to-own-the-world machinations? Is this… possible?
Static types are *always* checking some (subset of) runtime behavior. The interesting question is: How much?
A great idea for a “social” app that is not social *media*—and which fills a gap I have felt for years.
Highlighting an app that is a powerful tool with a bunch of AI features but not a great Mac app says a lot about Apple’s priorities.
You can rebase all branches matching a revset using the `all:` modifier. Incredibly powerful, and super easy to use.
More lints for the sake of fewer SemVer issues in Rust libraries!
Just a quick little video inspired by a friend’s question!
Own your turf! Including, if you have one, a newsletter!
There are easy critiques to make of Bluesky etc., and they are mostly wrong. There are also *deep* critiques, and they may be right.
An opportunity to provide real and actionable information to the Rust project leadership. Take it!
I just published v0.1.0 of a dprint extension for the Nova text editor. It currently handles formatting files.
If you’re looking for a permissive license, this is a good one!