Message threading (1997-2002)
jwz.org
jwz.org
Interesting fact is that, among three clients we tested, only mutt faithfully implemented the standard. It honestly grouped all messages referenced to the same ID into the same parent, despite subject or sending time. However, neither Gmail or Outlook respects the "References" field.
In Gmail, it seems subject of the message plus [one of <time of message sent> and <References>] are used for grouping. But it certainly doesn't exclusively rely on "References" since we got messages referenced to same parent message grouped into different conversations.
In Outlook, "References" field is ignored completely. It only relies on subject of messages. We got messages for different "event" from more than 10 days from each other, grouped into same conversation.
[1] http://tools.ietf.org/html/rfc5322#page-25
EDIT: fixed typo
Also, the "mark thread as read" feature in mutt (^R) is a life saver when sorting through dozens of discussions.
But ultimately I can't; I don't need pretty colors or graphical tricks. I do need something which understands that it's not 1975 anymore. My mail no longer lives in a local spool file, and there is no longer a local sendmail. I have multiple email addresses, which use IMAP, and remote SMTP.
And none of the console clients -- including Mutt -- can really do that. Every couple years I try Mutt again, and try whatever the current crop of attempted successors are, and get thrown right back into 1975 again and give up in frustration.
(and Mutt, last I checked, actually considers it both a feature and a point of philosophical purity/pride to refuse to acknowledge the fact that anything other than "shell out to local sendmail" exists. Also, IMAP was unbearably slow, usually requiring a full re-fetch/re-index of the entire remote inbox, potentially hundreds of thousands of messages, every time Mutt started up, and multiple IMAP accounts were an unholy mess)
http://people.spodhuis.org/phil.pennock/software/mutt-patche...
Still, I like Mail.app better, since it supports multiple accounts well and has excellent search.
https://github.com/kazu-yamamoto/Mew http://www.mew.org/en/info/release/
* Maildir only. * Shell out to sendmail.
I do enjoy scripting though; for example viewing all unread messages regardless of folder, or marking messages as read based on regexps.
All my emails get into my Inbox (except for bugzilla stuff). I go through my Inbox several times a day, and as I read messages, I press 'o', 'n', 'e', or 'a' to send the message in one of the four folders I mostly use. For the rest, I sort it manually using the 's' key. This way, my Inbox is always empty. Or if it's not, I know it's a message I need to get back to later on. There's usually no more than a handful of those.
Granted, you can do that with any mail client. But mutt is particularly well suited for the job.
2. This is a great example of the perils of re-writing code that you don't completely understand:
4.0 eliminated the "dummy thread parent'' step, which is an absolute necessity to get threading right in the case where you don't have every message (e.g., because one has expired, or was never sent to you at all.) The best explanation I was able to get from them for why they did this was, "it looked ugly and I didn't understand why it was there.''
However, in the absence of an overview, if the code that you don't understand was written by jwz, you might want to study it very hard before removing it. :)
But then, one of the primary reasons that usually motivates a rewrite is that nobody understands the old code. (sometimes acknowledged as such, and other times indirectly in the form of "every time we try to fix a bug we break something else, this code is terrible").
For some code, breaking behavior you don't understand doesn't make a difference. If you're Facebook, you can arbitrarily change the user interface of your site and your users have no say in the matter, since they're not paying customers. But other developers don't have it that easy. If you support code that people have built their own applications on top of, you can't just break stuff. If you make backward incompatible changes to the Linux kernel APIs, or break Microsoft Excel so that macros that have been working for years stop working, people all over the world will be very unhappy.
The chances of having a well defined spec and reasonable test suite in a place where there's code nobody understands are left as a calculation exercise for the reader (but I'd start at 5% and work downwards.)
In practice, I think that the only "spec" that's likely to capture the exact behavior of the code as it exists today is the code itself.
Also, the lack of a complete spec probably implies a lack of a complete acceptance test suite. Note that I said "acceptance test", not "unit test". Unit tests from the original code are useless for testing the re-written code, since they're specific to the particular implementation of the product you already have, which may have a completely different set of classes from the one you'll be replacing it with.
Of course, in accordance with another of jwz's laws, the CADT model of software development, test suites are often discarded along with everything else when some attention-deficit teenager decides to rewrite everything from scratch.
It was fun and worked extremely well, though it did give different results than gmail on some instances.
1. Got tired after working on it for a year, mostly on my own. I felt the need to join a team doing something bigger.
2. Ran out of money
3. Wanted to relocate to Silicon Valley, but as a foreigner it would have been too complicated to move with my startup.
4. The project was too ambitious. A full blown email client is hard to write.
5. I was a Windows guy a that time, but all potential early adopters were OS X users. Though we did had OS X support, the app wasn't as nice or polished as it should have been.
It's interesting because we started working on this roughly at the same time as the Sparrow team. In the end, they released way before us because they focused on a narrower niche (simple gmail client for OS X, instead of the cross-platform email + todo list manager that we were doing). They won :)
Edit: pointed to correct URL
It is also worth pointing out this era predated SQLite.
Too many programmers find a Next Greatest Thing and then try to reconfigure problems to fit the newfound solution. Too many managers "need" solutions that are buzzword-compliant. Combine these and you get projects that are "written in C++ and use databases" and are thus a success regardless of whether they work.
The union of those two things is probably not a big component of most people's daily work though. Computers are fast now, you can get away with a lot of naive code.
See "Write a decent mailing list Web archive system" on http://suckless.org/project_ideas for an example.
Messages with the same subjects are not threads!