summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2024-06-08 22:36:52 -0600
committerLuke T. Shumaker <lukeshu@lukeshu.com>2024-06-08 22:37:11 -0600
commit09eab3442e382f082501965f2e9a8caf04fba5b8 (patch)
treea228ca166f8206a60969f1f6551e4eb85db43973
parent140e1538fb1472f310afc9e4fd35e66bca116249 (diff)
parente480d172a38df962b8b0a5b051c0bb520f7f618b (diff)
make: Write a post about my email to jwz
-rw-r--r--public/index.atom78
-rw-r--r--public/index.html2
-rw-r--r--public/index.md1
-rw-r--r--public/message-threading.html88
-rw-r--r--public/message-threading.md76
5 files changed, 244 insertions, 1 deletions
diff --git a/public/index.atom b/public/index.atom
index 6423bca..dd10c2c 100644
--- a/public/index.atom
+++ b/public/index.atom
@@ -5,12 +5,88 @@
<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>2024-06-08T00: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="./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>
diff --git a/public/index.html b/public/index.html
index 6db8620..140eb36 100644
--- a/public/index.html
+++ b/public/index.html
@@ -21,6 +21,8 @@ time {
}
</style>
<ul>
+<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
diff --git a/public/index.md b/public/index.md
index fda3bcc..8e5a171 100644
--- a/public/index.md
+++ b/public/index.md
@@ -10,6 +10,7 @@ time {
}
</style>
+ * <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/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..eb83705
--- /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