[PATCH 4/4] Update NEWS for user.other_name
[notmuch-archives.git] / d8 / bcf699739ddf295c8fa1bf92ae15b84864d5a1
1 Return-Path: <amdragon@mit.edu>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 3C6CE431FAF\r
6         for <notmuch@notmuchmail.org>; Wed, 25 Jan 2012 22:36:08 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.7\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5\r
12         tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
13 Received: from olra.theworths.org ([127.0.0.1])\r
14         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
15         with ESMTP id NGJiIbzZGf2K for <notmuch@notmuchmail.org>;\r
16         Wed, 25 Jan 2012 22:36:07 -0800 (PST)\r
17 Received: from dmz-mailsec-scanner-7.mit.edu (DMZ-MAILSEC-SCANNER-7.MIT.EDU\r
18         [18.7.68.36])\r
19         by olra.theworths.org (Postfix) with ESMTP id DAC07431FAE\r
20         for <notmuch@notmuchmail.org>; Wed, 25 Jan 2012 22:36:06 -0800 (PST)\r
21 X-AuditID: 12074424-b7fae6d000000906-f1-4f20f4562e8f\r
22 Received: from mailhub-auth-4.mit.edu ( [18.7.62.39])\r
23         by dmz-mailsec-scanner-7.mit.edu (Symantec Messaging Gateway) with SMTP\r
24         id 8D.0C.02310.654F02F4; Thu, 26 Jan 2012 01:36:06 -0500 (EST)\r
25 Received: from outgoing.mit.edu (OUTGOING-AUTH.MIT.EDU [18.7.22.103])\r
26         by mailhub-auth-4.mit.edu (8.13.8/8.9.2) with ESMTP id q0Q6a5bg015070; \r
27         Thu, 26 Jan 2012 01:36:06 -0500\r
28 Received: from awakening.csail.mit.edu (awakening.csail.mit.edu [18.26.4.91])\r
29         (authenticated bits=0)\r
30         (User authenticated as amdragon@ATHENA.MIT.EDU)\r
31         by outgoing.mit.edu (8.13.6/8.12.4) with ESMTP id q0Q6a3nx002933\r
32         (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT);\r
33         Thu, 26 Jan 2012 01:36:04 -0500 (EST)\r
34 Received: from amthrax by awakening.csail.mit.edu with local (Exim 4.77)\r
35         (envelope-from <amdragon@mit.edu>)\r
36         id 1RqIve-0000mM-Uj; Thu, 26 Jan 2012 01:35:27 -0500\r
37 Date: Thu, 26 Jan 2012 01:35:26 -0500\r
38 From: Austin Clements <amdragon@MIT.EDU>\r
39 To: Dmitry Kurochkin <dmitry.kurochkin@gmail.com>\r
40 Subject: Re: [RFC PATCH 5/5] show: Simplify new text formatter code\r
41 Message-ID: <20120126063526.GB1940@mit.edu>\r
42 References: <1326332973-30225-1-git-send-email-amdragon@mit.edu>\r
43         <1326332973-30225-6-git-send-email-amdragon@mit.edu>\r
44         <87lioxna2n.fsf@gmail.com>\r
45 MIME-Version: 1.0\r
46 Content-Type: text/plain; charset=us-ascii\r
47 Content-Disposition: inline\r
48 In-Reply-To: <87lioxna2n.fsf@gmail.com>\r
49 User-Agent: Mutt/1.5.21 (2010-09-15)\r
50 X-Brightmail-Tracker:\r
51  H4sIAAAAAAAAA+NgFmphleLIzCtJLcpLzFFi42IRYrdT1w37ouBvcPCIsMXVrf3sFtdvzmR2\r
52         YPLYOesuu8ezVbeYA5iiuGxSUnMyy1KL9O0SuDJWXd3PVLAxuaJ50mP2Bsajvl2MnBwSAiYS\r
53         s04sZYewxSQu3FvP1sXIxSEksI9RYsK/R4wQzgZGifOzdkI5J5kkzhx+ywThLGGU2HLiBFg/\r
54         i4CqxOKps5lAbDYBDYlt+5czgtgiAoYSty6+YgaxmQWkJb79bgarERZwlnh67gDQPg4OXgFt\r
55         iRtXHCBmTmGUuP7gNthMXgFBiZMzn7BA9GpJ3Pj3kgmkHmTO8n8cIGFOAXWJJetbwFaJCqhI\r
56         TDm5jW0Co9AsJN2zkHTPQuhewMi8ilE2JbdKNzcxM6c4NVm3ODkxLy+1SNdcLzezRC81pXQT\r
57         IziwXVR2MDYfUjrEKMDBqMTDu8NIwV+INbGsuDL3EKMkB5OSKO+2T0AhvqT8lMqMxOKM+KLS\r
58         nNTiQ4wSHMxKIrxi9kA53pTEyqrUonyYlDQHi5I4r4bWOz8hgfTEktTs1NSC1CKYrAwHh5IE\r
59         b/5noEbBotT01Iq0zJwShDQTByfIcB6g4YogNbzFBYm5xZnpEPlTjIpS4rxbQRICIImM0jy4\r
60         XljiecUoDvSKMO9ckCoeYNKC634FNJgJaPBSXXmQwSWJCCmpBsbKH13Xz7zwfH340bGISPGw\r
61         +8/F33z/zuGd8qRm1a6li67e6f0+c7PhnG6htVcXi7Quedvw6ULty0MKL+p6tNjLbkzzTZp2\r
62         tZbZa6v8tuOifknp/np5Hzu6kj6vEii557H9SaD48YIndzS1YplO33Jz//Zhim5EpdVL3aly\r
63         G1cyHTx52HVW7I6JSizFGYmGWsxFxYkAb+K+dhcDAAA=\r
64 Cc: notmuch@notmuchmail.org\r
65 X-BeenThere: notmuch@notmuchmail.org\r
66 X-Mailman-Version: 2.1.13\r
67 Precedence: list\r
68 List-Id: "Use and development of the notmuch mail system."\r
69         <notmuch.notmuchmail.org>\r
70 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
71         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
72 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
73 List-Post: <mailto:notmuch@notmuchmail.org>\r
74 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
75 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
76         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
77 X-List-Received-Date: Thu, 26 Jan 2012 06:36:08 -0000\r
78 \r
79 Quoth Dmitry Kurochkin on Jan 24 at  5:49 am:\r
80 > On Wed, 11 Jan 2012 20:49:33 -0500, Austin Clements <amdragon@MIT.EDU> wrote:\r
81 > > This makes the text formatter take advantage of the new code\r
82 > > structure.  The previously duplicated header logic is now unified,\r
83 > > several things that we used to compute repeatedly across different\r
84 > > callbacks are now computed once, and the code is generally simplified.\r
85 > > \r
86 > > Unifying the header logic causes this to format some dates slightly\r
87 > > differently, so the two affected test cases are updated.\r
88\r
89 > Thanks for these patches, Austin.  They are a definite improvement for\r
90 > notmuch show code.  I hope it would soon get pushed to master.  And I\r
91 > hope more patches would follow :)\r
92\r
93 > Few minor comments below.\r
94\r
95 > > ---\r
96 > >  notmuch-show.c     |   84 ++++++++++++----------------------------------------\r
97 > >  test/crypto        |    2 +-\r
98 > >  test/thread-naming |   16 +++++-----\r
99 > >  3 files changed, 28 insertions(+), 74 deletions(-)\r
100 > > \r
101 > > diff --git a/notmuch-show.c b/notmuch-show.c\r
102 > > index 3241965..1689222 100644\r
103 > > --- a/notmuch-show.c\r
104 > > +++ b/notmuch-show.c\r
105 > > @@ -175,67 +175,42 @@ format_part_text (const void *ctx, mime_node_t *node,\r
106 > >      GMimeObject *meta = node->envelope_part ?\r
107 > >     GMIME_OBJECT (node->envelope_part) : node->part;\r
108 > >      GMimeContentType *content_type = g_mime_object_get_content_type (meta);\r
109 > > +    GMimeContentDisposition *disposition =\r
110 > > +   g_mime_object_get_content_disposition (meta);\r
111 > > +    notmuch_bool_t attachment = disposition &&\r
112 > > +   strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0;\r
113\r
114 > If I did not miss anything, attachment is used only as following:\r
115\r
116 >   attachment ? "attachment" : "part"\r
117\r
118 > Please make it const char[] and set to "attachment" or "part".\r
119 \r
120 Ooh, good catch.  But I'll do you one better.  I introduced a const\r
121 char *part_type that's set to "attachment", "part", *or* "message" in\r
122 the if structure below.  That eliminates the attachment variable,\r
123 moves the disposition variable back down into one of the early if\r
124 bodies, and eliminates the entire conditional the figures out what to\r
125 print to close the block.\r
126 \r
127 > > +    notmuch_bool_t leaf = GMIME_IS_PART (node->part);\r
128\r
129 > Please add const where possible to local variables (e.g. attachment, leaf).\r
130 \r
131 Generally I consider these overkill on local non-pointer variables,\r
132 but okay.  leaf wound up being the only one I had to add it to.\r
133 \r
134 > >      int i;\r
135 > >  \r
136 > >      if (node->envelope_file) {\r
137 > >     notmuch_message_t *message = node->envelope_file;\r
138 > > -   const char *headers[] = {\r
139 > > -       "Subject", "From", "To", "Cc", "Bcc", "Date"\r
140 > > -   };\r
141 > > -   const char *name, *value;\r
142 > > -   unsigned int i;\r
143 > >  \r
144 > > -   printf ("\fmessage{ ");\r
145 > > -   printf ("id:%s depth:%d match:%d filename:%s\n",\r
146 > > +   printf ("\fmessage{ id:%s depth:%d match:%d filename:%s\n",\r
147 > >             notmuch_message_get_message_id (message),\r
148 > >             indent,\r
149 > >             notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH),\r
150 > >             notmuch_message_get_filename (message));\r
151 > > -\r
152 > > -   printf ("\fheader{\n");\r
153 > > -\r
154 > > -   printf ("%s\n", _get_one_line_summary (ctx, message));\r
155 > > -\r
156 > > -   for (i = 0; i < ARRAY_SIZE (headers); i++) {\r
157 > > -       name = headers[i];\r
158 > > -       value = notmuch_message_get_header (message, name);\r
159 > > -       if (value && strlen (value))\r
160 > > -           printf ("%s: %s\n", name, value);\r
161 > > -   }\r
162 > > -   printf ("\fheader}\n");\r
163\r
164 > Yay!  Only one header-printing code left :)\r
165\r
166 > >      } else {\r
167 > > -   GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta);\r
168 > >     const char *cid = g_mime_object_get_content_id (meta);\r
169 > > +   const char *filename = leaf ?\r
170 > > +       g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;\r
171 > >  \r
172 > > -   if (disposition &&\r
173 > > -       strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
174 > > -   {\r
175 > > -       printf ("\fattachment{ ID: %d", node->part_num);\r
176 > > -\r
177 > > -   } else {\r
178 > > -\r
179 > > -       printf ("\fpart{ ID: %d", node->part_num);\r
180 > > -   }\r
181 > > -\r
182 > > -   if (GMIME_IS_PART (node->part))\r
183 > > -   {\r
184 > > -       const char *filename = g_mime_part_get_filename (GMIME_PART (node->part));\r
185 > > -       if (filename)\r
186 > > -           printf (", Filename: %s", filename);\r
187 > > -   }\r
188 > > -\r
189 > > +   printf ("\f%s{ ID: %d", attachment ? "attachment" : "part", node->part_num);\r
190 > > +   if (filename)\r
191\r
192 > I always forget about it, can we declare variables inside if condition\r
193 > like in C++?  I.e.:\r
194\r
195 >   if (const char *filename = leaf ? g_mime_part_get_filename (GMIME_PART (node->part)) : NULL)\r
196\r
197 > If yes, I would prefer to use this style where possible.\r
198 \r
199 You can do that in C++?  You definitely can't do that in C.\r
200 \r
201 > > +       printf (", Filename: %s", filename);\r
202 > >     if (cid)\r
203 > >         printf (", Content-id: %s", cid);\r
204 > > -\r
205\r
206 > I would revert blank line changes.  But I do not insist :)\r
207 \r
208 Eh.  I'm generally opposed to drive-by fixes, but this code inherited\r
209 a lot of funny formatting that just interrupts the whole flow when the\r
210 code is all in one place.\r
211 \r
212 > >     printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));\r
213 > >      }\r
214 > >  \r
215 > > -    if (node->envelope_part) {\r
216 > > +    if (GMIME_IS_MESSAGE (node->part)) {\r
217\r
218 > This condition is repeated at least twice.  Please consider moving the\r
219 > message variable below to the top level and using it in the conditions.\r
220 \r
221 If the downcast had to be done in both places I would, but since the\r
222 conditional itself is the only repetition, I prefer to minimize the\r
223 scope of the message variable.\r
224 \r
225 Thanks for the review!  I'll send a new version shortly.\r
226 \r
227 > Regards,\r
228 >   Dmitry\r
229\r
230 > >     GMimeMessage *message = GMIME_MESSAGE (node->part);\r
231 > >     InternetAddressList *recipients;\r
232 > >     const char *recipients_string;\r
233 > >  \r
234 > >     printf ("\fheader{\n");\r
235 > > +   if (node->envelope_file)\r
236 > > +       printf ("%s\n", _get_one_line_summary (ctx, node->envelope_file));\r
237 > >     printf ("Subject: %s\n", g_mime_message_get_subject (message));\r
238 > >     printf ("From: %s\n", g_mime_message_get_sender (message));\r
239 > >     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);\r
240 > > @@ -248,9 +223,11 @@ format_part_text (const void *ctx, mime_node_t *node,\r
241 > >         printf ("Cc: %s\n", recipients_string);\r
242 > >     printf ("Date: %s\n", g_mime_message_get_date_as_string (message));\r
243 > >     printf ("\fheader}\n");\r
244 > > +\r
245 > > +   printf ("\fbody{\n");\r
246 > >      }\r
247 > >  \r
248 > > -    if (!node->envelope_file) {\r
249 > > +    if (leaf) {\r
250 > >     if (g_mime_content_type_is_type (content_type, "text", "*") &&\r
251 > >         !g_mime_content_type_is_type (content_type, "text", "html"))\r
252 > >     {\r
253 > > @@ -258,24 +235,12 @@ format_part_text (const void *ctx, mime_node_t *node,\r
254 > >         g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
255 > >         show_text_part_content (node->part, stream_stdout);\r
256 > >         g_object_unref(stream_stdout);\r
257 > > -   }\r
258 > > -   else if (g_mime_content_type_is_type (content_type, "multipart", "*") ||\r
259 > > -            g_mime_content_type_is_type (content_type, "message", "rfc822"))\r
260 > > -   {\r
261 > > -       /* Do nothing for multipart since its content will be printed\r
262 > > -        * when recursing. */\r
263 > > -   }\r
264 > > -   else\r
265 > > -   {\r
266 > > +   } else {\r
267 > >         printf ("Non-text part: %s\n",\r
268 > >                 g_mime_content_type_to_string (content_type));\r
269 > >     }\r
270 > >      }\r
271 > >  \r
272 > > -    if (GMIME_IS_MESSAGE (node->part)) {\r
273 > > -   printf ("\fbody{\n");\r
274 > > -    }\r
275 > > -\r
276 > >      for (i = 0; i < node->nchildren; i++)\r
277 > >     format_part_text (ctx, mime_node_child (node, i), indent, params);\r
278 > >  \r
279 > > @@ -286,18 +251,7 @@ format_part_text (const void *ctx, mime_node_t *node,\r
280 > >      if (node->envelope_file) {\r
281 > >     printf ("\fmessage}\n");\r
282 > >      } else {\r
283 > > -   GMimeContentDisposition *disposition;\r
284 > > -\r
285 > > -   disposition = g_mime_object_get_content_disposition (meta);\r
286 > > -   if (disposition &&\r
287 > > -       strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
288 > > -   {\r
289 > > -       printf ("\fattachment}\n");\r
290 > > -   }\r
291 > > -   else\r
292 > > -   {\r
293 > > -       printf ("\fpart}\n");\r
294 > > -   }\r
295 > > +   printf ("\f%s}\n", attachment ? "attachment" : "part");\r
296 > >      }\r
297 > >  }\r
298 > >  \r
299 > > diff --git a/test/crypto b/test/crypto\r
300 > > index 0af4aa8..6723ef8 100755\r
301 > > --- a/test/crypto\r
302 > > +++ b/test/crypto\r
303 > > @@ -157,7 +157,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2000-01-01) (encrypted inbox)\r
304 > >  Subject: test encrypted message 001\r
305 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
306 > >  To: test_suite@notmuchmail.org\r
307 > > -Date: 01 Jan 2000 12:00:00 -0000\r
308 > > +Date: Sat, 01 Jan 2000 12:00:00 +0000\r
309 > >  \f\r
310 header}\r
311 > >  \f\r
312 body{\r
313 > >  \f\r
314 part{ ID: 1, Content-type: multipart/encrypted\r
315 > > diff --git a/test/thread-naming b/test/thread-naming\r
316 > > index 41b97d9..b7c96f2 100755\r
317 > > --- a/test/thread-naming\r
318 > > +++ b/test/thread-naming\r
319 > > @@ -71,7 +71,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-05) (unread)\r
320 > >  Subject: thread-naming: Initial thread subject\r
321 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
322 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
323 > > -Date: Fri, 05 Jan 2001 15:43:56 -0000\r
324 > > +Date: Fri, 05 Jan 2001 15:43:56 +0000\r
325 > >  \f\r
326 header}\r
327 > >  \f\r
328 body{\r
329 > >  \f\r
330 part{ ID: 1, Content-type: text/plain\r
331 > > @@ -85,7 +85,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-06) (inbox unread)\r
332 > >  Subject: thread-naming: Older changed subject\r
333 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
334 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
335 > > -Date: Sat, 06 Jan 2001 15:43:56 -0000\r
336 > > +Date: Sat, 06 Jan 2001 15:43:56 +0000\r
337 > >  \f\r
338 header}\r
339 > >  \f\r
340 body{\r
341 > >  \f\r
342 part{ ID: 1, Content-type: text/plain\r
343 > > @@ -99,7 +99,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-07) (inbox unread)\r
344 > >  Subject: thread-naming: Newer changed subject\r
345 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
346 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
347 > > -Date: Sun, 07 Jan 2001 15:43:56 -0000\r
348 > > +Date: Sun, 07 Jan 2001 15:43:56 +0000\r
349 > >  \f\r
350 header}\r
351 > >  \f\r
352 body{\r
353 > >  \f\r
354 part{ ID: 1, Content-type: text/plain\r
355 > > @@ -113,7 +113,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-08) (unread)\r
356 > >  Subject: thread-naming: Final thread subject\r
357 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
358 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
359 > > -Date: Mon, 08 Jan 2001 15:43:56 -0000\r
360 > > +Date: Mon, 08 Jan 2001 15:43:56 +0000\r
361 > >  \f\r
362 header}\r
363 > >  \f\r
364 body{\r
365 > >  \f\r
366 part{ ID: 1, Content-type: text/plain\r
367 > > @@ -127,7 +127,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-09) (inbox unread)\r
368 > >  Subject: Re: thread-naming: Initial thread subject\r
369 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
370 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
371 > > -Date: Tue, 09 Jan 2001 15:43:45 -0000\r
372 > > +Date: Tue, 09 Jan 2001 15:43:45 +0000\r
373 > >  \f\r
374 header}\r
375 > >  \f\r
376 body{\r
377 > >  \f\r
378 part{ ID: 1, Content-type: text/plain\r
379 > > @@ -141,7 +141,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-10) (inbox unread)\r
380 > >  Subject: Aw: thread-naming: Initial thread subject\r
381 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
382 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
383 > > -Date: Wed, 10 Jan 2001 15:43:45 -0000\r
384 > > +Date: Wed, 10 Jan 2001 15:43:45 +0000\r
385 > >  \f\r
386 header}\r
387 > >  \f\r
388 body{\r
389 > >  \f\r
390 part{ ID: 1, Content-type: text/plain\r
391 > > @@ -155,7 +155,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-11) (inbox unread)\r
392 > >  Subject: Vs: thread-naming: Initial thread subject\r
393 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
394 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
395 > > -Date: Thu, 11 Jan 2001 15:43:45 -0000\r
396 > > +Date: Thu, 11 Jan 2001 15:43:45 +0000\r
397 > >  \f\r
398 header}\r
399 > >  \f\r
400 body{\r
401 > >  \f\r
402 part{ ID: 1, Content-type: text/plain\r
403 > > @@ -169,7 +169,7 @@ Notmuch Test Suite <test_suite@notmuchmail.org> (2001-01-12) (inbox unread)\r
404 > >  Subject: Sv: thread-naming: Initial thread subject\r
405 > >  From: Notmuch Test Suite <test_suite@notmuchmail.org>\r
406 > >  To: Notmuch Test Suite <test_suite@notmuchmail.org>\r
407 > > -Date: Fri, 12 Jan 2001 15:43:45 -0000\r
408 > > +Date: Fri, 12 Jan 2001 15:43:45 +0000\r
409 > >  \f\r
410 header}\r
411 > >  \f\r
412 body{\r
413 > >  \f\r
414 part{ ID: 1, Content-type: text/plain\r
415\r
416 \r
417 -- \r
418 Austin Clements                                      MIT/'06/PhD/CSAIL\r
419 amdragon@mit.edu                           http://web.mit.edu/amdragon\r
420        Somewhere in the dream we call reality you will find me,\r
421               searching for the reality we call dreams.\r