summaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/arch-systemd.html8
-rw-r--r--public/assets/style.css43
-rw-r--r--public/bash-arrays.html4
-rw-r--r--public/bash-redirection.html4
-rw-r--r--public/btrfs-rec.html4
-rw-r--r--public/build-bash-1.html4
-rw-r--r--public/crt-sh-architecture.html4
-rw-r--r--public/emacs-as-an-os.html4
-rw-r--r--public/emacs-shells.html4
-rw-r--r--public/fd_printf.html4
-rw-r--r--public/footpedal.html111
-rw-r--r--public/footpedal.md93
-rw-r--r--public/fs-licensing-explanation.html4
-rw-r--r--public/git-go-pre-commit.html4
-rw-r--r--public/http-notes.html4
-rw-r--r--public/index.atom220
-rw-r--r--public/index.html10
-rw-r--r--public/index.md3
-rw-r--r--public/java-segfault-redux.html4
-rw-r--r--public/java-segfault.html4
-rw-r--r--public/kbd-xmodmap.html4
-rw-r--r--public/lp2015-videos.html4
-rw-r--r--public/make-memoize.html4
-rw-r--r--public/message-threading.html88
-rw-r--r--public/message-threading.md76
-rw-r--r--public/nginx-mediawiki.html4
-rw-r--r--public/pacman-overview.html4
-rw-r--r--public/poor-system-documentation.html4
-rw-r--r--public/posix-pricing.html4
-rw-r--r--public/purdue-cs-login.html4
-rw-r--r--public/rails-improvements.html4
-rw-r--r--public/relax-ng-errata.html51
-rw-r--r--public/relax-ng-errata.md42
-rw-r--r--public/ryf-routers.html4
-rw-r--r--public/term-colors.html4
-rw-r--r--public/what-im-working-on-fall-2014.html4
-rw-r--r--public/x11-systemd.html4
37 files changed, 789 insertions, 60 deletions
diff --git a/public/arch-systemd.html b/public/arch-systemd.html
index 30d089c..c61d2ff 100644
--- a/public/arch-systemd.html
+++ b/public/arch-systemd.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>What Arch Linux's switch to systemd means for users — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -39,7 +40,7 @@ basically the only thing in rc.conf will be <code>DAEMONS</code>.<a
href="#fn2" class="footnote-ref" id="fnref2"
role="doc-noteref"><sup>2</sup></a> For now there is compatibility for
the variables that used to be there, but that is going away.</p>
-<aside id="footnotes" class="footnotes footnotes-end-of-document"
+<section id="footnotes" class="footnotes footnotes-end-of-document"
role="doc-endnotes">
<hr />
<ol>
@@ -67,13 +68,14 @@ role="doc-backlink">↩︎</a></p></li>
<code>netmask</code>, and <code>gateway</code>. But those are minor.<a
href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
</ol>
-</aside>
+</section>
</article>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2012 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/assets/style.css b/public/assets/style.css
index f345dc1..8fa9dbf 100644
--- a/public/assets/style.css
+++ b/public/assets/style.css
@@ -9,13 +9,6 @@ body {
font-family: sans-serif;
}
-blockquote {
- border-left: solid .2em #DDDDFF;
- margin-left: 1.5em;
- padding-left: 0.3em;
- font-style: italic;
-}
-
footer {
text-align: center;
font-size: 70%;
@@ -26,32 +19,28 @@ footer {
li > p:first-child { margin-top: 0; }
li p + ul { margin-top: -1em; }
+/* blockquote elements */
+
+blockquote {
+ border-left: solid .2em #DDDDFF;
+ margin-left: 1.5em;
+ padding-left: 0.3em;
+}
+blockquote cite {
+ font-style: italic;
+}
+blockquote cite::before {
+ content: "-- ";
+}
+
/* code elements */
kbd, code, samp, tt, pre {
background: #DDDDFF;
-}
-kbd, code, samp, tt, {
- white-space: pre-wrap;
-}
-@media screen {
- /* Firefox for Android does weird hacks with font-size. In
- * particular, `white-space: pre` is broken on Firefox for
- * Android if you don't set an absolute font-size. So this is
- * a hack to get reasonable behavior without setting
- * `white-space: pre`. */
- pre {
- white-space: pre-wrap;
- overflow-x: auto;
- }
- pre > code {
- white-space: pre-wrap;
- display: block;
- min-width: max-content;
- }
+ white-space: pre;
}
@media print {
- pre, pre > code {
+ kbd, code, samp, tt, pre {
white-space: pre-wrap;
}
}
diff --git a/public/bash-arrays.html b/public/bash-arrays.html
index 5e79064..76132f5 100644
--- a/public/bash-arrays.html
+++ b/public/bash-arrays.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Bash arrays — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -399,7 +400,8 @@ since 1996!</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/bash-redirection.html b/public/bash-redirection.html
index f846a61..f69a881 100644
--- a/public/bash-redirection.html
+++ b/public/bash-redirection.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Bash redirection — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -50,7 +51,8 @@ cmd &gt;file 2&gt;&amp;1 # both stdout and stderr go to file</code></pre>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/btrfs-rec.html b/public/btrfs-rec.html
index 9ecaec8..e8366e9 100644
--- a/public/btrfs-rec.html
+++ b/public/btrfs-rec.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Announcing: btrfs-rec: Recover (data from) a broken btrfs filesystem — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -1166,7 +1167,8 @@ that we can get ARC into the Linux kernel before then?</p></li>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2023 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/build-bash-1.html b/public/build-bash-1.html
index 02206be..d1494fd 100644
--- a/public/build-bash-1.html
+++ b/public/build-bash-1.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Building Bash 1.14.7 on a modern system — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -99,7 +100,8 @@ exponential function.</li>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2015 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/crt-sh-architecture.html b/public/crt-sh-architecture.html
index a0a2840..bf1b71c 100644
--- a/public/crt-sh-architecture.html
+++ b/public/crt-sh-architecture.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>The interesting architecture of crt.sh — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -76,7 +77,8 @@ were worth sharing.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2018 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/emacs-as-an-os.html b/public/emacs-as-an-os.html
index 5218245..f0602c1 100644
--- a/public/emacs-as-an-os.html
+++ b/public/emacs-as-an-os.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Emacs as an operating system — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -45,7 +46,8 @@ to do that all over the network.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/emacs-shells.html b/public/emacs-shells.html
index 66035f7..a75c5f7 100644
--- a/public/emacs-shells.html
+++ b/public/emacs-shells.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>A summary of Emacs' bundled shell and terminal modes — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -76,7 +77,8 @@ or bash, it will be running “esh”, part of Emacs.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/fd_printf.html b/public/fd_printf.html
index 2bc55a4..dc4d7c6 100644
--- a/public/fd_printf.html
+++ b/public/fd_printf.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>`dprintf`: print formatted text directly to a file descriptor — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -51,7 +52,8 @@ results.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="http://www.wtfpl.net/txt/copying/">WTFPL-2</a> license.</p>
diff --git a/public/footpedal.html b/public/footpedal.html
new file mode 100644
index 0000000..046b556
--- /dev/null
+++ b/public/footpedal.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>My footpedal — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="assets/style.css">
+ <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
+</head>
+<body>
+<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » footpedal</header>
+<article>
+<h1 id="my-footpedal">My footpedal</h1>
+<p>A collection of things I have written about the footpedal that I
+sometimes use with my computer:</p>
+<hr />
+<blockquote>
+<p>I have a VEC Infinity IN-USB-2 that I grabbed at Goodwill for $5.</p>
+<p>I love it. I tend to use it less when the RSI isn’t flaring up, but
+the first time I had RSI being bad is when I started to use it–it really
+helped. My RSI was in the few fingers on the pinky-side of my hands (so
+the opposite of <abbr title="Carpel Tunnel
+Syndrome">CTS</abbr>; I’m told this is less common, but I’m figuring
+it’s more common for Emacs users, with all the talk of “Emacs-pinky”),
+and much worse on my right hand. The pedal has 3 keys; I have them as
+(left-to-right) Control, Shift, and Alt/Meta, with the addition that if
+I short-tap the center, it does Enter; this basically means that I can
+avoid using my right pinky at all when typing. This allowed me to keep
+using the computer without making things worse, while I did other things
+to improve the RSI (stretches, wearing wrist braces at night). The
+tap-for-Enter seems a bit weird, but I added it after that motion seemed
+instinctual when using left-button for control in a repeated C-s search;
+hold foot-left and tap keyboard-S to increment search, then tap
+foot-center to complete the search.</p>
+<p>About the IN-USB-2 specifically:</p>
+<p><strong><em>It’s an XK-3:</em></strong> It’s actually made by P.I.
+Engineering for VEC; it’s a <a
+href="https://web.archive.org/web/20180119/http://piengineering.com/xkeys/xkfootRear.php">rear-hinged
+X-Keys XK-3</a><sup>(<a href="https://xkeys.com/xkfootrear.html">updated
+link</a>)</sup> with a different (less capable) firmware. The benefit of
+the crippled firmware is that the IN-USB-2 is way cheaper than buying a
+“real” XK-3 (even without finding one at Goodwill).</p>
+<p><strong><em>Firmware:</em></strong> On the downside of that, the
+firmware is less capable; unlike the XK-3, it shows up as a generic HID
+device with 3 buttons, instead of as a keyboard, and thus you can’t
+configure which button is which key. That is, you’ll have to have a
+program running to monitor the HID buttons and synthesize whichever key
+events you want, instead of configuring the keys on the device.
+Fortunately, the device is supported by P.I. Engineering’s Linux SDK, <a
+href="https://web.archive.org/web/20180119/http://xkeys.com/PISupport/DeveloperLinuxSDK.php"><code>pihid</code></a><sup>(<a
+href="https://xkeys.com/software/developer/developerlinuxsdk.html">updated
+link</a>)</sup> (<a
+href="https://github.com/piengineering/xkeys">git</a>), so that program
+is fairly easy to write (and as an Emacs user, you probably appreciate
+that configuration-is-code gives you more flexibility). The
+<code>pihid</code> SDK is a crappy little wrapper around the
+<code>hidapi</code> library with the appropriate magic numbers for the
+hardware. <code>hidapi</code> is portable to macOS; I imagine that
+getting <code>pihid</code> working on macOS is no trouble at all. (IDK
+if their <a
+href="https://web.archive.org/web/20180119/http://piengineering.com/PISupport/SoftwareControllerMate.php">ControllerMate</a>
+program for macOS works with it, or if ControllerMate requires the real
+XK-3 firmware.)</p>
+<p><strong><em>Hardware:</em></strong> The thing feels sturdy. If the
+switch ever craps out (not that I think it would), it’s a generic switch
+that’s in everything that you can pick up for $0.50; which is nice for
+peace-of-mind. The middle button feels a little wide; I generally have
+my foot around the left side of it, for Control, and it is difficult to
+reach over to the right for Meta, and usually end up hitting Meta on the
+keyboard instead.</p>
+<p><cite><a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswhzkt/">Reddit,
+2018-01-19</a></cite></p>
+</blockquote>
+<hr />
+<blockquote>
+<p>I love it, but I don’t necessarily love it <em>more than I would any
+other foot pedal</em>. If you find a different one for cheaper, go for
+it.</p>
+<p><cite><a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrf3r/">Reddit,
+2018-01-19</a></cite></p>
+</blockquote>
+<hr />
+<blockquote>
+<p>I found that my brain didn’t want to treat the pedals like it did
+keys–it wanted to treat them modally. I wasn’t <em>pressing
+control</em>, I was <em>entering control-mode</em>. I wasn’t
+<em>pressing shift</em>, I was <em>entering caps-mode</em>. Which works
+out, because it isn’t the quick keystrokes that cause the most strain,
+it’s holding the modifier with one finger while the rest of the hand
+moves around. I wouldn’t use the footpedal Control for the usual quick
+C-f/b/n/p, but it’s great for holding Control as you C-s through a
+document.</p>
+<p><cite><a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrmo5/">Reddit,
+2018-01-19</a></cite></p>
+</blockquote>
+
+</article>
+<footer>
+ <aside class="sponsor"><p>I'd love it if you <a class="em"
+ href="/sponsor/">sponsored me</a>. It will allow me to continue
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
+
+<p>The content of this page is Copyright © 2025 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
+<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
+</footer>
+</body>
+</html>
diff --git a/public/footpedal.md b/public/footpedal.md
new file mode 100644
index 0000000..57c1d92
--- /dev/null
+++ b/public/footpedal.md
@@ -0,0 +1,93 @@
+My footpedal
+============
+---
+date: "2025-05-31"
+markdown_options: "+superscript"
+---
+
+A collection of things I have written about the footpedal that I
+sometimes use with my computer:
+
+----
+
+> I have a VEC Infinity IN-USB-2 that I grabbed at Goodwill for $5.
+>
+> I love it. I tend to use it less when the RSI isn't flaring up, but
+> the first time I had RSI being bad is when I started to use it--it
+> really helped. My RSI was in the few fingers on the pinky-side of
+> my hands (so the opposite of <abbr title="Carpel Tunnel
+> Syndrome">CTS</abbr>; I'm told this is less common, but I'm figuring
+> it's more common for Emacs users, with all the talk of
+> "Emacs-pinky"), and much worse on my right hand. The pedal has 3
+> keys; I have them as (left-to-right) Control, Shift, and Alt/Meta,
+> with the addition that if I short-tap the center, it does Enter;
+> this basically means that I can avoid using my right pinky at all
+> when typing. This allowed me to keep using the computer without
+> making things worse, while I did other things to improve the RSI
+> (stretches, wearing wrist braces at night). The tap-for-Enter seems
+> a bit weird, but I added it after that motion seemed instinctual
+> when using left-button for control in a repeated C-s search; hold
+> foot-left and tap keyboard-S to increment search, then tap
+> foot-center to complete the search.
+>
+> About the IN-USB-2 specifically:
+>
+> ***It's an XK-3:*** It's actually made by P.I. Engineering for VEC;
+> it's a [rear-hinged X-Keys
+> XK-3](https://web.archive.org/web/20180119/http://piengineering.com/xkeys/xkfootRear.php)^([updated
+> link](https://xkeys.com/xkfootrear.html))^ with a different (less
+> capable) firmware. The benefit of the crippled firmware is that the
+> IN-USB-2 is way cheaper than buying a "real" XK-3 (even without
+> finding one at Goodwill).
+>
+> ***Firmware:*** On the downside of that, the firmware is less
+> capable; unlike the XK-3, it shows up as a generic HID device with 3
+> buttons, instead of as a keyboard, and thus you can't configure
+> which button is which key. That is, you'll have to have a program
+> running to monitor the HID buttons and synthesize whichever key
+> events you want, instead of configuring the keys on the device.
+> Fortunately, the device is supported by P.I. Engineering's Linux
+> SDK,
+> [`pihid`](https://web.archive.org/web/20180119/http://xkeys.com/PISupport/DeveloperLinuxSDK.php)^([updated
+> link](https://xkeys.com/software/developer/developerlinuxsdk.html))^
+> ([git](https://github.com/piengineering/xkeys)), so that program is
+> fairly easy to write (and as an Emacs user, you probably appreciate
+> that configuration-is-code gives you more flexibility). The `pihid`
+> SDK is a crappy little wrapper around the `hidapi` library with the
+> appropriate magic numbers for the hardware. `hidapi` is portable to
+> macOS; I imagine that getting `pihid` working on macOS is no trouble
+> at all. (IDK if their
+> [ControllerMate](https://web.archive.org/web/20180119/http://piengineering.com/PISupport/SoftwareControllerMate.php)
+> program for macOS works with it, or if ControllerMate requires the
+> real XK-3 firmware.)
+>
+> ***Hardware:*** The thing feels sturdy. If the switch ever craps
+> out (not that I think it would), it's a generic switch that's in
+> everything that you can pick up for $0.50; which is nice for
+> peace-of-mind. The middle button feels a little wide; I generally
+> have my foot around the left side of it, for Control, and it is
+> difficult to reach over to the right for Meta, and usually end up
+> hitting Meta on the keyboard instead.
+>
+> <cite>[Reddit, 2018-01-19](https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswhzkt/)</cite>
+
+----
+
+> I love it, but I don't necessarily love it *more than I would any
+> other foot pedal*. If you find a different one for cheaper, go for
+> it.
+>
+> <cite>[Reddit, 2018-01-19](https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrf3r/)</cite>
+
+----
+
+> I found that my brain didn't want to treat the pedals like it did
+> keys--it wanted to treat them modally. I wasn't *pressing control*,
+> I was *entering control-mode*. I wasn't *pressing shift*, I was
+> *entering caps-mode*. Which works out, because it isn't the quick
+> keystrokes that cause the most strain, it's holding the modifier
+> with one finger while the rest of the hand moves around. I wouldn't
+> use the footpedal Control for the usual quick C-f/b/n/p, but it's
+> great for holding Control as you C-s through a document.
+>
+> <cite>[Reddit, 2018-01-19](https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrmo5/)</cite>
diff --git a/public/fs-licensing-explanation.html b/public/fs-licensing-explanation.html
index f84f5ac..f46dd7f 100644
--- a/public/fs-licensing-explanation.html
+++ b/public/fs-licensing-explanation.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>An explanation of how "copyleft" licensing works — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -69,7 +70,8 @@ source.”</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/git-go-pre-commit.html b/public/git-go-pre-commit.html
index 8b81f61..7349e46 100644
--- a/public/git-go-pre-commit.html
+++ b/public/git-go-pre-commit.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>A git pre-commit hook for automatically formatting Go code — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -60,7 +61,8 @@ remember why I did that, I will update this page.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="http://www.wtfpl.net/txt/copying/">WTFPL-2</a> license.</p>
diff --git a/public/http-notes.html b/public/http-notes.html
index 7828a1d..99b13c4 100644
--- a/public/http-notes.html
+++ b/public/http-notes.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Notes on subtleties of HTTP implementation — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -121,7 +122,8 @@ as OPTIONS for the entire server.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2016 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/index.atom b/public/index.atom
index 6423bca..29407be 100644
--- a/public/index.atom
+++ b/public/index.atom
@@ -5,12 +5,226 @@
<link rel="self" type="application/atom+xml" href="./index.atom"/>
<link rel="alternate" type="text/html" href="./"/>
<link rel="alternate" type="text/markdown" href="./index.md"/>
- <updated>2023-07-10T00:00:00+00:00</updated>
+ <updated>2025-05-31T00:00:00+00:00</updated>
<author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author>
<id>https://lukeshu.com/blog/</id>
<entry xmlns="http://www.w3.org/2005/Atom">
+ <link rel="alternate" type="text/html" href="./footpedal.html"/>
+ <link rel="alternate" type="text/markdown" href="./footpedal.md"/>
+ <id>https://lukeshu.com/blog/footpedal.html</id>
+ <updated>2025-05-31T00:00:00+00:00</updated>
+ <published>2025-05-31T00:00:00+00:00</published>
+ <title>My footpedal</title>
+ <content type="html">&lt;h1 id="my-footpedal"&gt;My footpedal&lt;/h1&gt;
+&lt;p&gt;A collection of things I have written about the footpedal that I
+sometimes use with my computer:&lt;/p&gt;
+&lt;hr /&gt;
+&lt;blockquote&gt;
+&lt;p&gt;I have a VEC Infinity IN-USB-2 that I grabbed at Goodwill for $5.&lt;/p&gt;
+&lt;p&gt;I love it. I tend to use it less when the RSI isn’t flaring up, but
+the first time I had RSI being bad is when I started to use it–it really
+helped. My RSI was in the few fingers on the pinky-side of my hands (so
+the opposite of &lt;abbr title="Carpel Tunnel
+Syndrome"&gt;CTS&lt;/abbr&gt;; I’m told this is less common, but I’m figuring
+it’s more common for Emacs users, with all the talk of “Emacs-pinky”),
+and much worse on my right hand. The pedal has 3 keys; I have them as
+(left-to-right) Control, Shift, and Alt/Meta, with the addition that if
+I short-tap the center, it does Enter; this basically means that I can
+avoid using my right pinky at all when typing. This allowed me to keep
+using the computer without making things worse, while I did other things
+to improve the RSI (stretches, wearing wrist braces at night). The
+tap-for-Enter seems a bit weird, but I added it after that motion seemed
+instinctual when using left-button for control in a repeated C-s search;
+hold foot-left and tap keyboard-S to increment search, then tap
+foot-center to complete the search.&lt;/p&gt;
+&lt;p&gt;About the IN-USB-2 specifically:&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;&lt;em&gt;It’s an XK-3:&lt;/em&gt;&lt;/strong&gt; It’s actually made by P.I.
+Engineering for VEC; it’s a &lt;a
+href="https://web.archive.org/web/20180119/http://piengineering.com/xkeys/xkfootRear.php"&gt;rear-hinged
+X-Keys XK-3&lt;/a&gt;&lt;sup&gt;(&lt;a href="https://xkeys.com/xkfootrear.html"&gt;updated
+link&lt;/a&gt;)&lt;/sup&gt; with a different (less capable) firmware. The benefit of
+the crippled firmware is that the IN-USB-2 is way cheaper than buying a
+“real” XK-3 (even without finding one at Goodwill).&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;&lt;em&gt;Firmware:&lt;/em&gt;&lt;/strong&gt; On the downside of that, the
+firmware is less capable; unlike the XK-3, it shows up as a generic HID
+device with 3 buttons, instead of as a keyboard, and thus you can’t
+configure which button is which key. That is, you’ll have to have a
+program running to monitor the HID buttons and synthesize whichever key
+events you want, instead of configuring the keys on the device.
+Fortunately, the device is supported by P.I. Engineering’s Linux SDK, &lt;a
+href="https://web.archive.org/web/20180119/http://xkeys.com/PISupport/DeveloperLinuxSDK.php"&gt;&lt;code&gt;pihid&lt;/code&gt;&lt;/a&gt;&lt;sup&gt;(&lt;a
+href="https://xkeys.com/software/developer/developerlinuxsdk.html"&gt;updated
+link&lt;/a&gt;)&lt;/sup&gt; (&lt;a
+href="https://github.com/piengineering/xkeys"&gt;git&lt;/a&gt;), so that program
+is fairly easy to write (and as an Emacs user, you probably appreciate
+that configuration-is-code gives you more flexibility). The
+&lt;code&gt;pihid&lt;/code&gt; SDK is a crappy little wrapper around the
+&lt;code&gt;hidapi&lt;/code&gt; library with the appropriate magic numbers for the
+hardware. &lt;code&gt;hidapi&lt;/code&gt; is portable to macOS; I imagine that
+getting &lt;code&gt;pihid&lt;/code&gt; working on macOS is no trouble at all. (IDK
+if their &lt;a
+href="https://web.archive.org/web/20180119/http://piengineering.com/PISupport/SoftwareControllerMate.php"&gt;ControllerMate&lt;/a&gt;
+program for macOS works with it, or if ControllerMate requires the real
+XK-3 firmware.)&lt;/p&gt;
+&lt;p&gt;&lt;strong&gt;&lt;em&gt;Hardware:&lt;/em&gt;&lt;/strong&gt; The thing feels sturdy. If the
+switch ever craps out (not that I think it would), it’s a generic switch
+that’s in everything that you can pick up for $0.50; which is nice for
+peace-of-mind. The middle button feels a little wide; I generally have
+my foot around the left side of it, for Control, and it is difficult to
+reach over to the right for Meta, and usually end up hitting Meta on the
+keyboard instead.&lt;/p&gt;
+&lt;p&gt;&lt;cite&gt;&lt;a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswhzkt/"&gt;Reddit,
+2018-01-19&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+&lt;hr /&gt;
+&lt;blockquote&gt;
+&lt;p&gt;I love it, but I don’t necessarily love it &lt;em&gt;more than I would any
+other foot pedal&lt;/em&gt;. If you find a different one for cheaper, go for
+it.&lt;/p&gt;
+&lt;p&gt;&lt;cite&gt;&lt;a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrf3r/"&gt;Reddit,
+2018-01-19&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+&lt;hr /&gt;
+&lt;blockquote&gt;
+&lt;p&gt;I found that my brain didn’t want to treat the pedals like it did
+keys–it wanted to treat them modally. I wasn’t &lt;em&gt;pressing
+control&lt;/em&gt;, I was &lt;em&gt;entering control-mode&lt;/em&gt;. I wasn’t
+&lt;em&gt;pressing shift&lt;/em&gt;, I was &lt;em&gt;entering caps-mode&lt;/em&gt;. Which works
+out, because it isn’t the quick keystrokes that cause the most strain,
+it’s holding the modifier with one finger while the rest of the hand
+moves around. I wouldn’t use the footpedal Control for the usual quick
+C-f/b/n/p, but it’s great for holding Control as you C-s through a
+document.&lt;/p&gt;
+&lt;p&gt;&lt;cite&gt;&lt;a
+href="https://reddit.com/r/emacs/comments/7remed/has_anybody_used_foot_pedals/dswrmo5/"&gt;Reddit,
+2018-01-19&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
+&lt;/blockquote&gt;
+</content>
+ <author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author>
+ <rights type="html">&lt;p&gt;The content of this page is Copyright © 2025 &lt;a href="mailto:lukeshu@lukeshu.com"&gt;Luke T. Shumaker&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;This page is licensed under the &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt; license.&lt;/p&gt;</rights>
+ </entry>
+
+ <entry xmlns="http://www.w3.org/2005/Atom">
+ <link rel="alternate" type="text/html" href="./relax-ng-errata.html"/>
+ <link rel="alternate" type="text/markdown" href="./relax-ng-errata.md"/>
+ <id>https://lukeshu.com/blog/relax-ng-errata.html</id>
+ <updated>2024-07-10T00:00:00+00:00</updated>
+ <published>2024-07-10T00:00:00+00:00</published>
+ <title>RELAX NG Compact Syntax errata</title>
+ <content type="html">&lt;h1 id="relax-ng-compact-syntax-errata"&gt;RELAX NG Compact Syntax
+errata&lt;/h1&gt;
+&lt;div style="font-family: monospace"&gt;
+&lt;p&gt;To: relax-ng-comment@lists.oasis-open.org, jjc@jclark.com,
+eb2m-mrt@asahi-net.or.jp&lt;br/&gt; Subject: RELAX NG Compact Syntax
+errata&lt;br/&gt; Date: Sun, 09 Jun 2024 17:47:17 -0600&lt;br/&gt; Message-ID:
+&amp;lt;87sexly8ze.wl-lukeshu@lukeshu.com&amp;gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;Hello,&lt;/p&gt;
+&lt;p&gt;I believe that I have found an error in the &lt;a
+href="https://relaxng.org/compact-20021121.html"&gt;RELAX NG Compact Syntax
+document&lt;/a&gt; (and am unsure if this is the best way to report it).&lt;/p&gt;
+&lt;p&gt;In the definition for &lt;code&gt;primary&lt;/code&gt;, it says&lt;/p&gt;
+&lt;pre&gt;&lt;code&gt; primary returns Element ::=
+…
+ | &amp;quot;empty&amp;quot;
+ { &amp;lt;empty/&amp;gt; }
+ | &amp;quot;notAllowed&amp;quot;
+ { &amp;lt;notAllowed/&amp;gt; }
+ | &amp;quot;empty&amp;quot;
+ { &amp;lt;text/&amp;gt; }
+…&lt;/code&gt;&lt;/pre&gt;
+&lt;p&gt;Surely that second "empty" literal should be "text"?&lt;/p&gt;
+&lt;div style="font-family: monospace"&gt;
+&lt;p&gt;-- &lt;br/&gt; Cheers,&lt;br/&gt; ~ Luke T. Shumaker&lt;br/&gt;&lt;/p&gt;
+&lt;/div&gt;
+</content>
+ <author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author>
+ <rights type="html">&lt;p&gt;The content of this page is Copyright © 2024 &lt;a href="mailto:lukeshu@lukeshu.com"&gt;Luke T. Shumaker&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;This page is licensed under the &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt; license.&lt;/p&gt;</rights>
+ </entry>
+
+ <entry xmlns="http://www.w3.org/2005/Atom">
+ <link rel="alternate" type="text/html" href="./message-threading.html"/>
+ <link rel="alternate" type="text/markdown" href="./message-threading.md"/>
+ <id>https://lukeshu.com/blog/message-threading.html</id>
+ <updated>2024-06-08T00:00:00+00:00</updated>
+ <published>2024-06-08T00:00:00+00:00</published>
+ <title>Notes on email message threading</title>
+ <content type="html">&lt;h1 id="notes-on-email-message-threading"&gt;Notes on email message
+threading&lt;/h1&gt;
+&lt;blockquote&gt;
+&lt;p&gt;I sent an email to Jamie Zawinski with feedback on his venerable
+email threading algorithm. Perhaps my commentary will be a useful
+reference to others implementing email threading.&lt;/p&gt;
+&lt;p&gt;You can see my implementation of his algorithm at &lt;a
+href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go"
+class="uri"&gt;https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go&lt;/a&gt;
+(and a use of it at &lt;a
+href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go"
+class="uri"&gt;https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go&lt;/a&gt;).&lt;/p&gt;
+&lt;/blockquote&gt;
+&lt;div style="font-family: monospace"&gt;
+&lt;p&gt;To: &lt;a href="https://www.jwz.org/"&gt;Jamie Zawinski&lt;/a&gt; &lt;a
+href="https://www.jwz.org/about.html"&gt;&amp;lt;jwz@jwz.org&amp;gt;&lt;/a&gt;&lt;br/&gt;
+Subject: message threading&lt;br/&gt; Date: Sat, 08 Jun 2024 22:34:41 -0600
+Message-ID: &amp;lt;87tti2ybry.wl-lukeshu@lukeshu.com&amp;gt;&lt;/p&gt;
+&lt;/div&gt;
+&lt;p&gt;Hi,&lt;/p&gt;
+&lt;p&gt;I'm implementing message threading, and have been referencing both
+your document &lt;a
+href="https://www.jwz.org/doc/threading.html"&gt;&amp;lt;https://www.jwz.org/doc/threading.html&amp;gt;&lt;/a&gt;;
+and &lt;a href="https://datatracker.ietf.org/doc/html/rfc5256"&gt;RFC
+5256&lt;/a&gt;. I'm not sure whether you're interested in updating a document
+that's more than 25 years old, but if you are: I hope you find the
+following feedback valuable.&lt;/p&gt;
+&lt;p&gt;You write that the algorithm in RFC 5256 is merely a &lt;q&gt;restating&lt;/q&gt;
+of your algorithm, but I noticed 3 (minor) differences:&lt;/p&gt;
+&lt;ol type="1"&gt;
+&lt;li&gt;&lt;p&gt;In your step 1.C, the RFC says to check whether this would create
+a loop, and if it would to skip creating the link; your version only
+says to perform this check in step 1.B.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;The RFC says to sort the messages by date between your steps 4
+and 5; that is: when grouping by subject, containers in the root set
+should be processed in date-order (you do not specify an order), and
+that if container in the root set is empty then the subject should be
+taken from the earliest-date child (you say to use an arbitrary
+child).&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;The RFC precisely states how to trim a subject down to a "base
+subject," rather than simply saying &lt;q&gt;Strip ``Re:'', ``RE:'',
+``RE[5]:'', ``Re: Re[4]: Re:'' and so on.&lt;/q&gt;&lt;/p&gt;&lt;/li&gt;
+&lt;/ol&gt;
+&lt;p&gt;Additionally, there are two minor points on which I found their
+version to be clearer:&lt;/p&gt;
+&lt;ol type="1"&gt;
+&lt;li&gt;&lt;p&gt;The RFC specifies how to handle messages without a Message-Id or
+with a duplicate Message-Id (on &lt;a
+href="https://datatracker.ietf.org/doc/html/rfc5256#page-9"&gt;page 9&lt;/a&gt;),
+as well as how to normalize a Message-Id (by referring to &lt;a
+href="https://datatracker.ietf.org/doc/html/rfc2822"&gt;RFC 2822&lt;/a&gt;). This
+is perhaps out-of-scope of your algorithm document, but I feel that it
+would be worth mentioning in your background or definitions
+section.&lt;/p&gt;&lt;/li&gt;
+&lt;li&gt;&lt;p&gt;In your step 1.B, I did not understand what &lt;q&gt;If they are
+already linked, don't change the existing links&lt;/q&gt; meant until I read
+the RFC, which words it as &lt;q&gt;If a message already has a parent, don't
+change the existing link.&lt;/q&gt; It was unclear to me what &lt;q&gt;they&lt;/q&gt; was
+referring to in your version.&lt;/p&gt;&lt;/li&gt;
+&lt;/ol&gt;
+&lt;div style="font-family: monospace"&gt;
+&lt;p&gt;-- &lt;br/&gt; Happy hacking,&lt;br/&gt; ~ Luke T. Shumaker&lt;br/&gt;&lt;/p&gt;
+&lt;/div&gt;
+</content>
+ <author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author>
+ <rights type="html">&lt;p&gt;The content of this page is Copyright © 2024 &lt;a href="mailto:lukeshu@lukeshu.com"&gt;Luke T. Shumaker&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;This page is licensed under the &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;CC BY-SA 4.0&lt;/a&gt; license.&lt;/p&gt;</rights>
+ </entry>
+
+ <entry xmlns="http://www.w3.org/2005/Atom">
<link rel="alternate" type="text/html" href="./btrfs-rec.html"/>
<link rel="alternate" type="text/markdown" href="./btrfs-rec.md"/>
<id>https://lukeshu.com/blog/btrfs-rec.html</id>
@@ -3998,7 +4212,7 @@ basically the only thing in rc.conf will be &lt;code&gt;DAEMONS&lt;/code&gt;.&lt
href="#fn2" class="footnote-ref" id="fnref2"
role="doc-noteref"&gt;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; For now there is compatibility for
the variables that used to be there, but that is going away.&lt;/p&gt;
-&lt;aside id="footnotes" class="footnotes footnotes-end-of-document"
+&lt;section id="footnotes" class="footnotes footnotes-end-of-document"
role="doc-endnotes"&gt;
&lt;hr /&gt;
&lt;ol&gt;
@@ -4026,7 +4240,7 @@ role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;code&gt;netmask&lt;/code&gt;, and &lt;code&gt;gateway&lt;/code&gt;. But those are minor.&lt;a
href="#fnref2" class="footnote-back" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
-&lt;/aside&gt;
+&lt;/section&gt;
</content>
<author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author>
<rights type="html">&lt;p&gt;The content of this page is Copyright © 2012 &lt;a href="mailto:lukeshu@lukeshu.com"&gt;Luke T. Shumaker&lt;/a&gt;.&lt;/p&gt;
diff --git a/public/index.html b/public/index.html
index 9fa4930..6f42f54 100644
--- a/public/index.html
+++ b/public/index.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Web log entries — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -20,6 +21,12 @@ time {
}
</style>
<ul>
+<li><time>2025-05-31</time> - <a href="./footpedal.html">My
+footpedal</a></li>
+<li><time>2024-07-10</time> - <a href="./relax-ng-errata.html">RELAX NG
+Compact Syntax errata</a></li>
+<li><time>2024-06-08</time> - <a href="./message-threading.html">Notes
+on email message threading</a></li>
<li><time>2023-07-10</time> - <a href="./btrfs-rec.html">Announcing:
btrfs-rec: Recover (data from) a broken btrfs filesystem</a></li>
<li><time>2018-02-09</time> - <a href="./posix-pricing.html">POSIX
@@ -86,7 +93,8 @@ Linux’s switch to systemd means for users</a></li>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/index.md b/public/index.md
index fda3bcc..c44e0ea 100644
--- a/public/index.md
+++ b/public/index.md
@@ -10,6 +10,9 @@ time {
}
</style>
+ * <time>2025-05-31</time> - [My footpedal](./footpedal.html)
+ * <time>2024-07-10</time> - [RELAX NG Compact Syntax errata](./relax-ng-errata.html)
+ * <time>2024-06-08</time> - [Notes on email message threading](./message-threading.html)
* <time>2023-07-10</time> - [Announcing: btrfs-rec: Recover (data from) a broken btrfs filesystem](./btrfs-rec.html)
* <time>2018-02-09</time> - [POSIX pricing and availability; or: Do you really need the PDF?](./posix-pricing.html)
* <time>2018-02-09</time> - [GNU/Linux Keyboard Maps: xmodmap](./kbd-xmodmap.html)
diff --git a/public/java-segfault-redux.html b/public/java-segfault-redux.html
index 41328df..e111f5e 100644
--- a/public/java-segfault-redux.html
+++ b/public/java-segfault-redux.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>My favorite bug: segfaults in Java (redux) — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -208,7 +209,8 @@ solution to me.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2016 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/java-segfault.html b/public/java-segfault.html
index 2344acf..4da6dec 100644
--- a/public/java-segfault.html
+++ b/public/java-segfault.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>My favorite bug: segfaults in Java — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -110,7 +111,8 @@ the fix.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/kbd-xmodmap.html b/public/kbd-xmodmap.html
index fdede30..985d55f 100644
--- a/public/kbd-xmodmap.html
+++ b/public/kbd-xmodmap.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>GNU/Linux Keyboard Maps: xmodmap — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -230,7 +231,8 @@ files nicer:</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2018 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/lp2015-videos.html b/public/lp2015-videos.html
index 0445e7d..b7c2c4c 100644
--- a/public/lp2015-videos.html
+++ b/public/lp2015-videos.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>I took some videos at LibrePlanet — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -28,7 +29,8 @@ the video I took</a>.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2015 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/make-memoize.html b/public/make-memoize.html
index ae3da5f..df3699a 100644
--- a/public/make-memoize.html
+++ b/public/make-memoize.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>A memoization routine for GNU Make functions — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -83,7 +84,8 @@ wrote one that you can use.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="http://www.wtfpl.net/txt/copying/">WTFPL-2</a> license.</p>
diff --git a/public/message-threading.html b/public/message-threading.html
new file mode 100644
index 0000000..f829ade
--- /dev/null
+++ b/public/message-threading.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>Notes on email message threading — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="assets/style.css">
+ <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
+</head>
+<body>
+<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » message-threading</header>
+<article>
+<h1 id="notes-on-email-message-threading">Notes on email message
+threading</h1>
+<blockquote>
+<p>I sent an email to Jamie Zawinski with feedback on his venerable
+email threading algorithm. Perhaps my commentary will be a useful
+reference to others implementing email threading.</p>
+<p>You can see my implementation of his algorithm at <a
+href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go"
+class="uri">https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go</a>
+(and a use of it at <a
+href="https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go"
+class="uri">https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go</a>).</p>
+</blockquote>
+<div style="font-family: monospace">
+<p>To: <a href="https://www.jwz.org/">Jamie Zawinski</a> <a
+href="https://www.jwz.org/about.html">&lt;jwz@jwz.org&gt;</a><br/>
+Subject: message threading<br/> Date: Sat, 08 Jun 2024 22:34:41 -0600
+Message-ID: &lt;87tti2ybry.wl-lukeshu@lukeshu.com&gt;</p>
+</div>
+<p>Hi,</p>
+<p>I'm implementing message threading, and have been referencing both
+your document <a
+href="https://www.jwz.org/doc/threading.html">&lt;https://www.jwz.org/doc/threading.html&gt;</a>;
+and <a href="https://datatracker.ietf.org/doc/html/rfc5256">RFC
+5256</a>. I'm not sure whether you're interested in updating a document
+that's more than 25 years old, but if you are: I hope you find the
+following feedback valuable.</p>
+<p>You write that the algorithm in RFC 5256 is merely a <q>restating</q>
+of your algorithm, but I noticed 3 (minor) differences:</p>
+<ol type="1">
+<li><p>In your step 1.C, the RFC says to check whether this would create
+a loop, and if it would to skip creating the link; your version only
+says to perform this check in step 1.B.</p></li>
+<li><p>The RFC says to sort the messages by date between your steps 4
+and 5; that is: when grouping by subject, containers in the root set
+should be processed in date-order (you do not specify an order), and
+that if container in the root set is empty then the subject should be
+taken from the earliest-date child (you say to use an arbitrary
+child).</p></li>
+<li><p>The RFC precisely states how to trim a subject down to a "base
+subject," rather than simply saying <q>Strip ``Re:'', ``RE:'',
+``RE[5]:'', ``Re: Re[4]: Re:'' and so on.</q></p></li>
+</ol>
+<p>Additionally, there are two minor points on which I found their
+version to be clearer:</p>
+<ol type="1">
+<li><p>The RFC specifies how to handle messages without a Message-Id or
+with a duplicate Message-Id (on <a
+href="https://datatracker.ietf.org/doc/html/rfc5256#page-9">page 9</a>),
+as well as how to normalize a Message-Id (by referring to <a
+href="https://datatracker.ietf.org/doc/html/rfc2822">RFC 2822</a>). This
+is perhaps out-of-scope of your algorithm document, but I feel that it
+would be worth mentioning in your background or definitions
+section.</p></li>
+<li><p>In your step 1.B, I did not understand what <q>If they are
+already linked, don't change the existing links</q> meant until I read
+the RFC, which words it as <q>If a message already has a parent, don't
+change the existing link.</q> It was unclear to me what <q>they</q> was
+referring to in your version.</p></li>
+</ol>
+<div style="font-family: monospace">
+<p>-- <br/> Happy hacking,<br/> ~ Luke T. Shumaker<br/></p>
+</div>
+
+</article>
+<footer>
+ <aside class="sponsor"><p>I'd love it if you <a class="em"
+ href="/sponsor/">sponsored me</a>. It will allow me to continue
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
+
+<p>The content of this page is Copyright © 2024 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
+<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
+</footer>
+</body>
+</html>
diff --git a/public/message-threading.md b/public/message-threading.md
new file mode 100644
index 0000000..a710631
--- /dev/null
+++ b/public/message-threading.md
@@ -0,0 +1,76 @@
+Notes on email message threading
+================================
+---
+date: "2024-06-08"
+markdown_options: "-smart"
+---
+
+> I sent an email to Jamie Zawinski with feedback on his venerable
+> email threading algorithm. Perhaps my commentary will be a useful
+> reference to others implementing email threading.
+>
+> You can see my implementation of his algorithm at
+> <https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread_alg.go>
+> (and a use of it at
+> <https://git.lukeshu.com/www/tree/cmd/generate/mailstuff/thread.go>).
+
+<div style="font-family: monospace">
+To: [Jamie Zawinski] [&lt;jwz@jwz.org&gt;]<br/>
+Subject: message threading<br/>
+Date: Sat, 08 Jun 2024 22:34:41 -0600
+Message-ID: &lt;87tti2ybry.wl-lukeshu@lukeshu.com&gt;
+</div>
+
+Hi,
+
+I'm implementing message threading, and have been referencing both
+your document [&lt;https://www.jwz.org/doc/threading.html&gt;]; and [RFC 5256].
+I'm not sure whether you're interested in updating a document that's
+more than 25 years old, but if you are: I hope you find the following
+feedback valuable.
+
+You write that the algorithm in RFC 5256 is merely a <q>restating</q> of
+your algorithm, but I noticed 3 (minor) differences:
+
+1. In your step 1.C, the RFC says to check whether this would create a
+ loop, and if it would to skip creating the link; your version only
+ says to perform this check in step 1.B.
+
+2. The RFC says to sort the messages by date between your steps 4 and
+ 5; that is: when grouping by subject, containers in the root set
+ should be processed in date-order (you do not specify an order),
+ and that if container in the root set is empty then the subject
+ should be taken from the earliest-date child (you say to use an
+ arbitrary child).
+
+3. The RFC precisely states how to trim a subject down to a "base
+ subject," rather than simply saying <q>Strip \`\`Re:'', \`\`RE:'',
+ \`\`RE[5]:'', \`\`Re: Re[4]: Re:'' and so on.</q>
+
+Additionally, there are two minor points on which I found their
+version to be clearer:
+
+1. The RFC specifies how to handle messages without a Message-Id or
+ with a duplicate Message-Id (on [page 9]), as well as how to
+ normalize a Message-Id (by referring to [RFC 2822]). This is perhaps
+ out-of-scope of your algorithm document, but I feel that it would
+ be worth mentioning in your background or definitions section.
+
+2. In your step 1.B, I did not understand what <q>If they are already
+ linked, don't change the existing links</q> meant until I read the
+ RFC, which words it as <q>If a message already has a parent, don't
+ change the existing link.</q> It was unclear to me what <q>they</q> was
+ referring to in your version.
+
+<div style="font-family: monospace">
+-- <br/>
+Happy hacking,<br/>
+~ Luke T. Shumaker<br/>
+</div>
+
+[Jamie Zawinski]: https://www.jwz.org/
+[&lt;jwz@jwz.org&gt;]: https://www.jwz.org/about.html
+[&lt;https://www.jwz.org/doc/threading.html&gt;]: https://www.jwz.org/doc/threading.html
+[RFC 5256]: https://datatracker.ietf.org/doc/html/rfc5256
+[RFC 2822]: https://datatracker.ietf.org/doc/html/rfc2822
+[page 9]: https://datatracker.ietf.org/doc/html/rfc5256#page-9
diff --git a/public/nginx-mediawiki.html b/public/nginx-mediawiki.html
index 8d677f2..917ec56 100644
--- a/public/nginx-mediawiki.html
+++ b/public/nginx-mediawiki.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>An Nginx configuration for MediaWiki — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -77,7 +78,8 @@ figure it out.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2015 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/pacman-overview.html b/public/pacman-overview.html
index c5e3114..18291aa 100644
--- a/public/pacman-overview.html
+++ b/public/pacman-overview.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>A quick overview of usage of the Pacman package manager — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -52,7 +53,8 @@ system.</li>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/poor-system-documentation.html b/public/poor-system-documentation.html
index 7d6088c..2611856 100644
--- a/public/poor-system-documentation.html
+++ b/public/poor-system-documentation.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Why documentation on GNU/Linux sucks — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -47,7 +48,8 @@ the worst of both worlds, and a few problems of its own.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2012 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/posix-pricing.html b/public/posix-pricing.html
index 40d229b..43f4bc5 100644
--- a/public/posix-pricing.html
+++ b/public/posix-pricing.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>POSIX pricing and availability; or: Do you really need the PDF? — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -38,7 +39,8 @@ is “POSIX-2008, 2016 edition.”</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2018 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/purdue-cs-login.html b/public/purdue-cs-login.html
index 934af4e..784f2f3 100644
--- a/public/purdue-cs-login.html
+++ b/public/purdue-cs-login.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Customizing your login on Purdue CS computers (WIP, but updated) — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -185,7 +186,8 @@ SunOS is NOT GNU/Linux, and sun4u is NOT x86.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2015 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/rails-improvements.html b/public/rails-improvements.html
index 8b02cef..6a07466 100644
--- a/public/rails-improvements.html
+++ b/public/rails-improvements.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>Miscellaneous ways to improve your Rails experience — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -93,7 +94,8 @@ like.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/relax-ng-errata.html b/public/relax-ng-errata.html
new file mode 100644
index 0000000..7a5b769
--- /dev/null
+++ b/public/relax-ng-errata.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <title>RELAX NG Compact Syntax errata — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="assets/style.css">
+ <link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
+</head>
+<body>
+<header><a href="/">Luke T. Shumaker</a> » <a href=/blog>blog</a> » relax-ng-errata</header>
+<article>
+<h1 id="relax-ng-compact-syntax-errata">RELAX NG Compact Syntax
+errata</h1>
+<div style="font-family: monospace">
+<p>To: relax-ng-comment@lists.oasis-open.org, jjc@jclark.com,
+eb2m-mrt@asahi-net.or.jp<br/> Subject: RELAX NG Compact Syntax
+errata<br/> Date: Sun, 09 Jun 2024 17:47:17 -0600<br/> Message-ID:
+&lt;87sexly8ze.wl-lukeshu@lukeshu.com&gt;</p>
+</div>
+<p>Hello,</p>
+<p>I believe that I have found an error in the <a
+href="https://relaxng.org/compact-20021121.html">RELAX NG Compact Syntax
+document</a> (and am unsure if this is the best way to report it).</p>
+<p>In the definition for <code>primary</code>, it says</p>
+<pre><code> primary returns Element ::=
+…
+ | &quot;empty&quot;
+ { &lt;empty/&gt; }
+ | &quot;notAllowed&quot;
+ { &lt;notAllowed/&gt; }
+ | &quot;empty&quot;
+ { &lt;text/&gt; }
+…</code></pre>
+<p>Surely that second "empty" literal should be "text"?</p>
+<div style="font-family: monospace">
+<p>-- <br/> Cheers,<br/> ~ Luke T. Shumaker<br/></p>
+</div>
+
+</article>
+<footer>
+ <aside class="sponsor"><p>I'd love it if you <a class="em"
+ href="/sponsor/">sponsored me</a>. It will allow me to continue
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
+
+<p>The content of this page is Copyright © 2024 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
+<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
+</footer>
+</body>
+</html>
diff --git a/public/relax-ng-errata.md b/public/relax-ng-errata.md
new file mode 100644
index 0000000..1de39be
--- /dev/null
+++ b/public/relax-ng-errata.md
@@ -0,0 +1,42 @@
+RELAX NG Compact Syntax errata
+==============================
+---
+date: "2024-07-10"
+markdown_options: "-smart"
+---
+
+<div style="font-family: monospace">
+To: relax-ng-comment@lists.oasis-open.org, jjc@jclark.com, eb2m-mrt@asahi-net.or.jp<br/>
+Subject: RELAX NG Compact Syntax errata<br/>
+Date: Sun, 09 Jun 2024 17:47:17 -0600<br/>
+Message-ID: &lt;87sexly8ze.wl-lukeshu@lukeshu.com&gt;
+</div>
+
+Hello,
+
+I believe that I have found an error in the [RELAX NG Compact Syntax
+document](https://relaxng.org/compact-20021121.html) (and am unsure if
+this is the best way to report it).
+
+In the definition for `primary`, it says
+
+```
+ primary returns Element ::=
+…
+ | "empty"
+ { <empty/> }
+ | "notAllowed"
+ { <notAllowed/> }
+ | "empty"
+ { <text/> }
+…
+```
+
+Surely that second "empty" literal should be "text"?
+
+<div style="font-family: monospace">
+-- <br/>
+Cheers,<br/>
+~ Luke T. Shumaker<br/>
+</div>
+
diff --git a/public/ryf-routers.html b/public/ryf-routers.html
index e964fb1..c28fcfa 100644
--- a/public/ryf-routers.html
+++ b/public/ryf-routers.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>I'm excited about the new RYF-certified routers from ThinkPenguin — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -44,7 +45,8 @@ distributions, not for technical reasons, but lack of manpower).</li>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/term-colors.html b/public/term-colors.html
index 4a8d866..958d4e2 100644
--- a/public/term-colors.html
+++ b/public/term-colors.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>An explanation of common terminal emulator color codes — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -46,7 +47,8 @@ the same time, so you actually get 256+18 colors.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2013 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/what-im-working-on-fall-2014.html b/public/what-im-working-on-fall-2014.html
index efc293a..a20a381 100644
--- a/public/what-im-working-on-fall-2014.html
+++ b/public/what-im-working-on-fall-2014.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>What I'm working on (Fall 2014) — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -147,7 +148,8 @@ implemented.</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2014 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
diff --git a/public/x11-systemd.html b/public/x11-systemd.html
index a238c73..2313b21 100644
--- a/public/x11-systemd.html
+++ b/public/x11-systemd.html
@@ -3,6 +3,7 @@
<head>
<meta charset="utf-8">
<title>My X11 setup with systemd — Luke T. Shumaker</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="assets/style.css">
<link rel="alternate" type="application/atom+xml" href="./index.atom" name="web log entries"/>
</head>
@@ -377,7 +378,8 @@ was Parabola’s packager for Iceweasel and IceCat).</p>
<footer>
<aside class="sponsor"><p>I'd love it if you <a class="em"
href="/sponsor/">sponsored me</a>. It will allow me to continue
- my work on the GNU/Linux ecosystem. Thanks!</p></aside>
+ <a class="em" href="/imworkingon/">my work</a> on the GNU/Linux
+ ecosystem. Thanks!</p></aside>
<p>The content of this page is Copyright © 2016 <a href="mailto:lukeshu@lukeshu.com">Luke T. Shumaker</a>.</p>
<p>This page is licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>