meillo@161: .H0 "Summary meillo@132: .P meillo@161: This document describes and explains my work on mmh. meillo@161: 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@161: Further more, I improved the style by refactoring clumpsy code meillo@161: and by defining or exploiting 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@161: .P meillo@161: In contrast to the common expectations, I have hardly added new features. meillo@161: I regard my improvements in selecting the relevant set of existing meillo@161: features and exploiting the concepts more thoroughly. 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@161: meillo@164: .U2 "Outlook meillo@148: .P meillo@161: The work done during the project is not finished. meillo@164: Several tasks are left to do. meillo@132: .P meillo@161: MIME handling is the most complex part of mmh and it requires meillo@161: general rework. meillo@161: The changes already done to it build upon the existing structure. meillo@161: Yet, MIME support is not truly integrated. meillo@161: For instance, accessing messages and accessing MIME parts of messages meillo@161: have inherently different concepts, although a single concept should meillo@161: cover both. meillo@161: The sequence notation should provide a way to address MIME parts directly. meillo@161: Furthermore, the sequence notation should be made more powerful in general. meillo@161: For instance, it is currently not possible to access the second last meillo@161: message in a given sequence. meillo@161: Displaying messages with meillo@161: .Pn show meillo@161: requires further rework. meillo@161: Encrypted messages, for example, should be decoded automatically meillo@161: and digital signatures should be verified on-the-fly. meillo@161: The whole task should be aligned with the common behavior of other meillo@161: mail clients. meillo@161: MH's unique features should not be lost, but the default should become meillo@161: less surprising. meillo@161: Transfer-decoding of the quoted text in replys and encoding of non-ASCII meillo@161: characters in message header fields like meillo@161: .Hd Subject meillo@161: remain unsolved. meillo@132: .P meillo@164: Some of mmh's tools were hardly touched during my work. 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@164: Related to meillo@161: .Pn sortm , meillo@161: a threaded message view is completely missing to mmh, yet. meillo@161: .Pn pick meillo@164: could be enhanced by message indexing. meillo@164: These fields are worthwhile for research. meillo@161: .P meillo@161: The features most often asked for are Maildir and IMAP support. meillo@161: Yet, both of them collide with MH in the same fundamental way as meillo@161: different filesystem approaches would collide with Unix. meillo@164: Nevertheless, an abstraction layer could provide a mapping from such meillo@164: storage back-ends to the MH storage format. meillo@173: 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@164: .\" XXX targeting the right problems?! meillo@164: .P meillo@164: Nmh has a testing framework that supported the developers by detecting meillo@164: several subtle bugs. meillo@164: All refactoring in mmh had been done without the safety net of a test meillo@164: framework. meillo@164: Hence, experience warns that the probability for subtle bugs lurking meillo@164: in the code base is high. meillo@164: Nmh's test framework should be adjusted to mmh and extended. meillo@166: .\" XXX path notation; signing and encrypting 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@161: To not slow my work down 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@161: My worked on mmh was independent of the nmh community. meillo@161: This enabled me to follow my vision straightly and thus produce meillo@161: a result of greater pureness. meillo@0: .P meillo@161: Mmh shall be considered an inspiration for the future development of nmh. meillo@161: It shall show identify weak part 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@161: By all means shall my work on mmh improve nmh in some way. meillo@161: Improving nmh directly in the way I wanted was impossible for me meillo@161: due to personal and community-related circumstances. meillo@161: The mmh project is my way to offer my gifts though. meillo@161: .P meillo@161: During my work on mmh, the community of nmh suddenly became very active. meillo@161: They have worked on nmh in parallel to my work on mmh. 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@161: I am undecided how I like to have it. meillo@161: Yet, I am strongly convinced that most of the decisions taken in mmh meillo@161: were good to achieve my goals and I like to push the project even meillo@161: farther in this direction. meillo@161: meillo@161: 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.