view preface.roff @ 236:49d3aa0d128a default tip

style: Removed unused macro code.
author markus schnalke <meillo@marmaro.de>
date Mon, 16 Jul 2012 11:31:25 +0200
parents 348b92755bef
children
line wrap: on
line source

.H0 "Preface" no

.P
I have discovered the mail client \fInmh\fP
in fall 2009.
At that time I used \fImutt\fP,
as many advanced Unix users do.
When I read about nmh, its concepts convinced me at once.
The transition from mutt to nmh was similar to beginning with
file management in the Unix shell when being used to the
\fImidnight commander\fP,
or like starting with vi when being used to modeless editors.
Such a change is not trivial, but, in being convinced by the
concepts and by having done similar transitions for file management
and editing already, it was not too difficult.
In contrast, setting up nmh to a convenient state became a tedious task
that took several months.
Once having nmh arranged this way, I enjoyed using it
because of its conceptional elegance and its scripting capabilities.
Nevertheless, it was still inconvenient for handling attachments,
non-ASCII character encodings, and similar features of modern emailing.
My setup demanded more and more additional configuration and helper scripts
to have nmh behave the way I wanted; yet my
expectations were rather common for modern emailing.
As a computer scientist and programmer, I wanted to improve the situation.
.P
In spring 2010, I sent a message
.[
nmh-workers gsoc
.]
to the \fInmh-workers\fP mailing list,
.[
nmh-workers mailing list website
.]
asking for the possibility to offer a Google Summer of Code
.[
google summer of code website
.]
project for me.
Participating in the development of nmh in this manner appeared attractive
to me, because I would have been able to work full time on nmh.
Although the nmh community had reacted generally positive to the suggestion,
the administrative work for such a project would had been too much.
Nonetheless, my proposal had activated the nmh community.
In the following weeks, goals for nmh's future were discussed.
In these discussions, I became involved in the
question whether nmh should include mail transfer facilities.
.[
nmh-workers thread mta mua
.]
I argued for the Mail Transfer Agent of nmh to be removed.
In this fundamental question,
my opinion differed from the opinion of most others.
Sadly, besides the discussions, hardly any real work was done.
Being unable to work on nmh in a way that would be accepted at university
as part of my studies, I needed to choose another project.
.P
Half a year later, starting in August 2010,
I took one semester off to travel through Latin America.
During my time in Argentina, I wanted to work on free software.
This brought me back to nmh.
Richard Sandelman, an active nmh user, took care of the official basis.
Juan Granda, an Argentine free software developer,
organized a computer with Internet connection.
Thanks to them, I was able to work on nmh during my three-month
stay in Santiago del Estero, Argentina.
Quickly it became obvious that I would not succeed with my main goal,
to improve the character encoding handling.
(One of its ramifications is the
missing transfer decoding of quoted text in replies.)
As this is one of the most intricate parts of the system, the goal
was simply set too high.
Instead, I improved the code base as I read through it.
I found minor bugs for which I proposed fixes.
Additionally, I improved the documentation in minor ways.
When I started to work on larger code changes,
I had to discover that the community was reluctant to change.
Its wish for compatibility was much stronger than its
wish for convenient out-of-the-box setups \(en in contrast to my opinion.
Once again, this led to long discussions.
I came to understand their point of view, but it is different from mine.
At the end of my three-month project, I had become familiar with
nmh's code base and community,
I had improved the project in minor ways,
and I still was convinced that I wanted to continue to do so.
.P
Another half year later, the end of my studies came within reach.
I needed to choose a topic for my master's thesis.
Without question, I wanted to work on nmh.
But not exactly on nmh, because I had accepted that its
community has different goals than I have.
Working on nmh would result in much discussion and, in consequence,
little progress.
After careful thought, I decided to start an experimental version of nmh.
I wanted to implement my own ideas of how an MH-like system should
look like.
I wanted to create a usable alternative version to be compared with
the present state of nmh.
Eventually, my work would be proven successful or not.
In any case, the nmh project would profit from my experiences.

.U2 "Focus of this Document
.P
This document explains the design goals and implementation decisions
for mmh,
an experimental version of nmh.
It discusses technical, historical, social and philosophical considerations.
On the technical side, this document
explains how an existing project was streamlined by removing rough edges
and better exploitation of the central concepts.
On the historical side, changes through time are discussed,
regarding the use cases and the email features,
as well as the reactions to them.
Socially, this document describes the effects
and experiences of a newcomer with revolutionary aims entering an old
and matured software project.
Philosophical thoughts on style, mainly based on the Unix
philosophy, are present throughout the discussions.
The document describes the changes to nmh,
but as well, it clarifies my personal perception of the
concepts of MH and Unix, and explain my therefrom resulting point of view.
.P
This document is written for the community around MH-like mail systems,
including developers and users.
Despite the focus on MH-like systems, this document may be valuable
to anyone interested in the Unix philosophy and anyone in contact with
old software projects, be it code- or community-related.
.P
The reader is expected to be familiar with Unix, C and emailing.
Good Unix shell knowledge is required, because MH relies fundamentally
on the shell.
Without the power of the shell, MH becomes a motorcycle
without winding roads: boring.
Introductions to Unix and its shell can be found in \fIThe UNIX Programming
Environment\fP by Kernighan and Pike
.[
kernighan pike unix prog env
.]
or \fIThe UNIX System\fP by Bourne.
.[
bourne unix system
.]
The reader is assumed to be a C programmer,
but the document should be understandable otherwise, too.
The definitive guide to C is Kernighan and Ritchie's
\fIThe C Programming Language\fP.
.[
kernighan ritchie c prog lang
.]
A book about system-level C programming, such as those written by
Rochkind and Curry,
.[
rochkind advanced unix prog
.]
.[
curry system prog
.]
can be helpful as additional literature.
Old books are likely more helpful for understanding,
because large parts of the source code are old.
The reader is expected to know the format of email messages and
the structure of email transfer systems, at least on a basic level.
It's advisable to have cross-read RFC\|821 and RFC\|822.
Furthermore, basic understanding of MIME [RFC\|2045\(en2049]
is good to have.
The Wikipedia provides good introduction-level information about email.
.[
wikipedia email
.]
.P
Frequent references to the Unix philosophy will be made.
Gancarz has tried to sum it up in his book
\fIThe UNIX Philosophy\fP.
.[
gancarz unix phil
.]
Even better, though less concrete, are \fIThe UNIX Programming
Environment\fP
.[
kernighan pike unix prog env
.]
and \fIThe Practice of Programming\fP
.[
kernighan pike practice of prog
.]
by Kernighan and Pike.
The term paper \fIWhy the Unix Philosophy still matters\fP
.[
why unix phil still matters schnalke
.]
by myself provides an overview on the philosophy,
including a case study of MH.
.P
Although a brief introduction to MH is provided in Section
.Cf mh ,
the reader is encouraged to have a look at
\fIMH & nmh: Email for Users & Programmers\fP by Jerry Peek.
.[
peek mh
.]
The current version is available freely on the Internet.
It is the definitive guide to MH and nmh.
.P
This document is neither a user's tutorial to mmh nor an introduction
to any of the topics covered.
The technical discussions are on an advanced level.
Nevertheless, as knowledge of the fundamental concepts is the most valuable
information a user can acquire about some program or software system,
this document may be worth a read for non-developers as well.


.U2 "Organization
.P
This thesis consists of three chapters.
Chapter 1 introduces into the topic, describing MH and explaining
the background and goals of the mmh project.
Chapter 2 discusses the work done in the project.
It is organized along the three major goals of the project, namely
streamlining, modernizing, and styling.
Not every change is described because that would bore the reader.
Instead, important changes and those standing for a set of similar
changes are described and discussed.
Chapter 3 finishes up by summarizing the achievements and taking
a look into the future of the mmh project.
.P
.I "Italic
font is used for names of software projects, literature, and man pages,
as well as to emphasize new terms.
.CW "Constant width
font is used to denote names of programs, files, functions,
command lines, code excerpts, program input and output, and the like.
.P
References to man pages are printed as ``\c
.Mp cat (1)'',
which is a reference to the man page of
.Pn cat
in section one of the Unix manual.
\fIRequests for Comments\fP (RFCs), which describe the working
of the Internet, are referenced as ``RFC\|821''.
Literature is cited in brackets, such as
.[ ``[
kernighan pike unix programming env
.]]''.
Citations of email messages and websites are distinguished by
``mail:'' and ``web:'' prefixes.
All references are collected at the end of the document.
Links to the software projects mentioned throughout
the text are collected there as well.
.P
This document describes practical programming work.
The code of mmh is managed with the
.Pn git
version control system.
All code changes were checked in.
In the discussions, references to corresponding code changes are printed
as ``\c
.Ci 1a2b3c4 ''.
The identifier is the seven-letter-prefix of the changeset's hash value,
which is considered unique.
Any change can be looked up in the repository, using the command line
.Cl "git show 1234567" .
(`\f(CW1234567\fP' needs to be replaced with the concrete hash value.)
At the time of writing, changesets could be looked up online at:
.CW "http://git.marmaro.de/?p=mmh;a=commitdiff;h=1234567" \|.
But as we all know, URIs are always at risk to change.


.U2 "Acknowledgments
.P
Prof. Dr. Schweiggert and Dr. Borchert, you made my work
possible with your believe in the relevance of this topic.
I enjoyed my time studying in Ulm in the environment around you.
For me, this had been just the right place to be.
You have enriched my studies greatly and
I have learned a lot from you both.
Thank you.
.sp
.P
This thesis is my own work, but it would be in much poorer shape
without the help of friends.
They spotted errors, bad explanations, weak argumentations,
and clumsy sentences.
Their comments and suggestions shaped this document;
they made it focused and comprehensive.
.P
The lady comes first, but not for that reason alone.

.IP "Katja Rogers
Your help concerning the English language and writing in general
was outstanding.
The reader will surely recognize the sentences I have never showed to you.

.IP "Dominik Lang
You were mmh's first user and you were convinced of it at once.
That was great!
Thanks for your feedback and suggestions regarding mmh,
as well as for improving this document.

.IP "Michael M\[udieresis]ller
Thanks for your corrections, comments,
and for the discussions on typography.

.IP "Matthias Matousek
Thanks for your corrections, comments,
and for sharing your ``living room''.

.IP "Boris Kraut
Thanks for your corrections, comments,
and for the idea to use an adjusted mmh setup as an address book.

.IP "Aaron M\[udieresis]ller
You have surprised me by proposing yourself to being a proof reader.
Thanks for your valuable annotations and quick responses.

.IP "Marius Gl\[odieresis]ggler and Martina Schnalke
You have covered the tedious tasks of double-checking the
changeset references and the bibliography, respectively.
Thank you.

.sp
.LP
My family supported me in times when I was busy;
Jean-Luc Picard and his crew took me on diverting
space adventures in my lazy times.

.sp
.P
Yet, no one of the aforementioned persons is connected to my work
as close as Lydi is. \(em
All those days, already in Argentina, when I was working long hours and
even on holidays instead of spending time with you.
All the explanations of always the same doubts and difficulties
I suffered from, and you just listened.
All the delays near the end of my work though you have wished for
an earlier finish.
In spite of it all, you knew what it meant to me.
.P
Danke f\[udieresis]r dein Verst\[adieresis]ndnis.