<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Notes on mht.wtf</title><id>urn:uuid:c1f724b8-bc6b-4ec8-815f-021166e89979</id><updated>2026-05-21T23:26:15.795120700+02:00</updated><link href="https://mht.wtf/note" rel="alternate"/><link href="https://mht.wtf/note/feed.xml" rel="self"/><entry><title></title><id>https://mht.wtf/note/#2026-01-04-17-55-ai</id><updated>2026-01-04T17:55:23+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-01-04-17-55-ai" rel=""/><published>2026-01-04T17:55:23+01:00</published><content type="text/html">&lt;p&gt;Two links to programming giants being &lt;em&gt;very&lt;/em&gt; sceptical towards AI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bsky.app/profile/robpike.io/post/3matwg6w3ic2s&quot;&gt;Rob Pike&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gist.github.com/richhickey/ea94e3741ff0a4e3af55b9fe6287887f&quot;&gt;Rich Hickey&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-01-31-18-20-argon</id><updated>2026-01-31T18:20:59+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-01-31-18-20-argon" rel=""/><published>2026-01-31T18:20:59+01:00</published><content type="text/html">&lt;p&gt;The Argon Forte A4 WiFi is a bad speaker set:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They&apos;re reasonably expensive, the sound is good, but the software is horrible.&lt;/li&gt;
&lt;li&gt;The manual has wrong information.&lt;/li&gt;
&lt;li&gt;The app, &amp;quot;DTS Play-Fi&amp;quot; by Xperi is bad.&lt;/li&gt;
&lt;li&gt;I have spent hours trying to update the firmware without success, and Argon says you need windows to flash it onto a usb drive.&lt;/li&gt;
&lt;li&gt;They auto-shutdown after 15 minutes while playing audio when connected via bluetooth.&lt;/li&gt;
&lt;li&gt;Airplay works fine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not okay. I will never buy anything from Argon again.
Everyone who wrote code for this product is fired.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2025-11-19-22-01-idiosyncra</id><updated>2025-11-19T22:01:22+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2025-11-19-22-01-idiosyncra" rel=""/><published>2025-11-19T22:01:22+01:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://exple.tive.org/blarg/2024/12/29/idiosyncra/&quot;&gt;Idiosyncra&lt;/a&gt; is an inspiring blog post.
I really like the idea of a linux box without all of the &lt;em&gt;stuff&lt;/em&gt;; the endless list of dynamic libraries and backgrounds jobs running left and right.
It might be time to get my old xps out of the closet and turn it into my minimalist computer.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-03-01-11-14-minimaxir</id><updated>2026-03-01T11:14:40+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-03-01-11-14-minimaxir" rel=""/><published>2026-03-01T11:14:40+01:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://minimaxir.com/2026/02/ai-agent-coding/&quot;&gt;An AI agent coding skeptic tries AI agent coding, in excessive detail&lt;/a&gt; is a great read,
but maybe I think so because it aligns with &lt;a href=&quot;/post/ai26&quot;&gt;my recent experience&lt;/a&gt;.
Llms, and in the post, agents, work now.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-02-23-21-35-back-to-silence</id><updated>2026-02-23T21:35:57+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-02-23-21-35-back-to-silence" rel=""/><published>2026-02-23T21:35:57+01:00</published><content type="text/html">&lt;p&gt;After &lt;a href=&quot;https://mht.wtf/post/quit/&quot;&gt;my exit&lt;/a&gt; from socials, I&apos;ve gradually started going back to HN, lobsters, and even reddit. It was a slippery slope from reading headlines to reading comments to doomscrolling. Today, again, I read stupid things that made my pulse rise, so I&apos;m off again.&lt;/p&gt;
&lt;p&gt;Out for the year.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-01-03-21-33-next-thing</id><updated>2026-01-03T21:33:15+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-01-03-21-33-next-thing" rel=""/><published>2026-01-03T21:33:15+01:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://blog.glyph.im/2026/01/the-next-thing-will-not-be-big.html&quot;&gt;The Next Thing Will Not Be Big&lt;/a&gt; by Glyph is an inspiring
note on what&apos;s to come in 2026: small(er) computing, local first, smaller resource footprint, and limited reliance on certain
classes of saas products (i.e. llms) to be cheap.
A future I can get behind!&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-05-18-22-41-floppy</id><updated>2026-05-18T22:41:21+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-05-18-22-41-floppy" rel=""/><published>2026-05-18T22:41:21+02:00</published><content type="text/html">&lt;p&gt;https://fitsonafloppy.com/ resonates. Not because I want the floppy back -- it was already outdated when I entered computing --
but because small is cool! Small is good! Embrace constraints!&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2025-11-15-17-09-hello-world</id><updated>2025-11-15T17:09:40+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2025-11-15-17-09-hello-world" rel=""/><published>2025-11-15T17:09:40+01:00</published><content type="text/html">&lt;p&gt;This is a note!  I&apos;ve been inspired by &lt;a href=&quot;https://dbushell.com/notes/&quot;&gt;David
Bushell&lt;/a&gt; and have decided to create a listing of
short notes on my site.
Notes are for small announcements, quick comments, endorsements of other peoples stuff online,
or otherwise things that don&apos;t warrant a full blog post.
After all, I&apos;ve &lt;a href=&quot;/post/quit&quot;&gt;quit socials&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I hope and plan to fill this page up so that I&apos;ll have to add pagination
to &lt;a href=&quot;/post/static-site/&quot;&gt;my static-site generator&lt;/a&gt;; adding this also required some tweaking to &lt;code&gt;mhtss&lt;/code&gt;.
Also, I expect I&apos;ll have to add some styling here eventually.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2025-11-15-21-13-feeds</id><updated>2025-11-15T21:13:42+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2025-11-15-21-13-feeds" rel=""/><published>2025-11-15T21:13:42+01:00</published><content type="text/html">&lt;p&gt;I&apos;ve also set up a separate Atom feed for the notes &lt;a href=&quot;/note/index.xml&quot;&gt;here&lt;/a&gt;.
This turned out to be really easy due to the way I initially set up atom feeds in &lt;code&gt;mhtss&lt;/code&gt;,
even though it involved some copying and pasting.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-03-10-23-26-dancing-bear</id><updated>2026-03-10T23:26:21+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-03-10-23-26-dancing-bear" rel=""/><published>2026-03-10T23:26:21+01:00</published><content type="text/html">&lt;blockquote&gt;
&lt;p&gt;You go to a circus and one of the things that they have on display is a dancing bear. Why do people go to the circus to see a dancing bear? It&apos;s not because the dance is good. The dance is actually terrible.&lt;/p&gt;
&lt;p&gt;The thing that&apos;s interesting is that the bear is dancing at all.&lt;/p&gt;
&lt;p&gt;[..] Frequency engineers overfocus on the fact that the bear is dancing, and underfocus on the fact that the dance is terrible.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From &lt;a href=&quot;https://www.youtube.com/watch?v=RJyPVLMyyuA&quot;&gt;Should You Be A Carpenter? [Wading Through AI - Episode 1]&lt;/a&gt;.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-05-21-23-23-nvim</id><updated>2026-05-21T23:23:30+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-05-21-23-23-nvim" rel=""/><published>2026-05-21T23:23:30+02:00</published><content type="text/html">&lt;p&gt;Today I had planned to prune my &lt;code&gt;nvim&lt;/code&gt; config down to the bare essentials
and get rid of a bunch of plugins by rewriting the small subsets of them
that I use.  It turns out that I (a) didn&apos;t have that many plugins, and
(b) the ones I use actually have a bunch of cool functionality!  So instead
of rewriting plugins I explored the plugins I&apos;m already using, which was fun.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2025-11-26-21-54-voyager</id><updated>2025-11-26T21:54:02+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2025-11-26-21-54-voyager" rel=""/><published>2025-11-26T21:54:02+01:00</published><content type="text/html">&lt;p&gt;I bought an ZSA Voyager and it arrived the other day.
I&apos;ve used split keyboards in the past so it&apos;s not completely foreign to me, but
this has fewer keys, so it needs a different layout.
In addition, my previous keyboard was a Planck, and the Voyager is basically a mix between the two.&lt;/p&gt;
&lt;p&gt;All my muscle memory is wrong, and typing is tedious.&lt;/p&gt;
&lt;p&gt;I don&apos;t have any new keymaps I&apos;m very happy with yet (on the Planck I had &lt;code&gt;_&lt;/code&gt;
right next to space, which made &lt;code&gt;typing_out_snake_case&lt;/code&gt; variables a breeze),
but once I get used to the basics, like where Enter is, I&apos;ll do some exploring.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2025-12-28-22-28-back-to-hn</id><updated>2025-12-28T22:28:27+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2025-12-28-22-28-back-to-hn" rel=""/><published>2025-12-28T22:28:27+01:00</published><content type="text/html">&lt;p&gt;After &lt;a href=&quot;/post/quit/&quot;&gt;some time&lt;/a&gt; off, I started browsing HN and lobsters again.
I&apos;ve avoided both comment sections but look at the feeds regularly to find new blogs to follow.
So far so good: I haven&apos;t noticed being in a worse mood for doing so, and I have found a few interesting things to read.&lt;/p&gt;
&lt;p&gt;It&apos;s been nice with some time off!&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-02-07-22-48-swe-is-back</id><updated>2026-02-07T22:48:29+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-02-07-22-48-swe-is-back" rel=""/><published>2026-02-07T22:48:29+01:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://blog.alaindichiappari.dev/p/software-engineering-is-back&quot;&gt;Software Engineering is back&lt;/a&gt; is a great post. It is very similar to my own experience this year with llms.  &lt;code&gt;claude&lt;/code&gt; let&apos;s me avoid a lot of programmer BS that somehow we programmers have made up for ourselves, and it&apos;s now way easier to make useful things that are also not trivial.  Or rather, where &amp;quot;trivial&amp;quot; gets you has increased a fair amount.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-02-01-16-45-argon2</id><updated>2026-02-01T16:45:40+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-02-01-16-45-argon2" rel=""/><published>2026-02-01T16:45:40+01:00</published><content type="text/html">&lt;p&gt;The best way to be proven wrong is to be confidently wrong.&lt;/p&gt;
&lt;p&gt;I spent some time with claude code today trying, yet again, to figure out my Argon speakers.
We scanned ports and probed around in some http servers related to casting and airplay;
I was hoping for a firmware flashing endpoint or something like it, but didn&apos;t find anything.
I also confirmed that the speakers turn off when connecting to other bluetooth devices, not just my computer.&lt;/p&gt;
&lt;p&gt;Since nothing useful came out of the tcp probing, I went back to trying to flash the updated firmware,
thinking that maybe I did the FAT formatting wrong or used the wrong type or something like that.
As it turns out, I &lt;em&gt;was&lt;/em&gt; doing something wrong, because the system I was on had had its kernel updated without being rebooted,
and for some reason this messes up anything USB where plugged in devices aren&apos;t showing up.&lt;/p&gt;
&lt;p&gt;I hadn&apos;t flashed the right device.
The device I had deleted and repartitioned was my secondadry old ssd.
&lt;code&gt;lsblk&lt;/code&gt;s default output doesn&apos;t show labels by default so there was no obvious way for me to see that,
but claude, in its artificial wisdon, decided to run it showing more columns so &lt;em&gt;it&lt;/em&gt; saw that the 128GB device that was listed was an SSD from OCZ.&lt;/p&gt;
&lt;p&gt;After actually getting the firmware on the usb, things worked out. I had done all of the other steps correctly all along.
I can&apos;t even remember what I used the extra SSD for, so no harm done.
But maaaaan ...&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-05-20-21-40-commit</id><updated>2026-05-20T21:40:38+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-05-20-21-40-commit" rel=""/><published>2026-05-20T21:40:38+02:00</published><content type="text/html">&lt;p&gt;I&apos;ve been thinking more about the git workflow from a few notes down.&lt;/p&gt;
&lt;p&gt;A commit is still the unit of deployment.
You work locally and push one or more commits up to an &amp;quot;inbox&amp;quot; of sorts.
Receiving commits in the inbox can trigger things like lints, tests, and so on.
Maybe teams will require lints to pass, tests to pass, an llm to approve, and a human to approve.
Reviews can also live here.
If all is well, it gets merged. If not, it&apos;s rejected.
Rejected commits will have to be revised and re-sent,
and commits that depend on rejected commits are also rejected.&lt;/p&gt;
&lt;p&gt;I guess it&apos;s really very similar to the email-based workflow, except that you get to avoid email.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-03-15-15-04-ui-testing</id><updated>2026-03-15T15:04:23+01:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-03-15-15-04-ui-testing" rel=""/><published>2026-03-15T15:04:23+01:00</published><content type="text/html">&lt;p&gt;My current hobby-project is a gui library that I want to use for small personal apps.
It&apos;s in Rust and uses thin libwayland and opengl wrappers;
I&apos;m a first time libwayland-user and a long time opengl-victim.
Anyways, today I set up a way to launch my demo-app in headless &lt;code&gt;weston&lt;/code&gt; (the reference wayland compositor)
and send my app commands over a socket, like &lt;code&gt;mouse x y&lt;/code&gt;, &lt;code&gt;key w down&lt;/code&gt;, &lt;code&gt;render&lt;/code&gt;, or &lt;code&gt;screenshot&lt;/code&gt;.
This means I can have an llm interact with the demo-app while developing and see it live,
without any real windows popping up on my machine.&lt;/p&gt;
&lt;p&gt;This closes the testing loop completely for gui apps, and it took around an
hour to set up, including figuring out what I even wanted, and refactoring the
event system of the library.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-04-14-23-31-zero-alignment</id><updated>2026-04-14T23:31:14+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-04-14-23-31-zero-alignment" rel=""/><published>2026-04-14T23:31:14+02:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://maggieappleton.com/zero-alignment/&quot;&gt;One Developer, Two Dozen Agents, Zero Alignment&lt;/a&gt; by Maggie Appleton looks very interesting.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-05-07-23-13-prs</id><updated>2026-05-07T23:13:39+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-05-07-23-13-prs" rel=""/><published>2026-05-07T23:13:39+02:00</published><content type="text/html">&lt;p&gt;Here&apos;s an unbaked thought:&lt;/p&gt;
&lt;p&gt;Maybe PRs are always the wrong unit of work, and that we should rather merge single commits at a time.
If a commit feels too small, you can just make larger commits.
It doesn&apos;t make sense to first push one commit, then have CI fail, fix it and push the next,
get partial review, fix that, resolve something else, find another bug yourself, CI failed again,
oops second reviewer wanted something pulled out to a separate PR, now we&apos;re rebasing this on top of another PR which invalidates everything on GitHub apparently, maybe we squash the stack of 10+ commits,
most of which are very small diffs, into one commit and start again.&lt;/p&gt;
&lt;p&gt;Oh also, do you write stuff in the commit message or in the PR description?
Well, it&apos;ll depend on how things are merged, of course.&lt;/p&gt;
&lt;p&gt;Instead, it could be commits that we ship off.
Fix a thing, commit, ship it.
It&apos;s now handled in review-land somewhere, and you continue with or without it locally.
If it&apos;s merged, we&apos;re done, and all is well.
The commit is now in &lt;code&gt;master&lt;/code&gt;.
If not, the commit is gone.
No &amp;quot;updates&amp;quot; to the commit, you&apos;ll have to redo it and resubmit it.
This is really simple: &lt;code&gt;git checkout&lt;/code&gt; and &lt;code&gt;git commit -a&lt;/code&gt;.
Ship it, try again. Rebase any other work on top of this.&lt;/p&gt;
&lt;p&gt;No need to open a browser.&lt;/p&gt;
</content></entry><entry><title></title><id>https://mht.wtf/note/#2026-05-11-18-03-textedit</id><updated>2026-05-11T18:03:48+02:00</updated><author><name>Martin Hafskjold Thoresen</name><email>m@mht.wtf</email></author><link href="https://mht.wtf/note/#2026-05-11-18-03-textedit" rel=""/><published>2026-05-11T18:03:48+02:00</published><content type="text/html">&lt;p&gt;&lt;a href=&quot;https://ratfactor.com/cards/text-files-as-ui&quot;&gt;Text files as a user interface&lt;/a&gt; is really great. It describes the &lt;code&gt;git commit&lt;/code&gt; or &lt;code&gt;git rebase -i&lt;/code&gt; pattern of having a text file be the user-interface of a (sub) program. I&apos;d like to play around with this more in the future, instead of having a bunch of &lt;code&gt;--flags&lt;/code&gt;.&lt;/p&gt;
</content></entry></feed>