summaryrefslogtreecommitdiff
path: root/doc/tech-notes/introduction.html
blob: d729384211fdfad23669c1b920cf6bc1f720e61b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<HTML><HEAD><TITLE>Alpine Technical Notes: Introduction</TITLE></HEAD><BODY>
<H1>Introduction</H1>

<H2><A NAME="design">Design Goals</A></H2>

Throughout <EM>Alpine</EM> development, we have had to strike a balance
between the
need to include features which advanced users require and the need to keep
things simple for beginning users.  To strike this balance, we have tried
to adhere to these design principles:  <P>

<DL COMPACT>

<DT>

<DD> - The model presented to the user has to be simple and
clear.  Underlying system operation is hidden as much as possible. 

<DT>

<DD> - It's better to have a few easily understood commands that can be
repeated than to have some more sophisticated command that will do the job
all at once. 

<DT>

<DD> - Whenever the user has to select a command, file name, address,
etc., the user should be given (or can get) a menu from which to make the
selection. Menus need to be complete, small, organized and well thought
out. 

<DT>

<DD> - <EM>Alpine</EM> must provide immediate feedback for the user with each
operation. 

<DT>

<DD> - <EM>Alpine</EM> must be very tolerant of user errors.  Any time a user is
about to perform an irreversible act (send a message, expunge messages
from a folder), <EM>Alpine</EM> should ask for confirmation. 

<DT>

<DD> - Users should be able to learn by exploration without fear of doing
anything wrong. This is an important feature so the user can get started
quickly without reading any manuals and so fewer manuals are required. 

<DT>

<DD> - The core set of <EM>Alpine</EM> functions should be kept to a
minimum so new
users don't feel "lost" in seemingly extraneous commands and concepts. 
<P>

</DL> <P>

Just as there were goals relating to the look and feel of <EM>Alpine</EM>,
there were
equally important goals having to do with <EM>Alpine</EM>'s structure-the
things that
users never see but still rely on every time they use <EM>Alpine</EM>.
While <EM>Alpine</EM>
can be used as a stand-alone mail user agent, one of its strongest assets
is its use of the Internet Message Access Protocol (IMAP) for accessing
remote email folders.  In addition, <EM>Pine</EM> (the predecessor of <EM>Alpine</EM>) was one of
the first programs to
support the Multipurpose Internet Mail Extensions (MIME) specification. 
With MIME, <EM>Alpine</EM> users can reliably send any binary file to any other
person on the Internet who uses a MIME compliant email program.  <P>

The decision to use IMAP and MIME reflects the importance of
interoperability, standardization and robustness in <EM>Alpine</EM>.  As you work
with <EM>Alpine</EM> more, you will see other features which reflect
the same values. 
For example, <EM>Alpine</EM> enforces strict compliance with RFC 2822, implements a
strong mail folder locking mechanism and verifies a process before
overwriting any files (e.g. addressbook, expunging messages).  <P>
 
<H2><A NAME="components">Alpine Components</A></H2>

If you have picked up the <EM>Alpine</EM> distribution, then you already know that
<EM>Alpine</EM> comes in a few different pieces.  They are:  <P>

<DL COMPACT>

<DT> <EM>Alpine</EM>

<DD> The main code from which the <EM>Alpine</EM> program is compiled.  <P>

<DT> <EM>Pico</EM>

<DD> <EM>Pico</EM> is the name for the <EM>Alpine</EM> composer.
The <EM>Pico</EM> code is used in two
ways:  (1) it is compiled on its own to be a stand-alone editor and, (2)
it is compiled as a library for <EM>Alpine</EM> to support composition
of messages within <EM>Alpine</EM>.
<EM>Pico</EM> is <EM>Alpine</EM>'s internal editor invoked when users
need to fill in header lines or type the text of an email message.  <P>

<DT> <EM>Imap</EM>

<DD> An API for IMAP.  Includes the C-Client library, which is compiled
into <EM>Alpine</EM>, and the IMAP server <EM>IMAPd</EM>.
C-Client implements the IMAP
protocol and also negotiates all access between <EM>Alpine</EM> and
the mail folders
it operates on, even if the folders are local.
The C-Client routines are used for email folder parsing
and interpreting MIME messages. <EM>IMAPd</EM> is a separate server that handles
IMAP connections from any IMAP-compliant email program.  When <EM>Alpine</EM>
accesses a remote mailbox, the <EM>Alpine</EM> program is the IMAP client and the
<EM>IMAPd</EM> program is the IMAP server. Of course, <EM>Alpine</EM> can
use any IMAP-compliant IMAP server, not just <EM>IMAPd</EM>. <P>

</DL>

<!-- pnuts -->

</BODY>
</HTML>