From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.86.59.13 with SMTP id h13cs20994fga; Thu, 18 Feb 2010 04:03:09 -0800 (PST) Received: by 10.224.105.147 with SMTP id t19mr2409746qao.315.1266494588342; Thu, 18 Feb 2010 04:03:08 -0800 (PST) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 7si26767777qwb.57.2010.02.18.04.03.07; Thu, 18 Feb 2010 04:03:08 -0800 (PST) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 639B31678310; Thu, 18 Feb 2010 07:03:07 -0500 (EST) X-Greylist: delayed 1508 seconds by postgrey-1.31 at rubyforge.org; Thu, 18 Feb 2010 07:02:20 EST Received: from smtp.mail.drexel.edu (pm1.irt.drexel.edu [144.118.29.81]) by rubyforge.org (Postfix) with ESMTP id 35F2B18582D2 for ; Thu, 18 Feb 2010 07:02:20 -0500 (EST) Received: from smtp.mail.drexel.edu (localhost.localdomain [127.0.0.1]) by smtp.mail.drexel.edu (Postfix) with SMTP id 04718225D85 for ; Thu, 18 Feb 2010 06:37:12 -0500 (EST) Received: from localhost (c-68-37-236-192.hsd1.nj.comcast.net [68.37.236.192]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by smtp.mail.drexel.edu (Postfix) with ESMTP id CB0D3225DCB for ; Thu, 18 Feb 2010 06:37:11 -0500 (EST) Date: Thu, 18 Feb 2010 06:49:44 -0500 From: "W. Trevor King" To: sup-devel@rubyforge.org Message-ID: <20100218114943.GB911@mjolnir> MIME-Version: 1.0 User-Agent: Mutt/1.5.20 (2009-06-14) X-PerlMx-Authed: User SMTP Authed Subject: [sup-devel] email threading - tree vs. graph X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1982411756==" Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org --===============1982411756== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="Nq2Wo0NMKNjxTN9z" Content-Disposition: inline --Nq2Wo0NMKNjxTN9z Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hey all, I thought I'd ask this on sup-devel, since you guys have been thinking about email organization and "a better mutt" sounds pretty awesome ;). Sorry if it's too far off topic. Since email can have multiple parents [1], why does everyone make threads trees rather than directed, acyclic graphs (DAGs)? DAGs seem really common for version control systems, and completely missing for email clients, even though the inheritence structure is identical. For example, here's a slice from the recent be-devel list as a graph: ............... | *-|-\ | | Mon Jan 25 W. Trevor King Re: Project releases | * | | | | Sat Jan 23 Gianluca Montecchi Re: Project releases | | | | t | | Sat Jan 23 Gianluca Montecchi Re: Project releases | *-|-|-|-\ | | Fri Jan 22 Ben Finney Re: Project releases | | | * | | | | Fri Jan 22 W. Trevor King Re: Project releases | | | *-/ | | | Thu Jan 21 Ben Finney Re: Project releases | * | | | | | Thu Jan 21 Gianluca Montecchi Re: Project releases *-|-|-/ | | | Thu Jan 21 W. Trevor King Re: Project releases ............... ^--- inheritence graph. You can see that Ben's Fri message and my Mon message both have two parents. On a sup-specific level, problems with the graph (vs. tree) is that it may make threads too 'sticky'. With your thread-centric approach, you'll want to break threads when the topic mutates too far from the original, and that could be difficult for meshy-graphs. Perhaps you will want to leave the sup guts unchanged, tack on an optional graph view, and add an 'other-parents' option when browsing from messages with multiple parents. On an implementation level, I've got the above graph browser going in python/curses, so it should be easy to port to ruby/curses. Thoughs? Thanks, Trevor [1] RFC 2822, section 3.6.4, http://www.faqs.org/rfcs/rfc2822.html The "In-Reply-To:" field will contain the contents of the "Message-ID:" field of the message to which this one is a reply (the "parent message"). If there is more than one parent message, then the "In-Reply-To:" field will contain the contents of all of the parents' "Message-ID:" fields. --=20 This email may be signed or encrypted with GPG (http://www.gnupg.org). The GPG signature (if present) will be attached as 'signature.asc'. For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy My public key is at http://www.physics.drexel.edu/~wking/pubkey.txt --Nq2Wo0NMKNjxTN9z Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iEYEARECAAYFAkt9KVcACgkQY8LZ/us1fmCRgACgjVMw8SG4a4X0txzznL2fGoF9 rT8AoIlRoKlIzpQEXioj/2dpIn7Fi4Yc =xKlx -----END PGP SIGNATURE----- --Nq2Wo0NMKNjxTN9z-- --===============1982411756== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel --===============1982411756==--