meillo@161: .H0 "Summary meillo@132: .P meillo@161: This document describes and explains my work on mmh. meillo@190: I have streamlined the project by removing programs, facilities, meillo@178: and options that diverted from the main task of mmh, being an MUA. meillo@161: I have modernized the code base removing obsolete functions and meillo@161: activating modern features per default. meillo@190: Furthermore, I have improved the style by refactoring clumpsy code meillo@190: and by identifying and forcing clear concepts. meillo@161: All my work was motivated by Antoine de Saint Exupery's well-known meillo@161: statement: meillo@161: .[ meillo@161: antoine de saint exupery: Wind, Sand and Stars (1939) meillo@161: .] meillo@132: .QS meillo@132: It seems that perfection is attained not when there is nothing meillo@132: more to add, but when there is nothing more to remove. meillo@132: .QE meillo@190: .LP meillo@190: Against the common expectations, I hardly added new features. meillo@190: I regard my achievement in the selection of the relevant set of existing meillo@190: features, the choice of sensible defaults, and the extensive meillo@190: focus on structure and concepts. meillo@161: I believe, the result is a system simpler and clearer for both meillo@161: developing and using, without lacking important functionality. meillo@132: meillo@190: .KS meillo@190: .in 1c meillo@190: .so input/sloc.grap meillo@190: .KE meillo@190: meillo@161: meillo@164: .U2 "Outlook meillo@148: .P meillo@190: MIME handling is the most complex part of mmh and the one with the meillo@190: highest potential for improvements. meillo@190: The changes already accomplished so far build upon the existing structure, meillo@190: but deeper rework is necessary to integrate MIME handling consistently. meillo@190: For instance, accessing messages and accessing their MIME parts meillo@190: should both covered by a single approach. meillo@190: This requires the sequence notation to provide a way to address meillo@190: MIME parts directly. meillo@190: In general, the sequence notation should become more powerful. meillo@161: For instance, it is currently not possible to access the second last meillo@161: message in a given sequence. meillo@190: Furthermore, displaying messages can be improved. meillo@189: Encrypted messages should be decoded automatically meillo@190: and digital signatures verified on-the-fly. meillo@190: In this rework, MH's unique features need to be preserved, meillo@190: but as well the default behavior should become less surprising. meillo@190: Still, encoding and decoding is not done everywhere it is necessary. meillo@190: The problems of not decoded quotations of the original message in replies meillo@190: and not encoded non-ASCII characters in the message header remain. meillo@132: .P meillo@190: Some of mmh's tools were hardly touched, yet. meillo@161: Among them are meillo@161: .Pn dist , meillo@161: .Pn rcvdist , meillo@161: .Pn mark , meillo@161: .Pn pick , meillo@161: and meillo@161: .Pn sortm . meillo@190: They should be refactored as well. meillo@164: Related to meillo@190: .Pn sortm meillo@190: is the threaded message view, which is completely missing, so far. meillo@161: .Pn pick meillo@190: could profit from message indexing. meillo@189: These fields deserve further research. meillo@161: .P meillo@190: Nmh's testing framework has not been updated for mmh, yet. meillo@190: All refactoring had been done without the safety net of a test framework. meillo@190: Hence, experience warns that there may be subtle bugs in the code base. meillo@190: .P meillo@190: The features most often asked for are IMAP and Maildir support. meillo@189: But, both of them collide with MH in the same fundamental way as meillo@190: different filesystem approaches collide with Unix. meillo@190: Nevertheless, an abstraction layer could provide a mapping between such meillo@190: storage back-ends and the MH storage format. meillo@190: Or, the mmh tool chest could be reworked to operate on a generic back-end, meillo@164: making the MH storage format only one of many possible back-ends. meillo@161: Research in this area is highly appreciated. meillo@132: meillo@132: meillo@132: .U2 "Relationship to nmh meillo@132: .P meillo@161: The mmh project started as an experimental version of nmh because the meillo@192: nmh community did not welcome my plans and visions. meillo@192: The need to convincing the community of every change I liked to meillo@192: undertake would have slowed down my work too much. meillo@192: Hence, I created this experimental version to convince by demonstration. meillo@192: .\" This enabled me to follow my vision straightforwardly and thus produce meillo@192: .\" a result of greater pureness. meillo@0: .P meillo@192: While I worked on mmh, nmh's community became very active as well. meillo@192: Although we both worked on the same code base, there was no collaberation. meillo@192: This, I must admit, was my failure because I kept my work hidden meillo@192: from the nmh community. meillo@192: The reasons are personal and community-related. meillo@192: I am sorry for that and I like to improve in the future. meillo@196: Nonetheless, I did not work behind completely closed doors. meillo@196: I discussed within the regional computer community and meillo@196: presented the project in two video-recorded lectures. meillo@192: .[ meillo@192: chaosseminar ccc ulm mmh meillo@192: .] meillo@192: .[ meillo@192: gpn entropia mmh meillo@192: .] meillo@192: First users appeared and provided feedback. meillo@161: .P meillo@192: Over time, I had to realize that, although nmh and mmh have much meillo@192: in common, the projects target different goals. meillo@192: I am still undecided how to handle it, but my experimental version meillo@192: more and more feels like being a fork. meillo@196: As I am strongly convinced that the path taken for the meillo@196: development of mmh is a good one, meillo@192: I like to push the project farther in this direction.