diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-08 22:36:52 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-08 22:37:11 -0600 |
commit | 09eab3442e382f082501965f2e9a8caf04fba5b8 (patch) | |
tree | a228ca166f8206a60969f1f6551e4eb85db43973 | |
parent | 140e1538fb1472f310afc9e4fd35e66bca116249 (diff) | |
parent | e480d172a38df962b8b0a5b051c0bb520f7f618b (diff) |
make: Write a post about my email to jwz
-rw-r--r-- | public/index.atom | 78 | ||||
-rw-r--r-- | public/index.html | 2 | ||||
-rw-r--r-- | public/index.md | 1 | ||||
-rw-r--r-- | public/message-threading.html | 88 | ||||
-rw-r--r-- | public/message-threading.md | 76 |
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"><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> +</content> + <author><name>Luke T. Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@lukeshu.com</email></author> + <rights type="html"><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></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"><jwz@jwz.org></a><br/> +Subject: message threading<br/> Date: Sat, 08 Jun 2024 22:34:41 -0600 +Message-ID: <87tti2ybry.wl-lukeshu@lukeshu.com></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"><https://www.jwz.org/doc/threading.html></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] [<jwz@jwz.org>]<br/> +Subject: message threading<br/> +Date: Sat, 08 Jun 2024 22:34:41 -0600 +Message-ID: <87tti2ybry.wl-lukeshu@lukeshu.com> +</div> + +Hi, + +I'm implementing message threading, and have been referencing both +your document [<https://www.jwz.org/doc/threading.html>]; 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/ +[<jwz@jwz.org>]: https://www.jwz.org/about.html +[<https://www.jwz.org/doc/threading.html>]: 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 |