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: The work on mmh is not finished. meillo@164: Several tasks are left to do. meillo@132: .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@161: nmh community did not welcome my changes in the mainline version. meillo@179: To not slow down my work by the need to convince the community in meillo@161: discussions for each step I liked to take, meillo@161: I started to create an experimental version to convicce by demonstration meillo@161: of the result. meillo@164: .\" behind closed doors; talks I've given meillo@189: My work on mmh was independent of the nmh community. .\" XXX clarify meillo@181: .\" XXX straight? meillo@181: This enabled me to follow my vision straightforwardly and thus produce meillo@161: a result of greater pureness. meillo@0: .P meillo@179: Mmh shall be considered as an inspiration for the future development of nmh. meillo@179: It shall identify weak parts of nmh and suggest possible meillo@161: improvements by change. meillo@161: It shall present a lean appearance that is simpler to understand meillo@161: and work with for developers and users. meillo@189: By all means, my work on mmh shall improve nmh somehow. meillo@189: Improving nmh directly in the way I wanted was impossible meillo@161: due to personal and community-related circumstances. meillo@161: The mmh project is my way to offer my gifts though. meillo@189: .\" XXX zweimal ``my way'' meillo@161: .P meillo@189: .\" XXX meillo@161: During my work on mmh, the community of nmh suddenly became very active. meillo@189: In parallel to my work on mmh, they have worked on nmh. \" XXX rewrite meillo@161: There was no collaberation in our work, except that I have pulled some meillo@161: changes from nmh to mmh. meillo@161: Our work was motivated partly by similar and partly by different aims. meillo@161: Although some changes are common among both projects, meillo@161: fundamental differences exist. meillo@161: My experimental version thus more and more felt like being a fork. meillo@189: I am still undecided how I like to treat it. meillo@179: .P meillo@189: I am strongly convinced that the decisions taken for the meillo@189: development of mmh were good ones regarding my goals, meillo@179: and I like to push the project farther in this direction. meillo@161: meillo@161: meillo@179: .ig meillo@161: .U2 "Weaknesses of My Work meillo@161: .P meillo@161: not targeting on the right problems (maildir, imap) meillo@0: meillo@0: .P meillo@161: refactoring requires testing, automated testing meillo@132: meillo@53: .P meillo@161: communication with nmh. meillo@161: worked behind closed doors, but no: meillo@161: talks I've given meillo@148: meillo@148: .P meillo@158: focus on myself. meillo@158: But: If good for me then also good for others. meillo@179: ..