<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Extended Memory on Carl Myers</title><link>https://staging.cmyers.org/blog/</link><description>Recent content in Extended Memory on Carl Myers</description><generator>Hugo</generator><language>en-us</language><copyright>Copyright © 2026, Carl Myers.</copyright><lastBuildDate>Fri, 17 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://staging.cmyers.org/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Lenovo ThinkPad P72 Setup, and the Sad State of Linux Laptops</title><link>https://staging.cmyers.org/blog/lenovo-thinkpad-p72-setup-and-the-sad-state-of-linux-laptops/</link><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/lenovo-thinkpad-p72-setup-and-the-sad-state-of-linux-laptops/</guid><description>&lt;p>A decade ago I wrote up
&lt;a href="https://staging.cmyers.org/blog/new-system76-oryx-laptop-setup/">setting up a System76 Oryx Pro&lt;/a>.
Time to play the laptop setup game again - except this time the interesting part
isn&amp;rsquo;t the setup, it&amp;rsquo;s how little the setup has changed and how few good options
there are to set up in the first place.&lt;/p>
&lt;p>My daily driver is now a &lt;strong>Lenovo ThinkPad P72&lt;/strong> mobile workstation, hostname
&lt;code>lasersword&lt;/code>. The specs, for posterity:&lt;/p>
&lt;ul>
&lt;li>CPU: Intel Xeon E-2176M, 6 cores / 12 threads (Coffee Lake, 2018-era)&lt;/li>
&lt;li>RAM: 128GB, across four SO-DIMM slots&lt;/li>
&lt;li>GPU: NVIDIA Quadro P4200 Mobile (Pascal, 8GB GDDR5)&lt;/li>
&lt;li>OS: Debian 13 (Trixie), running btrfs-on-LUKS full disk encryption&lt;/li>
&lt;li>A 17-inch chassis you could stop a door with, and the best non-Mac keyboard I have ever used&lt;/li>
&lt;/ul>
&lt;p>That is a seven-plus-year-old machine and I am still using it as my main computer
in 2026, which should tell you something. Some of that is that it&amp;rsquo;s overbuilt -
128GB of RAM in a laptop is absurd and I love it - and some of it is that when I
go shopping for a replacement, I keep failing to find one I actually want to buy.&lt;/p></description></item><item><title>The Dock Told My Mac to Unplug a Monitor That Was Still Plugged In</title><link>https://staging.cmyers.org/blog/the-dock-told-my-mac-to-unplug-a-monitor-that-was-still-plugged-in/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/the-dock-told-my-mac-to-unplug-a-monitor-that-was-still-plugged-in/</guid><description>&lt;p>I have a CalDigit TS5 Plus. It is a nice dock, genuinely. It was one of the few I could find that does 10GbE and drives two monitors and delivers the full 140W to charge my laptop, all over a single cable. That single-plug convenience is the entire reason you buy a dock like this in the first place. It is also, right now, occasionally taking my whole OS session down with it. I want to be precise about that, because &amp;ldquo;dock problem&amp;rdquo; undersells it: this is not a monitor glitch you shrug off. It is the kind of failure where the machine freezes solid, you lose whatever you were in the middle of, and you reboot. If it catches you mid-demo or mid-screenshare, you also get to explain to a room full of people why your screen just turned into a still photograph of itself. Getting that taken seriously by CalDigit took more pushing than I think it should have, which is the other half of this post.&lt;/p></description></item><item><title>Ranked Skills</title><link>https://staging.cmyers.org/blog/ranked-skills/</link><pubDate>Sat, 10 Aug 2019 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/ranked-skills/</guid><description>&lt;p>Technical resumes are challenging to produce, and challenging to accurately
interpret. One of the biggest obvious challenges is that candidates are highly
motivated to exaggerate, and interpreters of resumes are highly motivated to
make a quick decision erring on the side of rejection so as to waste a minimal
amount of their precious time. Another big challenge, however, one which I
think might be solved, is the difficulty in communicating exactly what the
resume author means by how skilled they are in a particular technology or
specialty. Even if one were to assume candidates are 100% truthful and resume
readers give 100% effort to read and parse every word of every resume that
comes across their desks, what does &amp;ldquo;Expert at Python&amp;rdquo; or &amp;ldquo;5 years experience
C++&amp;rdquo; really mean? Worse yet, someone says (or writes on their resume) &amp;ldquo;I am 8
/ 10 at Ruby&amp;rdquo; - what does that mean? Eight what? Years? Projects? This
person thinks they know 80% of everything there is to know about Ruby? Or are
in the 80th percentile for Ruby programmers?&lt;/p></description></item><item><title>Integration Tests Across Repositories</title><link>https://staging.cmyers.org/blog/integration-tests-across-repositories/</link><pubDate>Mon, 03 Oct 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/integration-tests-across-repositories/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> The monorepo-versus-multirepo fight I am dancing
around here never got settled, it just got tooling. The industry split into
two camps that each solved half of this post. If you go monorepo, a
graph-aware build tool - Bazel, Meta&amp;rsquo;s Buck2, Pants - IS the &amp;ldquo;virtual repo&amp;rdquo; I
describe below: one commit pins every version, and the tool rebuilds and
retests only the affected slice of the graph
(&lt;a href="https://sourcegraph.com/blog/monorepo-build-tools">landscape&lt;/a>). If you stay
multirepo, the language dependency managers grew up: Go modules with
&lt;a href="https://go.dev/ref/mod#minimal-version-selection">Minimal Version Selection&lt;/a>
(default since Go 1.16, 2021), Cargo, npm workspaces, all lockfile-driven and
reproducible. What still basically does not exist in the open is the specific
thing this post is really about - a manifest that is the &lt;em>authority&lt;/em> across
repositories you do not necessarily own, with a real cross-repo merger. QBT&amp;rsquo;s
answer to that (pins, cumulative versions, the custom merger) is still online
at &lt;a href="https://qbtbuildtool.com">qbtbuildtool.com&lt;/a> and in the
&lt;a href="https://github.com/TerabyteQbt">TerabyteQbt org&lt;/a>, and it still holds up
technically. It just never got adoption, which is its own lesson.&lt;/p></description></item><item><title>Objective Morality and The Moral Landscape</title><link>https://staging.cmyers.org/blog/objective-morality-and-the-moral-landscape/</link><pubDate>Thu, 29 Sep 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/objective-morality-and-the-moral-landscape/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> I&amp;rsquo;m keeping this essay as-is because it&amp;rsquo;s an honest
record of how I argued this in 2016, and I still find the moral-solipsism
parallel genuinely useful. But I&amp;rsquo;d be doing you a disservice to let it stand as
if the argument went unchallenged, because it didn&amp;rsquo;t. Harris&amp;rsquo; core move -
that you can cross the is/ought gap by defining morality as the well-being of
conscious creatures - has taken a decade of serious, and in my view partly
successful, philosophical fire. The sharpest version: physicist Sean Carroll
argued that &amp;ldquo;well-being&amp;rdquo; is doing all the smuggling here, that it&amp;rsquo;s a fuzzy
concept that isn&amp;rsquo;t obviously &lt;em>the&lt;/em> thing morality is about, and that you can&amp;rsquo;t
get there by experiment even in principle
(&lt;a href="https://www.preposterousuniverse.com/blog/2011/01/18/the-moral-landscape/">Carroll, 2011&lt;/a>).
Harris was confident enough to run
&lt;a href="https://www.samharris.org/blog/the-moral-landscape-challenge">the Moral Landscape Challenge&lt;/a>
in 2013-14, a $20,000 prize for anyone who could change his mind; the winning
essay by Ryan Born pressed exactly this point - that &amp;ldquo;the well-being of
conscious creatures&amp;rdquo; is not itself a scientific finding and has to be justified
from &lt;em>outside&lt;/em> science - and Harris conceded it was the best rebuttal without
conceding the thesis
(&lt;a href="https://www.samharris.org/blog/clarifying-the-landscape">Clarifying the Landscape&lt;/a>).
Where I land now: I think the choice of well-being as the axis is a &lt;em>value
choice&lt;/em>, not a scientific one, and my 2016 essay leans on the solipsism analogy
to wave that away a little too smoothly. Read the below as &amp;ldquo;the strongest form
of the case I could make then,&amp;rdquo; not as a settled result. The axioms are
load-bearing, and axioms are exactly where the fight is.&lt;/p></description></item><item><title>Public Service Announcement: Multi-Step Releases Considered Harmful</title><link>https://staging.cmyers.org/blog/public-service-announcement-multi-step-releases-considered-harmful/</link><pubDate>Tue, 03 May 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/public-service-announcement-multi-step-releases-considered-harmful/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> The thesis holds up completely: a release you
cannot reproduce locally in a single step is a liability, no matter how fancy
the pipeline around it looks. What dated is the villain. In 2016 the offender
was always a Jenkins job full of undocumented parameters running on a special
snowflake slave. The offender today wears different clothes. Now it is a
release that only exists as a &lt;a href="https://github.blog/changelog/2019-11-11-github-actions-is-generally-available/">GitHub Actions&lt;/a>
workflow (GA&amp;rsquo;d November 2019, and per JetBrains it is now the most-adopted CI
system at roughly a third of orgs, &lt;a href="https://blog.jetbrains.com/teamcity/2025/10/the-state-of-cicd/">State of CI/CD 2025&lt;/a>),
or a GitLab CI &lt;code>.gitlab-ci.yml&lt;/code>, or a CircleCI config - and only runs green
because of org-level secrets and a runner image that you cannot stand up on
your laptop. Same anti-pattern, new YAML. If the only way to cut a release is
to push a tag and pray to a workflow you cannot execute anywhere else, you
have the exact problem this post is about. The test is unchanged: can you run
it locally? Also, Joel&amp;rsquo;s &lt;a href="https://www.joelonsoftware.com/articles/fog0000000043.html">single-step-build&lt;/a>
point I cite below turns 26 this year, not 16, and somehow this is still not
universally understood.&lt;/p></description></item><item><title>What is Engineering Work Product?</title><link>https://staging.cmyers.org/blog/what-is-engineering-work-product/</link><pubDate>Mon, 21 Mar 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/what-is-engineering-work-product/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> The thesis got more true, not less, though not
for the reason I would have guessed. In 2016 the argument for treating your
commit graph as work product rested entirely on a future human, possibly you,
reconstructing intent from it. Now a second reader shows up on nearly every
change: an LLM reviewing a diff, or trying to understand the history before it
edits the code. I assumed sloppy history would cripple it. It mostly does not.
A model that cannot get your intent from a commit message will just read the
code and work it out, which is something it is genuinely good at. What bad
history costs it is tokens and time, not comprehension.&lt;/p></description></item><item><title>The Importance of Build Reliability</title><link>https://staging.cmyers.org/blog/the-importance-of-build-reliability/</link><pubDate>Thu, 28 Jan 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/the-importance-of-build-reliability/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026 (draft note, needs my sign-off).&lt;/strong> Two things about
this one have aged and need saying up front.&lt;/p>
&lt;p>First, the credit. Reading this back, it sounds like Palantir is where I
learned that unbreakable, reproducible builds change how engineers work. That
is not quite right. Amazon&amp;rsquo;s Brazil build system is where I learned it - it
was the gold standard, the thing that showed me what a build ecosystem &lt;em>could&lt;/em>
be (&lt;a href="https://staging.cmyers.org/blog/amazons-build-system/">I wrote up how Brazil works here&lt;/a>).
Palantir is where I &lt;em>tried to rebuild that magic&lt;/em> after leaving Amazon, and
where I helped birth &lt;a href="https://qbtbuildtool.com">QBT&lt;/a> chasing the same goal.
The unbreakable-builds rollout described below was real and it genuinely did
change how people worked there. But it was an attempt to recreate something I
had already seen work, not the place I discovered it. The QBT effort itself
eventually got dropped. So read the Palantir praise below as &amp;ldquo;the tooling was
good and the effect was real,&amp;rdquo; not &amp;ldquo;this is the mountaintop.&amp;rdquo;&lt;/p></description></item><item><title>Better Debugging Through the Socratic Method</title><link>https://staging.cmyers.org/blog/better-debugging-through-the-socratic-method/</link><pubDate>Wed, 27 Jan 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/better-debugging-through-the-socratic-method/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> Ten years on, the method holds up completely, but
the dialogue has a second participant now, and that changed more than I
expected.&lt;/p>
&lt;p>The bottleneck was never the reasoning, it was stamina. Every &amp;ldquo;how could this
hypothesis be wrong?&amp;rdquo; spawns grunt work: grep a log whose format you half
remember, write a throwaway repro, trace a call into a dependency you have
never read, print a type you assumed you understood. Each step is cheap and
there are a great many of them, and most tough investigations die not because
the engineer ran out of ideas but because they ran out of patience and
settled for &amp;ldquo;eh, probably a flaky cable.&amp;rdquo; An assistant collapses the cost of
those steps hard enough to change which investigations are worth finishing. I
wrote up a real one recently, a phantom monitor-unplug event that froze my
Mac, where I handed over the kernel logs and
&lt;a href="https://staging.cmyers.org/blog/the-dock-told-my-mac-to-unplug-a-monitor-that-was-still-plugged-in/">worked the problem as a partner&lt;/a>.
The part that used to be an afternoon of squinting at &lt;code>log show&lt;/code> output was
more like twenty minutes of back and forth.&lt;/p></description></item><item><title>Buildsystem Rundown</title><link>https://staging.cmyers.org/blog/buildsystem-rundown/</link><pubDate>Tue, 26 Jan 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/buildsystem-rundown/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> This one was always a &amp;ldquo;living document&amp;rdquo; - I posted
it half-finished in 2016 with a couple of &lt;code>TODO&lt;/code> sections I swore I&amp;rsquo;d get back
to, and then didn&amp;rsquo;t for a decade. So this is the finished version. The original
tool-by-tool writeups (Make, Ant, Maven, Gradle, QBT) stand as the 2016 period
record with only typos fixed. What&amp;rsquo;s new: I actually wrote the Go and Docker
sections I left stubbed, filled in Bazel, and added a whole section on the
tools that showed up after 2016 - Buck2, Pants v2, Nx, Turborepo - plus a
timeline so you can see the shape of the last fifty years at a glance. The
through-line hasn&amp;rsquo;t changed: the interesting problem is still strict,
reproducible, cross-project dependency management, and it&amp;rsquo;s still mostly solved
only inside company walls.&lt;/p></description></item><item><title>A Tale of Two Build Systems</title><link>https://staging.cmyers.org/blog/a-tale-of-two-build-systems/</link><pubDate>Wed, 20 Jan 2016 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/a-tale-of-two-build-systems/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> I wrote this in 2016 and the framing has aged
well, but the examples at the end are dated. The Go section in particular:
&lt;a href="https://github.com/tools/godep">godep&lt;/a> was archived and made read-only in
2026, and Go grew its own real answer. Go modules landed in Go 1.11 (2018)
and became the default in Go 1.16 (February 2021), with
&lt;a href="https://go.dev/ref/mod#minimal-version-selection">Minimal Version Selection&lt;/a>
as the algorithm that decides which versions you actually build against. That
is closer to &amp;ldquo;the Amazon way&amp;rdquo; than anything godep managed - the versions are
pinned in &lt;code>go.mod&lt;/code>, the build is reproducible, and you upgrade on purpose
instead of getting swept along with tip. So the specific dig at Go below is
obsolete. The broader point is not.&lt;/p></description></item><item><title>New System76 Oryx Laptop Setup</title><link>https://staging.cmyers.org/blog/new-system76-oryx-laptop-setup/</link><pubDate>Tue, 01 Dec 2015 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/new-system76-oryx-laptop-setup/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> I&amp;rsquo;m keeping this one exactly as it was - it&amp;rsquo;s an
honest snapshot of what setting up a Linux laptop felt like in late 2015, warts
and all. A few things have aged: that &amp;ldquo;Skylake&amp;rdquo; CPU is ancient now; btrfs, which
I hedged on below as &amp;ldquo;almost ready,&amp;rdquo; has been my daily-driver root filesystem
for years (I run btrfs-on-LUKS and wouldn&amp;rsquo;t go back). The NVIDIA situation has
shifted but not resolved - NVIDIA finally
&lt;a href="https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/">open-sourced their kernel modules in 2022&lt;/a>
and Wayland is now the default on most distros, but &amp;ldquo;does the proprietary blob
cooperate with my compositor this week&amp;rdquo; is still a live question in 2026, which
is depressing. The full-disk-encryption rant below is, if anything, more correct
now than it was then. See the companion post for my current machine and why the
laptop landscape still makes me grumpy.&lt;/p></description></item><item><title>Telling Computers What To Do</title><link>https://staging.cmyers.org/blog/telling-computers-what-to-do/</link><pubDate>Mon, 04 May 2015 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/telling-computers-what-to-do/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> This post rests on one claim: computers are
deterministic, predictable and reliable, so when they surprise you the fault
and the fix are both yours. I still believe that about the machine. What
changed is that the most common way I tell a computer what to do now is to ask
a large language model, and an LLM is not deterministic by construction. The
same prompt gives different answers on different days. Even pinned to greedy
decoding at temperature zero, production inference still is not reproducible
run to run, because the numerics depend on what else happened to be in the
batch (Horace He and Thinking Machines Lab,
&lt;a href="https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/">&amp;ldquo;Defeating Nondeterminism in LLM Inference&amp;rdquo;&lt;/a>,
Sept 2025;
&lt;a href="https://simonwillison.net/2025/Sep/11/defeating-nondeterminism/">Simon Willison&amp;rsquo;s summary&lt;/a>).
So the layer I now spend most of my day talking to is the one piece of the
stack that genuinely does not do what you tell it.&lt;/p></description></item><item><title>Keep it Simple, Stupid (KISS)</title><link>https://staging.cmyers.org/blog/keep-it-simple-stupid-kiss/</link><pubDate>Sun, 03 May 2015 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/keep-it-simple-stupid-kiss/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> The thesis below aged perfectly. This site is
still static, still simple, still boring, still a pile of markdown I commit
and push. What changed is the plumbing behind it, and that change is itself a
KISS story, because the old setup violated this post&amp;rsquo;s own principle in a way
I did not fully own up to at the time. The 2015 post stands as the period
record. The two takes after it are the reckoning.&lt;/p></description></item><item><title>Amazon's Build System</title><link>https://staging.cmyers.org/blog/amazons-build-system/</link><pubDate>Wed, 26 Sep 2012 00:00:00 +0000</pubDate><guid>https://staging.cmyers.org/blog/amazons-build-system/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>Looking back from 2026.&lt;/strong> I am keeping this one exactly as written, as a
period piece. It describes Amazon&amp;rsquo;s build and deploy systems as they were when
I worked on them between 2006 and 2009, written up in 2012. I have no idea how
much of it still holds, and leaving it alone is the point: it is a snapshot of
what a world-class build system looked like at a company that had solved this
roughly a decade before the rest of the industry admitted it was a problem.&lt;/p></description></item></channel></rss>