<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://benknoble.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://benknoble.github.io/" rel="alternate" type="text/html" /><updated>2026-05-14T00:23:16+00:00</updated><id>https://benknoble.github.io/feed.xml</id><title type="html">Junk Drawer</title><subtitle>For all those little papers scattered across your desk</subtitle><author><name>benknoble</name></author><entry><title type="html">Modelling language or controlling it?</title><link href="https://benknoble.github.io/blog/2026/05/07/machines-humans/" rel="alternate" type="text/html" title="Modelling language or controlling it?" /><published>2026-05-07T00:00:00+00:00</published><updated>2026-05-07T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/05/07/machines-humans</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/05/07/machines-humans/"><![CDATA[<p>Machines should bend to suit humans (centaurs), not humans bend to suit machines
(reverse centaurs).</p>

<ul>
  <li><a href="https://sites.google.com/view/llmwritingdistortion/home">How LLMs Distort Our Written Language</a></li>
  <li><a href="https://arxiv.org/abs/2510.04226v2">Epistemic Diversity and Knowledge Collapse in Large Language Models</a></li>
</ul>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="llms" /><summary type="html"><![CDATA[Machines should bend to suit humans (centaurs), not humans bend to suit machines (reverse centaurs).]]></summary></entry><entry><title type="html">Chats on LLMs</title><link href="https://benknoble.github.io/blog/2026/05/05/llms-conversation/" rel="alternate" type="text/html" title="Chats on LLMs" /><published>2026-05-05T00:00:00+00:00</published><updated>2026-05-05T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/05/05/llms-conversation</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/05/05/llms-conversation/"><![CDATA[<p>Collected from Discord</p>

<p>In response to both this quote:</p>

<blockquote>
  <p>The user apparently believes LLMs are inherently unethical in their existence,
so, by extension, any use of them is also inherently unethical, and they (the
user) will therefore not use any products of LLMs in any way whatsoever.</p>
</blockquote>

<p>and recent projects collecting lists of “tainted” “slopware”:</p>

<p>I think most absolute positions are likely incorrect, but at the same time
contain merits. For example, I think the notion of abstaining entirely from any
software that has been touched by an LLM (Vim? The Linux kernel?) is untenable
in the long run, and I desperately hope it won’t lead to too much fragmentation
of ideas. (Competing software that does it better is of course welcome.)</p>

<p>As another example, take explicitly condoning LLM use without a statement
engaging with others’ concerns (be it quality, displacement of labor, ethics, or
anything else). I can also sympathize with the absolute position that this
condones and encourages other evils associated with the makers of today’s
commercial LLMs. So my modulation is to take those concerns as indicative that
perhaps we ought to form a community statement about what, precisely, LLM use
means to Racket.</p>

<p>A tool and aid for continuing to do things we value? Something else?</p>

<p>See for example « Engineering rigor in the age of LLMs » and « The peril of
laziness lost » which I have linked before. I may dislike some of Brian’s
enthusiasm for them, but I also can see where he’s coming from and respect how
he encourages rigorous use.</p>

<hr />

<p>In response to this quote:</p>

<blockquote>
  <p>I think it’s inevitable though. Every leap in technology from books to
film/video to the internet often displaces/shakes industries up. It’s either
adapt or be the old man who shouts at the clouds saying “back in my day…”.
Whether its generated by LLMs or not, what matters above all else is if its
valuable and improves the project</p>
</blockquote>

<p>I think the difficulty is pinning down meanings of « valuable » and « improves
».</p>

<p>Is it valuable to add new features if they also create legal risk ? Is it an
improvement to automate away paper cut bugs that deprive new contributors of
pathways to get started, learn the code base, and mature into maintainers?</p>

<p>These things are decidedly grey areas to me.</p>

<hr />

<p>I think it’s hard to deny that there are valuable uses. I think it is equally
hard to deny there are wasteful, or evil, or &lt;other negatively connoted&gt; uses.
And I think the commercial side (even Anthropic in some ways) leans into one
side more than the other, to our detriment. I think this makes it more important
to qualify what our community holds dear and how LLMs fit (and don’t fit) into
that equation.</p>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="llms" /><summary type="html"><![CDATA[Collected from Discord]]></summary></entry><entry><title type="html">Notes on Racket quit handlers</title><link href="https://benknoble.github.io/blog/2026/03/25/application-quit-handler/" rel="alternate" type="text/html" title="Notes on Racket quit handlers" /><published>2026-03-25T00:00:00+00:00</published><updated>2026-03-25T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/03/25/application-quit-handler</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/03/25/application-quit-handler/"><![CDATA[<p>Notes from Discord.</p>

<p>I recently found that, at least on Linux, the quit handler
<code class="language-plaintext highlighter-rouge">application-quit-handler</code> only closes the most recent window :/ not quite what
I was expecting.</p>

<p>But apparently I’m holding it wrong:</p>

<blockquote>
  <p>[we’re not] intended to call the <code class="language-plaintext highlighter-rouge">application-quit-handler</code> from code.
Instead, I think it is a hook for reacting to requests from the desktop
environment that the application please quit, just as the other handlers
documented in that section respond to other events from the environment. In
particular:</p>

  <blockquote>
    <p>The default handler queues a call to the <code class="language-plaintext highlighter-rouge">can-exit?</code> method of the most
recently active frame in the initial eventspace (and then calls the frame’s
<code class="language-plaintext highlighter-rouge">on-exit</code> method if the result is true). The result is <code class="language-plaintext highlighter-rouge">#t</code> if the
eventspace is left with no open frames after <code class="language-plaintext highlighter-rouge">on-exit</code> returns, <code class="language-plaintext highlighter-rouge">#f</code>
otherwise.</p>
  </blockquote>
</blockquote>

<p>(<a href="https://docs.racket-lang.org/gui/Windowing_Functions.html#(def._((lib._mred%2Fmain..rkt)._application-quit-handler))">Documentation on Windowing Functions</a>)</p>

<p>Which of course makes quite a bit more sense, and should probably be stated in
documentation.</p>

<p>I had wanted to use it as the action for my “File &gt; Quit” menu, which now just
uses <code class="language-plaintext highlighter-rouge">exit</code> (I have no special cleanup to do for the moment).</p>

<p>I know macOS automatically provides a Quit option on .apps, which I suppose is
an example of a “request[] from the desktop environment.” Do other DEs do
something similar? My Gentoo box is currently running i3 without a DE, so I
don’t know what typical Linux/Gtk behavior is, for example. Although a good many
programs don’t have a close/quit button, which seems to imply they assume the DE
will provide one. (I have keys in i3 to close them in that case.)</p>

<p>The <code class="language-plaintext highlighter-rouge">framework</code> module uses
<a href="https://docs.racket-lang.org/framework/Frame.html#%28meth._%28%28%28lib._framework%2Fmain..rkt%29._frame~3astandard-menus~3c~25~3e%29._file-menu~3aquit-callback%29%29"><code class="language-plaintext highlighter-rouge">file-menu:quit-callback</code></a>
which “by default goes through the exit-related hooks in the framework.”</p>

<blockquote>
  <p>On non-Mac platforms, applications are supposed to add a “File &gt; Quit” item
themselves: see <code class="language-plaintext highlighter-rouge">file-menu:create-quit?</code> from framework. But DEs do have other
ways to ask an application to quit. The <code class="language-plaintext highlighter-rouge">application-quit-handler</code> docs don’t
mention other Unix, but, on KDE, right-clicking on DrRacket’s icon in my task
bar and choosing Quit definitely goes through some graceful mechanism
prompting me to save or cancel. Likewise if I’m logging out or rebooting. IIRC
there’s an XDG spec for how to ask an application to quit.</p>
</blockquote>

<p>And others say</p>

<blockquote>
  <p>For the File &gt; Exit menu option in Molasses (which should probably be File &gt;
Quit), I do <code class="language-plaintext highlighter-rouge">(send frame on-exit)</code>. The default <code class="language-plaintext highlighter-rouge">on-exit</code> handler will in turn
call <code class="language-plaintext highlighter-rouge">on-close</code>, which I overrode and put my custom Exit/Quit code.</p>
</blockquote>

<p>This seems quite sensible also.</p>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="racket" /><summary type="html"><![CDATA[Notes from Discord.]]></summary></entry><entry><title type="html">xrandr brightness glitch</title><link href="https://benknoble.github.io/blog/2026/02/27/xrandr-brightness/" rel="alternate" type="text/html" title="xrandr brightness glitch" /><published>2026-02-27T00:00:00+00:00</published><updated>2026-02-27T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/02/27/xrandr-brightness</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/02/27/xrandr-brightness/"><![CDATA[<p>I’ve had this glitch twice now, where I wake up my external monitor and the
screen is washed out with brightness. I can see enough to try to fix it, but
it’s not the hardware brightness settings. The software brightness settings are
out of wack.</p>

<p>I think both times I’ve ended up fixing this by rebooting, but I recently
learned that I can use <code class="language-plaintext highlighter-rouge">xrandr</code> to control the software brightness like</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>xrandr --output DisplayPort-3 --brightness 1
</code></pre></div></div>

<p>You’ll have to adjust for your output device, of course. The <code class="language-plaintext highlighter-rouge">brightness</code> value
appears to be a scale factor, so fractions dim the output and values greater
than 1 lead to the wash out effect.</p>

<p>I’m not sure <em>what</em> toggled the <code class="language-plaintext highlighter-rouge">xrandr</code> setting, but at least next time I’ll
have an idea of how to fix it.</p>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="linux" /><summary type="html"><![CDATA[I’ve had this glitch twice now, where I wake up my external monitor and the screen is washed out with brightness. I can see enough to try to fix it, but it’s not the hardware brightness settings. The software brightness settings are out of wack.]]></summary></entry><entry><title type="html">Rusty Boat Retrospective</title><link href="https://benknoble.github.io/blog/2026/02/12/rustyboat/" rel="alternate" type="text/html" title="Rusty Boat Retrospective" /><published>2026-02-12T00:00:00+00:00</published><updated>2026-02-12T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/02/12/rustyboat</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/02/12/rustyboat/"><![CDATA[<p>Brief reflections on implementing Raft in Rust.</p>

<p><a href="https://github.com/benknoble/rusty-raft/">Public code</a>.</p>

<h2 id="raft">Raft</h2>

<p>I hadn’t thought about consensus algorithms since my MS year in 2020/2021, and
I’d certainly never thought deeply about them. Studying the paper and
Ousterhout’s video presentations convinced me that implementing Raft ought to be
possible, in that same way that
<a href="https://github.com/oxidecomputer/hubris">hubris</a> is necessary to take on
certain challenges. I was <a href="https://github.com/benknoble/rusty-raft/commit/1d24310badc58dfc1fdd72e07813d584a3896990">demonstrably
humbled</a>
more than once<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>, but Raft’s goal (as I understand it) is to be practically
implementable correctly.</p>

<p>The details matter immensely for correctness. Each statement is load-bearing.</p>

<p>As I wrote in the public README, there’s little formal validation that my
implementation is faithful to any spec or upholds the relevant properties. I
have a few unit tests, but I haven’t taken the dive on fuzzing or property
testing this code. It deserves it. (I probably won’t try any proof tools, though
if memory serves creusot exists to fill that gap.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>)</p>

<p>I especially enjoyed explicitly modelling an abstract Clock, which I did for one
of our warmup exercises during the course—it made some reasoning deliciously
simple. Its implementation is not perfect (a <code class="language-plaintext highlighter-rouge">sleep</code> loop doesn’t really get you
precise ticking frequency), but a real example could tie into hardware clocks.</p>

<h2 id="rust">Rust</h2>

<p>This is my most extensive foray into Rust to-date, though I’d dabbled a bit
before. I like to say I can read Rust fairly well, having done that for years
now and especially due to the writings of Ralf Jung and others. I understand
a bit of the ideas Rust builds on, so I didn’t find many ownership challenges
while writing this project—I intentionally structured the driver loop and main
algorithm so that who owned what data was clear, except for some fiddly bits
about sending application results around which end up just cloning.</p>

<p>I still stumble over some parts of Rust’s module system, but that got easier
with time.</p>

<p>Rust’s tools are great, of course.</p>

<p>I shied away from async Rust in this project; it seemed like too much to bite
off at the time. I’m more comfortable with message-passing threads from some Go
(years ago) and Racket (more recent), so I usually think in that model.</p>

<p>In a similar way, I didn’t go dependency hunting here (I don’t <a href="https://oxide-and-friends.transistor.fm/episodes/a-crate-is-born/transcript">browse crates.io
for fun</a>).
I have serde for serialization, which ended up being more code than I thought I
would have to write (integrating with serde-lexpr to use S-expression formats),
and rand for randomness. There are likely other things that would be nice to
glue in, and for other projects dependencies are a necessity. Here I was mostly
satisfied with the standard library<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup>.</p>

<p>I suspect my use of dependencies would look different if Rust’s documentation
were integrated in the same way that <a href="https://docs.racket-lang.org">Racket’s
is</a>, but I realize that’s less practical for a
bigger ecosystem.</p>

<h2 id="overall">Overall</h2>

<p>I’m quite pleased I was able to implement such a fascinating system in a few
days of hard work: the essence was written between August 26th and 29th, with
less than 20 commits afterwards<sup id="fnref:4"><a href="#fn:4" class="footnote" rel="footnote" role="doc-noteref">4</a></sup>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>λ g dategraph
2025-08-26  13 ███████████████████
2025-08-27  28 ████████████████████████████████████████
2025-08-28  45 █████████████████████████████████████████████████████████████████
2025-08-29  42 █████████████████████████████████████████████████████████████
2025-09-20   1 █
2026-01-03   1 █
2026-01-04   2 ███
2026-01-05   1 █
2026-01-06   3 ████
2026-01-10   1 █
2026-01-19   3 ████
2026-02-03   4 ██████

λ DATEGRAPH=additions g dategraph
2025-08-26  652 ████████████████████████████████████████████████████████████████
2025-08-27  530 ████████████████████████████████████████████████████
2025-08-28  436 ███████████████████████████████████████████
2025-08-29  409 ████████████████████████████████████████
2025-09-20   11 █
2026-01-03    3
2026-01-04    8 █
2026-01-05   52 █████
2026-01-06   12 █
2026-01-19   45 ████
2026-02-03  204 ████████████████████
</code></pre></div></div>

<p>I’m also pleased I was able to return months later and reconstruct my thinking
without too much hassle. A few details were peculiar, but I’ve already forgotten
which ones!</p>

<p>And I can’t resist<sup id="fnref:5"><a href="#fn:5" class="footnote" rel="footnote" role="doc-noteref">5</a></sup>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>λ g ls-files | code-percent
RowNumber  File                        PercentTotal  CumulativePercentTotal
1          src/lib.rs                  30.525        30.525
2          src/test_protocol.rs        26.2913       56.8163
3          src/main.rs                 11.3463       68.1626
4          README.md                   9.99153       78.1541
5          src/net.rs                  5.7155        83.8696
6          src/net/bytes.rs            5.63082       89.5005
7          src/test_append_entries.rs  4.65707       94.1575
8          start-cluster               1.31245       95.47
9          src/test_save_restore.rs    1.10076       96.5707
10         src/bin/client.rs           1.98984       98.5606
11         watch-cluster               0.127011      98.6876
12         start-client                0.127011      98.8146
13         src/net/config.rs           0.550381      99.365
14         .gitignore                  0.211685      99.5767
15         Cargo.toml                  0.42337       100
</code></pre></div></div>

<h2 id="notes">Notes</h2>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Try <code class="language-plaintext highlighter-rouge">git log --grep fix</code>. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>I have an old <a href="https://github.com/benknoble/advent2021/blob/prove-unflatten/day18/Day18.v">incomplete proof of some supposed
inverses</a>
I’d like to finish, too… alas. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>Though not with the un-hashability of <code class="language-plaintext highlighter-rouge">mpsc::Sender</code>s. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4">
      <p><a href="https://github.com/benknoble/Dotfiles/blob/master/links/bin/git-dategraph"><code class="language-plaintext highlighter-rouge">git-dategraph</code> script</a> <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5">
      <p><a href="/blog/2024/08/07/churn-and-weight/"><code class="language-plaintext highlighter-rouge">code-percent</code> discussion</a> <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="rust" /><summary type="html"><![CDATA[Brief reflections on implementing Raft in Rust.]]></summary></entry><entry><title type="html">MT7925e Bluetooth woes</title><link href="https://benknoble.github.io/blog/2026/02/11/bluetooth/" rel="alternate" type="text/html" title="MT7925e Bluetooth woes" /><published>2026-02-11T00:00:00+00:00</published><updated>2026-02-11T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/02/11/bluetooth</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/02/11/bluetooth/"><![CDATA[<p>Some details on an error I had today and the seeming resolution.</p>

<p>I have a MediaTek Wireless device in my Framework desktop (outputs trimmed):</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># lsusb</span>
Bus 003 Device 003: ID 0e8d:0717 MediaTek Inc. Wireless_Device
<span class="c"># lshw</span>
…
           <span class="k">*</span><span class="nt">-network</span>
                description: Ethernet interface
                product: MT7925 <span class="o">(</span>RZ717<span class="o">)</span> Wi-Fi 7 160MHz
                vendor: MEDIATEK Corp.
                physical <span class="nb">id</span>: 0
                bus info: pci@0000:c0:00.0
                logical name: wlan0
                version: 00
                serial: ac:f2:3c:34:dd:8b
                width: 64 bits
                clock: 33MHz
                capabilities: pciexpress msi pm bus_master cap_list ethernet physical
                configuration: <span class="nv">broadcast</span><span class="o">=</span><span class="nb">yes </span><span class="nv">driver</span><span class="o">=</span>mt7925e <span class="nv">driverversion</span><span class="o">=</span>6.12.63-gentoo-dist <span class="nv">firmware</span><span class="o">=</span>____000000-20260106153120 <span class="nv">ip</span><span class="o">=</span>192.168.2.248 <span class="nv">latency</span><span class="o">=</span>0 <span class="nb">link</span><span class="o">=</span><span class="nb">yes </span><span class="nv">multicast</span><span class="o">=</span><span class="nb">yes
                </span>resources: irq:158 memory:b0600000-b07fffff memory:b0800000-b0807fff
…
                 <span class="k">*</span><span class="nt">-usb</span>:1
                      description: Bluetooth wireless interface
                      product: Wireless_Device
                      vendor: MediaTek Inc.
                      physical <span class="nb">id</span>: 3
                      bus info: usb@3:3
                      version: 1.00
                      serial: 000000000
                      capabilities: usb-2.10 bluetooth
                      configuration: <span class="nv">driver</span><span class="o">=</span>btusb <span class="nv">maxpower</span><span class="o">=</span>100mA <span class="nv">speed</span><span class="o">=</span>480Mbit/s
</code></pre></div></div>

<p>(The Bluetooth wireless interface is on a different pci slot from the Ethernet
interface according to <code class="language-plaintext highlighter-rouge">lshw</code>, but I think it’s physically part of the same
stuff?)</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># hwinfo</span>

63: PCI c000.0: 0280 Network controller
  <span class="o">[</span>Created at pci.386]
  Unique ID: y9sn.W5ZKz6Jz0dA
  Parent ID: aYFK.ZyxDeoKNER1
  SysFS ID: /devices/pci0000:00/0000:00:02.3/0000:c0:00.0
  SysFS BusID: 0000:c0:00.0
  Hardware Class: network
  Model: <span class="s2">"MEDIATEK Network controller"</span>
  Vendor: pci 0x14c3 <span class="s2">"MEDIATEK Corp."</span>
  Device: pci 0x0717 
  SubVendor: pci 0x14c3 <span class="s2">"MEDIATEK Corp."</span>
  SubDevice: pci 0x0717 
  Driver: <span class="s2">"mt7925e"</span>
  Driver Modules: <span class="s2">"mt7925e"</span>
  Device File: wlan0
  Memory Range: 0xb0600000-0xb07fffff <span class="o">(</span>rw,non-prefetchable<span class="o">)</span>
  Memory Range: 0xb0800000-0xb0807fff <span class="o">(</span>rw,non-prefetchable<span class="o">)</span>
  IRQ: 158 <span class="o">(</span>9607 events<span class="o">)</span>
  HW Address: ac:f2:3c:34:dd:8b
  Permanent HW Address: ac:f2:3c:34:dd:8b
  Link detected: <span class="nb">yes
  </span>Module Alias: <span class="s2">"pci:v000014C3d00000717sv000014C3sd00000717bc02sc80i00"</span>
  Driver Info <span class="c">#0:</span>
    Driver Status: mt7925e is active
    Driver Activation Cmd: <span class="s2">"modprobe mt7925e"</span>
  Config Status: <span class="nv">cfg</span><span class="o">=</span>new, <span class="nv">avail</span><span class="o">=</span><span class="nb">yes</span>, <span class="nv">need</span><span class="o">=</span>no, <span class="nv">active</span><span class="o">=</span>unknown
  Attached to: <span class="c">#51 (PCI bridge)</span>

88: USB 00.0: 0000 Unclassified device
  <span class="o">[</span>Created at usb.122]
  Unique ID: CiZ2.dgyAFLvpDoA
  Parent ID: uIhY.5sqDI7PdmUC
  SysFS ID: /devices/pci0000:00/0000:00:08.3/0000:c5:00.0/usb3/3-3/3-3:1.0
  SysFS BusID: 3-3:1.0
  Hardware Class: unknown
  Model: <span class="s2">"MediaTek Wireless_Device"</span>
  Hotplug: USB
  Vendor: usb 0x0e8d <span class="s2">"MediaTek Inc."</span>
  Device: usb 0x0717 <span class="s2">"Wireless_Device"</span>
  Revision: <span class="s2">"1.00"</span>
  Serial ID: <span class="s2">"000000000"</span>
  Driver: <span class="s2">"btusb"</span>
  Driver Modules: <span class="s2">"btusb"</span>
  Speed: 480 Mbps
  Module Alias: <span class="s2">"usb:v0E8Dp0717d0100dcEFdsc02dp01icE0isc01ip01in00"</span>
  Driver Info <span class="c">#0:</span>
    Driver Status: btusb is active
    Driver Activation Cmd: <span class="s2">"modprobe btusb"</span>
  Config Status: <span class="nv">cfg</span><span class="o">=</span>new, <span class="nv">avail</span><span class="o">=</span><span class="nb">yes</span>, <span class="nv">need</span><span class="o">=</span>no, <span class="nv">active</span><span class="o">=</span>unknown
  Attached to: <span class="c">#94 (Hub)</span>
</code></pre></div></div>

<p>Anyway, after a reboot today, I saw the following issues</p>

<ul>
  <li>Bluetooth wasn’t on or working, including no mouse connection (fortunately I
have mouse keys on my ErgoDox EZ)</li>
  <li>The kernel had some interesting logs:</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Feb 11 10:45:16 merguez kernel: Bluetooth: hci0: Execution of wmt command timed out
Feb 11 10:45:16 merguez kernel: Bluetooth: hci0: Failed to send wmt func ctrl (-110)
Feb 11 10:45:16 merguez kernel: Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
</code></pre></div></div>

<p>Things got even weirder as I started poking the hardware with various tools like
<code class="language-plaintext highlighter-rouge">inxi</code>, <code class="language-plaintext highlighter-rouge">lsusb -v</code>, and <code class="language-plaintext highlighter-rouge">hw-probe</code>, although that might also have been due to
removing the kernel modules and re-adding them. In particular, reloading <code class="language-plaintext highlighter-rouge">btusb</code>
did practically nothing; reloading <code class="language-plaintext highlighter-rouge">mt7925e</code> and <code class="language-plaintext highlighter-rouge">btusb</code> seemed to crash
Bluetooth altogether (although WiFi came back with the <code class="language-plaintext highlighter-rouge">mt7925e</code> driver, so it
was just the 2nd load of <code class="language-plaintext highlighter-rouge">btusb</code> that failed).</p>

<p>I was able to confirm via <code class="language-plaintext highlighter-rouge">last</code> that I had booted my current kernel at least
once prior to today, so I was pretty sure that wasn’t the issue (but I have
several old kernels laying around just in case):</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>λ ll /boot/vmlinuz-6.12.*
-rw-r--r-- 1 root root 20439552 13 oct.  21:25 /boot/vmlinuz-6.12.47-gentoo-dist
-rw-r--r-- 1 root root 20488704 13 oct.  15:35 /boot/vmlinuz-6.12.47-gentoo-dist.old
-rw-r--r-- 1 root root 20451840  7 nov.  09:20 /boot/vmlinuz-6.12.54-gentoo-dist
-rw-r--r-- 1 root root 20460032  1 déc.  16:49 /boot/vmlinuz-6.12.58-gentoo-dist
-rw-r--r-- 1 root root 20619776 29 janv. 17:09 /boot/vmlinuz-6.12.63-gentoo-dist
-rw-r--r-- 1 root root 20619776 13 janv. 08:42 /boot/vmlinuz-6.12.63-gentoo-dist.old
</code></pre></div></div>

<h2 id="solution">Solution</h2>

<p>Turns out, <a href="https://forums.linuxmint.com/viewtopic.php?t=461458">the Mint folks were
right</a>: I powered down
completely, left the system unplugged for a while, and then booted on with no
issues.</p>

<p>Now the kernel logs look much nicer:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Feb 11 14:03:30 merguez kernel: Bluetooth: hci0: Device setup in 1738015 usecs
Feb 11 14:03:30 merguez kernel: Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported.
Feb 11 14:03:31 merguez kernel: Bluetooth: hci0: AOSP extensions version v1.00
Feb 11 14:03:31 merguez kernel: Bluetooth: hci0: AOSP quality report is supported
Feb 11 14:03:31 merguez kernel: Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Feb 11 14:03:31 merguez kernel: Bluetooth: BNEP filters: protocol multicast
Feb 11 14:03:31 merguez kernel: Bluetooth: BNEP socket layer initialized
Feb 11 14:03:31 merguez kernel: Bluetooth: MGMT ver 1.23
Feb 11 14:03:46 merguez kernel: Bluetooth: RFCOMM TTY layer initialized
Feb 11 14:03:46 merguez kernel: Bluetooth: RFCOMM socket layer initialized
Feb 11 14:03:46 merguez kernel: Bluetooth: RFCOMM ver 1.11
Feb 11 14:03:55 merguez kernel: magicmouse 0005:004C:0265.0005: unknown main item tag 0x0
Feb 11 14:03:55 merguez kernel: input: Apple Inc. Magic Trackpad 2 as /devices/virtual/misc/uhid/0005:004C:0265.0005/input/input15
Feb 11 14:03:55 merguez kernel: magicmouse 0005:004C:0265.0005: input,hidraw4: BLUETOOTH HID v3.11 Mouse [Slate] on ac:f2:3c:34:dd:8c
</code></pre></div></div>

<h2 id="kernel-devices">Kernel devices</h2>

<p>Of note, the <code class="language-plaintext highlighter-rouge">drivers/bluetooth/btusb.c</code> doesn’t list <code class="language-plaintext highlighter-rouge">0e8d:0717</code> in the
MediaTek devices, although there is what looks to my extremely untrained eyes
like some kind of generic fallback device:</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code>	<span class="cm">/* MediaTek Bluetooth devices */</span>
	<span class="p">{</span> <span class="n">USB_VENDOR_AND_INTERFACE_INFO</span><span class="p">(</span><span class="mh">0x0e8d</span><span class="p">,</span> <span class="mh">0xe0</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">,</span> <span class="mh">0x01</span><span class="p">),</span>
	  <span class="p">.</span><span class="n">driver_info</span> <span class="o">=</span> <span class="n">BTUSB_MEDIATEK</span> <span class="o">|</span>
			 <span class="n">BTUSB_WIDEBAND_SPEECH</span> <span class="p">},</span>
</code></pre></div></div>

<p>(The docs for <code class="language-plaintext highlighter-rouge">USB_VENDOR_AND_INTERFACE</code> don’t mean much to me:)</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cm">/**
 * USB_VENDOR_AND_INTERFACE_INFO - describe a specific usb vendor with a class of usb interfaces
 * @vend: the 16 bit USB Vendor ID
 * @cl: bInterfaceClass value
 * @sc: bInterfaceSubClass value
 * @pr: bInterfaceProtocol value
 *
 * This macro is used to create a struct usb_device_id that matches a
 * specific vendor with a specific class of interfaces.
 *
 * This is especially useful when explicitly matching devices that have
 * vendor specific bDeviceClass values, but standards-compliant interfaces.
 */</span>
<span class="cp">#define USB_VENDOR_AND_INTERFACE_INFO(vend, cl, sc, pr) \
	.match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
		| USB_DEVICE_ID_MATCH_VENDOR, \
	.idVendor = (vend), \
	.bInterfaceClass = (cl), \
	.bInterfaceSubClass = (sc), \
	.bInterfaceProtocol = (pr)
</span></code></pre></div></div>

<p>For the network controller, we have <code class="language-plaintext highlighter-rouge">PCI_VENDOR_ID_MEDIATEK=0x14c3</code> via
<code class="language-plaintext highlighter-rouge">include/linux/pci_ids.h</code> and then</p>

<div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">static</span> <span class="k">const</span> <span class="k">struct</span> <span class="n">pci_device_id</span> <span class="n">mt7925_pci_device_table</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span>
	<span class="p">{</span> <span class="n">PCI_DEVICE</span><span class="p">(</span><span class="n">PCI_VENDOR_ID_MEDIATEK</span><span class="p">,</span> <span class="mh">0x7925</span><span class="p">),</span>
		<span class="p">.</span><span class="n">driver_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">kernel_ulong_t</span><span class="p">)</span><span class="n">MT7925_FIRMWARE_WM</span> <span class="p">},</span>
	<span class="p">{</span> <span class="n">PCI_DEVICE</span><span class="p">(</span><span class="n">PCI_VENDOR_ID_MEDIATEK</span><span class="p">,</span> <span class="mh">0x0717</span><span class="p">),</span>
		<span class="p">.</span><span class="n">driver_data</span> <span class="o">=</span> <span class="p">(</span><span class="n">kernel_ulong_t</span><span class="p">)</span><span class="n">MT7925_FIRMWARE_WM</span> <span class="p">},</span>
	<span class="p">{</span> <span class="p">},</span>
<span class="p">};</span>
</code></pre></div></div>

<p>in the <code class="language-plaintext highlighter-rouge">drivers/net/wireless/mediatek/mt76/mt7925</code> tree.</p>

<h2 id="other-fora">Other fora</h2>

<p>Places I looked for help via Ecosia searches of the kernel logs and model IDs:</p>

<ul>
  <li><a href="https://discussion.fedoraproject.org/t/bluetooth-mt7925e-doesnt-work-anymore-after-an-update-on-fedora-workstation-42/164707">Fedora forum</a></li>
  <li><a href="https://community.frame.work/t/bluetooth-adapter-detected-but-unable-to-initialize-firmware/55427/3">Framework forum</a></li>
  <li>Various Arch fora</li>
</ul>

<p>Seems like there are lots of MediaTek driver issues, but none were <em>exactly</em>
like mine except that Mint forum.</p>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="linux" /><summary type="html"><![CDATA[Some details on an error I had today and the seeming resolution.]]></summary></entry><entry><title type="html">Thoughts from recent conversations on LLMs</title><link href="https://benknoble.github.io/blog/2026/01/29/llms-chat/" rel="alternate" type="text/html" title="Thoughts from recent conversations on LLMs" /><published>2026-01-29T00:00:00+00:00</published><updated>2026-01-29T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/01/29/llms-chat</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/01/29/llms-chat/"><![CDATA[<p>Some unpolished thoughts from a recent conversation with other software
engineers.</p>

<p>I’m willing to be practical, but I find the « tools » conversation needs to wait
until we’ve addressed at least some of the political weaponization. Ironically,
this is one of the good things about the tools conversation! An LLM cannot do my
job, and we should stop allowing them to be weaponized as if they could.</p>

<p>[What is political weaponization?]</p>

<p>See, e.g., Cory Doctorow’s « an LLM can’t do your job, but a salesman can
convince your boss it can » for examples in employment (esp. in tech; companies
would love for us to be as low-status as your average retail worker); see Grok
being used to spew Musk’s many -isms or generally any attempt to dismantle the
notion of truth (epistemological crisis); see US v China (Deepseek); see <a href="https://www.verysane.ai/p/agi-probably-not-2027">“AGI:
Probably Not 2027”</a> for a
rebuttal of the fantasy that swept up folks in our government; see <a href="https://deadsimpletech.com/blog">Iris
Meredith’s blog</a> for some specifics on people
and projects involved (I believe I got the phrase from them—site: search is
probably useful to find relevant articles).</p>

<p>[When pushed on how long the conversation should wait]</p>

<p>I can see how [“we shouldn’t be talking about how this fits into our lives as
developers as a tool until the weaponization stops”] is an interpretation of my
statement. I suppose I mean: I find the tool conversation fascinating, but
ultimately less urgent than systemic abuse.</p>

<p>Right now my preferred direction of energy is toward addressing such abuse. (Of
course, much like we sometimes get markers from Amazon to make our protest
posters, I can use a devtool to support addressing such issues.)</p>

<p>In all fairness, I think a lot of spaces I’m in (including this one) are having
the tool conversation in good faith. But it sure didn’t feel that way at the
start, and I still can’t wrap my head around one conversation often not
acknowledging the other. But there’s so much going on in a giant intersection
that it also seems entirely rational to focus in on small parts at a time, and
it sure seems even harder to have an all-encompassing conversation! So I’m glad
to try to focus and chat however it works out.</p>

<p>I also find that my stubborn streak encourages me to make strong claims and then
fall back to something closer to moderation in practice, provided we agree that
« moderation » requires acknowledging certain indelible lines, even if we
disagree how to implement those lines.</p>

<p>Ambiguity is probably good for us like that.</p>

<p>« Engineering Rigor in the Age of LLMs » has certainly given me a newfound
excitement about the potential, despite all of my concerns about the «
LLMentalist effect » or about the replication of harmful social norms.</p>

<p>I think in particular it revealed a possibility of using the tool with
discernment (« this use emphatically doesn’t matter »). I hold that such
discernment is difficult and is helped by engagement with all the liberal arts,
including sociology and feminist theory, etc.</p>

<p>[What are good directions for addressing such abuse?]</p>

<p>Simply (hah!): envision a better world and then work for it! A few caveats: of
course that’s easier said than done. Ideally, we’d be directing our talents to
serve folks already doing this hard work.</p>

<p>Broadly, I’m looking away from computing to find these opportunities. My
energies are mostly directed at things like the following. The list is too long
but feels deeply connected for me.</p>

<ul>
  <li>Unions for software engineers. (<em>e.g.</em>, <a href="https://drewdevault.com/2025/06/09/2025-06-09-Unionize-or-die.html#resources">Drew DeVault’s
Resources</a>)</li>
  <li>Property rights à la right to repair (jailbreak); not allowing continued use
of DMCA § 1201 to dictate how owners of a device may use said device (“felony
contempt of business model”).</li>
  <li>Self-determination: feminist theory and queer activists have a lot to say
about being the ultimate arbiter and governor of your own body, which rhymes
with the “despotic dominion” of property rights.</li>
  <li>Privacy rights, especially digitally; done correctly, I think this could end
surveillance advertising.</li>
  <li>Anti-monopoly and anti-corruption policy and law.</li>
  <li>Ethics of computation systems (<em>e.g.</em>, Ruha Benjamin’s <em>Race After
Technology</em>, which inspired an essay I’ve been mulling over for a couple of
years now). These systems intersect policing and justice in overt and covert
ways.</li>
  <li>Open source maintenance. As I understand it, the folks doing the really hard
work are under a tremendous burden and need help. Ask the ones you know or
depend on how you can help.</li>
  <li><a href="/blog/2025/04/18/skepticism/#situated">Situated software</a>:
local, specific software for communities. This rhymes for me with <a href="https://resonantcomputing.org/">Resonant
Computing</a>.</li>
</ul>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="llm" /><category term="unpolished" /><category term="politics" /><summary type="html"><![CDATA[Some unpolished thoughts from a recent conversation with other software engineers.]]></summary></entry><entry><title type="html">2026 Goals</title><link href="https://benknoble.github.io/blog/2026/01/01/goals/" rel="alternate" type="text/html" title="2026 Goals" /><published>2026-01-01T00:00:00+00:00</published><updated>2026-01-01T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2026/01/01/goals</id><content type="html" xml:base="https://benknoble.github.io/blog/2026/01/01/goals/"><![CDATA[<p>A short, probably sensible-only-to-me list of goals. Timeboxed. I’ll also add
other things as I go.</p>

<p>Guiding principles:</p>
<ul>
  <li>Meet good people. Do good work.</li>
  <li>Keep in touch with folks.</li>
  <li>Focus on a goal: file distractions away for later.</li>
</ul>

<p>Timeboxed:</p>
<ul>
  <li>1 month:
    <ul class="task-list">
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Finish Rusty Boat (return application results)
        <ul class="task-list">
          <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Write about it (slightly late: travel + sickness)</li>
        </ul>
      </li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Paint regular Gamorrean Guards (slightly late: travel + sickness)</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Clean up notepad, notebook</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Outline Luddite essay</li>
      <li class="task-list-item"><a href="https://lore.kernel.org/git/cover.1767649692.git.ben.knoble+github@gmail.com/">sent the final few versions</a> of Julia Evans’s documentation improvements for <code class="language-plaintext highlighter-rouge">git-reset(1)</code></li>
      <li class="task-list-item"><a href="https://bugs.gentoo.org/968366">submitted patch</a> for <code class="language-plaintext highlighter-rouge">equery(1)</code> manual</li>
      <li class="task-list-item"><a href="https://lore.kernel.org/git/01a7acfaf87494419b3766da57d4c05cf99c79bb.1768873599.git.ben.knoble+github@gmail.com/T/#u">submitted patch</a> for <code class="language-plaintext highlighter-rouge">git-replay(1)</code> manual</li>
      <li class="task-list-item"><a href="https://github.com/gentoo/gentoo/pull/45386">submitted patch</a> for <code class="language-plaintext highlighter-rouge">mhash</code> documentation build</li>
      <li class="task-list-item">learned the basics of the reverse-engineering and debugging tool <a href="https://rada.re/n/index.html">radare2</a></li>
      <li class="task-list-item">wrote some not-quite-fast-enough big file crunching code in Rust</li>
    </ul>
  </li>
  <li>3 months:
    <ul class="task-list">
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Finish Cabin Mixer, show to NCCJ</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Paint remaining Weequay Pirates</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Draft section or 2 of Luddite essay</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" checked="checked" />Test for 2nd Dan</li>
      <li class="task-list-item">Finally found a workaround for <a href="https://github.com/vim/vim/issues/19008">a gnarly Vim bug</a></li>
      <li class="task-list-item">Improved <a href="/blog/2024/10/04/copy-range-diff/"><code class="language-plaintext highlighter-rouge">copy-range-diff</code></a> to <a href="https://github.com/benknoble/Dotfiles/commit/f1eacc8bd54f3009249bb1a4fa218a7123726d26">teach others about range-diff</a></li>
      <li class="task-list-item"><a href="https://github.com/benknoble/Dotfiles/commit/96a96a185e0a4484986773b1f35db5ea30c089e3">Configured vim-ledger</a> for use with <a href="https://hledger.org/"><code class="language-plaintext highlighter-rouge">hledger</code></a>, which I’m using to track money and budgets this year</li>
      <li class="task-list-item">Filed <a href="https://bugs.gentoo.org/969749">a stabilization bug for OpenRC</a> so I can pick up a fix to Alacritty</li>
      <li class="task-list-item">Sent patches to Git for <a href="https://lore.kernel.org/git/20260207215924.28863-1-ben.knoble+github@gmail.com/T/#u">stash import/export completion</a> and <a href="https://lore.kernel.org/git/20260207215924.28863-2-ben.knoble+github@gmail.com/T/#u">a meson build oddity</a></li>
      <li class="task-list-item">Contributed several reviews to Git patches</li>
      <li class="task-list-item">Filed and <a href="https://github.com/yo8192/fcron/pull/47">fixed</a> <a href="https://github.com/yo8192/fcron/pull/46">an fcron bug</a></li>
      <li class="task-list-item">Filed a few <a href="https://github.com/git-pkgs/git-pkgs">git-pkgs</a> issues</li>
      <li class="task-list-item">Reviewed Dracula contributions for Vim</li>
      <li class="task-list-item">Sent patches to Vim for <a href="https://github.com/vim/vim/pull/20016">a bash syntax bug</a></li>
      <li class="task-list-item">Packaged <a href="https://github.com/git-pkgs/git-pgks">git-pkgs</a> for Gentoo in my overlay</li>
      <li class="task-list-item">Added <a href="https://github.com/dracula/vim/issues/340">alucard support</a> to dracula/vim</li>
    </ul>
  </li>
  <li>2 months:
    <ul class="task-list">
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Explore <a href="http://www.kroah.com/log/blog/2025/12/15/tracking-kernel-commits-across-branches/">verhaal in Rust</a></li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Paint another squad</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Draft section or 2 of Luddite essay</li>
    </ul>
  </li>
  <li>4 months:
    <ul class="task-list">
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Rewrite mosaic program</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Paint another squad</li>
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Draft section or 2 of Luddite essay</li>
    </ul>
  </li>
  <li>2 months:
    <ul class="task-list">
      <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Publish Luddite essay?</li>
    </ul>
  </li>
</ul>

<p>Generally:</p>
<ul>
  <li>actively look for local folks: meetups, community groups, unions, etc. (wiki: 2025)</li>
  <li>write more
    <ul>
      <li>Git: collected resources and my workflow</li>
      <li>Critical thinking (wiki: todo/critique)</li>
      <li>write about our experience reshaping our digital lives</li>
      <li>share our general personal computing expertise/experience</li>
      <li>start my book on GUI applications in Racket</li>
    </ul>
  </li>
  <li>make time for board games (say, 1 big one per month? We play lots of little ones already)</li>
  <li>go to USK 2–3 times/week</li>
  <li>keep writing fun, useful programs.
    <ul>
      <li>think about where to direct open-source energy</li>
    </ul>
  </li>
  <li>decrease household food waste</li>
</ul>

<p>Areas I want to learn more about this year:</p>
<ul>
  <li>Linux
    <ul>
      <li>Keyboard configuration</li>
      <li>Productivity tools: controlling Firefox tabs, dunst/rofi/etc., manipulating my monitor’s settings, …</li>
      <li>Email client (aerc) for open source work</li>
      <li>Setup LSP for ebuilds</li>
      <li>Networking (wiki: linux-concepts/tcp; <a href="https://bou.ke/blog/rust-ping/">Rootless pings</a> claims you need root for ping? FasterThanLime has a DIY ping series if memory serves)</li>
    </ul>
  </li>
  <li>Alternative technology
    <ul>
      <li><a href="https://euro-stack.com">Euro Stack</a></li>
      <li><a href="https://sr.ht/">sourcehut</a></li>
      <li>Email server, domain, etc. (wiki: 2025)</li>
      <li>VPN?</li>
      <li>VPS or colocated hosting if needed?</li>
      <li>Browsers (wiki: linux) if Firefox truly gets unbearable?</li>
    </ul>
  </li>
</ul>

<p>Political ways I can get involved:</p>
<ul>
  <li>book access and general literacy</li>
  <li>digital/mathematical literacy</li>
  <li>LGBTQIA+ support</li>
  <li>local reporting</li>
  <li>digital control/privacy; personal computing</li>
  <li>de-toxifying masculinity</li>
</ul>

<p>Last Changed: 2026 Apr 19</p>]]></content><author><name>D. Ben Knoble</name></author><category term="[&quot;Blog&quot;]" /><category term="goals" /><summary type="html"><![CDATA[A short, probably sensible-only-to-me list of goals. Timeboxed. I’ll also add other things as I go.]]></summary></entry><entry><title type="html">Core Values in Software</title><link href="https://benknoble.github.io/blog/2025/12/29/resonant-computing/" rel="alternate" type="text/html" title="Core Values in Software" /><published>2025-12-29T00:00:00+00:00</published><updated>2025-12-29T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2025/12/29/resonant-computing</id><content type="html" xml:base="https://benknoble.github.io/blog/2025/12/29/resonant-computing/"><![CDATA[<p>I signed the <a href="https://resonantcomputing.org/">Resonant Computing Manifesto</a>
today. I encourage you to consider your own core values and, if they align,
consider signing.</p>

<p>I’m <a href="/workshops/14th-racket-con/">working on an essay</a> (“Why I
consider myself a modern Luddite”), and I’ve been thinking about <a href="/blog/2025/04/18/skepticism/#situated">situated
software</a>, the balance of
power, <a href="https://www.noemamag.com/the-politics-of-superintelligence/">LLMs as political
tool</a>, and trusting
fellow humans quite a bit. I find the manifesto a compelling tool for
establishing core values for software design. More to come…</p>]]></content><author><name>D. Ben Knoble</name></author><category term="Blog" /><category term="design" /><category term="critic" /><category term="llm" /><category term="privacy" /><summary type="html"><![CDATA[I signed the Resonant Computing Manifesto today. I encourage you to consider your own core values and, if they align, consider signing.]]></summary></entry><entry><title type="html">Packaged ZSA Keymapp for Gentoo</title><link href="https://benknoble.github.io/blog/2025/12/08/zsa-keymapp/" rel="alternate" type="text/html" title="Packaged ZSA Keymapp for Gentoo" /><published>2025-12-08T00:00:00+00:00</published><updated>2025-12-08T00:00:00+00:00</updated><id>https://benknoble.github.io/blog/2025/12/08/zsa-keymapp</id><content type="html" xml:base="https://benknoble.github.io/blog/2025/12/08/zsa-keymapp/"><![CDATA[<p>My <a href="https://github.com/benknoble/benknoble-gentoo-overlay">Gentoo overlay</a> now
contains an ebuild for ZSA’s Keymapp application.</p>

<p>The licensing situation is unclear, so I’ve marked it “unknown” for now. In
addition, the ebuild is “live” (so only rebuilds with <code class="language-plaintext highlighter-rouge">emerge @live-rebuild</code>);
ZSA doesn’t publish versioned archives, as far as I can tell, so we can only
grab the latest. In spite of being version 9999, the ebuild is not actually live
in the sense of <code class="language-plaintext highlighter-rouge">@live-rebuild</code>. Strange.</p>

<p>When the archive has actually been updated, I’ll have to use <code class="language-plaintext highlighter-rouge">ebuild $(equery w
zsa-keymapp) manifest</code> or similar to update the Manifest. (For some reason,
<code class="language-plaintext highlighter-rouge">pkgdev</code> didn’t work on this one? And a couple of live ebuilds I checked don’t
have manifest information, but they also use the Git eclass for fetching.)</p>]]></content><author><name>D. Ben Knoble</name></author><category term="Blog" /><category term="gentoo" /><summary type="html"><![CDATA[My Gentoo overlay now contains an ebuild for ZSA’s Keymapp application.]]></summary></entry></feed>