annotate unix-phil.ms @ 61:733f4fb03071

a huge bunch of improvements of my wordings by Andrew Antle
author meillo@marmaro.de
date Sun, 18 Apr 2010 20:44:15 +0200
parents 840cbc667009
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49
2f188a5dc0dc moved style to separate document
meillo@marmaro.de
parents: 48
diff changeset
1 .so style
42
303e8f449e77 added TOC and improved visual appearance
meillo@marmaro.de
parents: 41
diff changeset
2
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
3 .TL
42
303e8f449e77 added TOC and improved visual appearance
meillo@marmaro.de
parents: 41
diff changeset
4 .ps +4
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
5 Why the Unix Philosophy still matters
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
6 .AU
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
7 markus schnalke <meillo@marmaro.de>
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
8 .AB
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
9 .ti \n(.iu
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
10 This paper explains the importance of the Unix Philosophy for software design.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
11 Today, few software designers are aware of these concepts,
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
12 and thus a lot of modern software is more limited than necessary
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
13 and makes less use of software leverage than possible.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
14 Knowing and following the guidelines of the Unix Philosophy makes software more valuable.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
15 .AE
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
16
2
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
17 .FS
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
18 .ps -1
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
19 This paper was prepared for the ``Software Analysis'' seminar at University Ulm.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
20 Mentor was professor Franz Schweiggert.
55
acd63ecc3606 added a ref; update dated of handing in
meillo@marmaro.de
parents: 54
diff changeset
21 Handed in on 2010-04-16.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
22 You may retrieve this document from
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
23 .CW \s-1http://marmaro.de/docs \ .
2
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
24 .FE
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
25
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
26 .H 1 Introduction
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
27 .LP
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
28 The Unix Philosophy is the essence of how the Unix operating system,
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
29 especially its toolchest, was designed.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
30 It is not a limited set of fixed rules,
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
31 but a loose set of guidelines which tell how to write software that
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
32 suites Unix well.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
33 Actually, the Unix Philosophy describes what is common in typical Unix software.
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
34 The Wikipedia has an accurate definition:
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
35 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
36 wikipedia
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
37 unix philosophy
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
38 .]
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
39 .QP
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
40 The \fIUnix philosophy\fP is a set of cultural norms and philosophical
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
41 approaches to developing software based on the experience of leading
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
42 developers of the Unix operating system.
3
aebbe3e76f5e minor rework
meillo@marmaro.de
parents: 2
diff changeset
43 .PP
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
44 As there is no single definition of the Unix Philosophy,
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
45 several people have stated their view on what it comprises.
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
46 Best known are:
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
47 .IP \(bu
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
48 Doug McIlroy's summary: ``Write programs that do one thing and do it well.''
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
49 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
50 mahoney
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
51 oral history
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
52 .]
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
53 .IP \(bu
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
54 Mike Gancarz' book ``The UNIX Philosophy''.
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
55 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
56 gancarz
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
57 unix philosophy
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
58 .]
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
59 .IP \(bu
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
60 Eric S. Raymond's book ``The Art of UNIX Programming''.
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
61 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
62 raymond
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
63 art of unix programming
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
64 .]
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
65 .LP
1
9b555c009f19 further text in intro
meillo@marmaro.de
parents: 0
diff changeset
66 These different views on the Unix Philosophy have much in common.
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
67 Especially, the main concepts are similar in all of them.
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
68 McIlroy's definition can surely be called the core of the Unix Philosophy,
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
69 but the fundamental idea behind it all is ``small is beautiful''.
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
70
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
71 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
72 The Unix Philosophy explains how to design good software for Unix.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
73 Many concepts described here are based on Unix facilities.
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
74 Other operating systems may not offer such facilities,
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
75 hence it may not be possible to design software for such systems
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
76 according to the Unix Philosophy.
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
77 .PP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
78 The Unix Philosophy has an idea of what the process of software development
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
79 should look like, but large parts of the philosophy are quite independent
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
80 from a concrete development process.
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
81 However, one will soon recognize that some development processes work well
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
82 with the ideas of the Unix Philosophy and support them, while others are
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
83 at cross-purposes.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
84 Kent Beck's books about Extreme Programming are valuable supplemental
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
85 resources on this topic.
40
422679bdf384 rework in ch01
meillo@marmaro.de
parents: 39
diff changeset
86 .PP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
87 The question of how to actually write code and how the code should look
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
88 in detail, are beyond the scope of this paper.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
89 Kernighan and Pike's book ``The Practice of Programming''
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
90 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
91 kernighan pike
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
92 practice of programming
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
93 .]
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
94 covers this topic.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
95 Its point of view corresponds to the one espoused in this paper.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
96
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
97 .H 1 "Importance of software design in general
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
98 .LP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
99 Software design consists of planning how the internal structure
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
100 and external interfaces of software should look.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
101 It has nothing to do with visual appearance.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
102 If we were to compare a program to a car, then its color would not matter.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
103 Its design would be the car's size, its shape, the locations of doors,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
104 the passenger/space ratio, the available controls and instruments,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
105 and so forth.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
106 .PP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
107 Why should software be designed at all?
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
108 It is accepted as general knowledge,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
109 that even a bad plan is better than no plan.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
110 Not designing software means programming without a plan.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
111 This will surely lead to horrible results,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
112 being horrible to use and horrible to maintain.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
113 These two aspects are the visible ones.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
114 Often invisible though, are the wasted possible gains.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
115 Good software design can make these gains available.
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
116 .PP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
117 A software's design deals with qualitative properties.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
118 Good design leads to good quality, and quality is important.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
119 Any car may be able to drive from point A to point B,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
120 but it depends on the qualitative decisions made in the design of the vehicle,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
121 whether it is a good choice for passenger transport or not,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
122 whether it is a good choice for a rough mountain area,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
123 and whether the ride will be fun.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
124
2
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
125 .PP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
126 Requirements for a piece of software are twofold:
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
127 functional and non-functional.
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
128 .IP \(bu
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
129 Functional requirements directly define the software's functions.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
130 They are the reason why software gets written.
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
131 Someone has a problem and needs a tool to solve it.
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
132 Being able to solve the problem is the main functional goal.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
133 This is the driving force behind all programming effort.
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
134 Functional requirements are easier to define and to verify.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
135 .IP \(bu
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
136 Non-functional requirements are called \fIquality\fP requirements, too.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
137 The quality of software shows through the properties that are not directly
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
138 related to the software's basic functions.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
139 Tools of bad quality often do solve the problems they were written for,
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
140 but introduce problems and difficulties for usage and development later on.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
141 Qualitative aspects are often overlooked at first sight,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
142 and are often difficult to define clearly and to verify.
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
143 .PP
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
144 Quality is hardly interesting when software gets built initially,
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
145 but it has a high impact on usability and maintenance of the software later.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
146 A short-sighted person might see the process of developing software as
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
147 one mainly concerned with building something up.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
148 But, experience shows that building software the first time is
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
149 only a small portion of the overall work involved.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
150 Bug fixing, extending, rebuilding of parts \(en maintenance work \(en
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
151 soon take a large part of the time spent on a software project.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
152 And of course, the time spent actually using the software.
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
153 These processes are highly influenced by the software's quality.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
154 Thus, quality must not be neglected.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
155 However, the problem with quality is that you hardly ``stumble over''
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
156 bad quality during the first build,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
157 although this is the time when you should care about good quality most.
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
158 .PP
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
159 Software design has little to do with the basic function of software \(en
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
160 this requirement will get satisfied anyway.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
161 Software design is more about quality aspects.
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
162 Good design leads to good quality, bad design to bad quality.
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
163 The primary functions of software will be affected modestly by bad quality,
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
164 but good quality can provide a lot of additional benefits,
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
165 even at places one never expected it.
2
fbd7baf6a61f added content about sw design; some formating
meillo@marmaro.de
parents: 1
diff changeset
166 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
167 The ISO/IEC\|9126-1 standard, part\|1,
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
168 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
169 iso product quality
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
170 .]
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
171 defines the quality model as consisting of:
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
172 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
173 .I Functionality
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
174 (suitability, accuracy, inter\%operability, security)
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
175 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
176 .I Reliability
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
177 (maturity, fault tolerance, recoverability)
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
178 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
179 .I Usability
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
180 (understandability, learnability, operability, attractiveness)
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
181 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
182 .I Efficiency
9
529168f49f29 corrected spelling
meillo@marmaro.de
parents: 8
diff changeset
183 (time behavior, resource utilization)
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
184 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
185 .I Maintainability
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
186 (analyzability, changeability, stability, testability)
6
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
187 .IP \(bu
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
188 .I Portability
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
189 (adaptability, installability, co-existence, replaceability)
a6b837d822b7 rewrote ch02
meillo@marmaro.de
parents: 5
diff changeset
190 .LP
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
191 Good design can improve these properties in software;
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
192 poorly designed software likely suffers in these areas.
7
606f0ffca834 added two more paragraphs to ch02
meillo@marmaro.de
parents: 6
diff changeset
193 .PP
606f0ffca834 added two more paragraphs to ch02
meillo@marmaro.de
parents: 6
diff changeset
194 One further goal of software design is consistency.
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
195 Consistency eases understanding, using, and working on things.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
196 Consistent internal structure and consistent external interfaces
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
197 can be provided by good design.
7
606f0ffca834 added two more paragraphs to ch02
meillo@marmaro.de
parents: 6
diff changeset
198 .PP
39
c87143793d82 a lot of rework in ch02
meillo@marmaro.de
parents: 38
diff changeset
199 Software should be well designed because good design avoids many
57
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
200 problems during its lifetime.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
201 Also, because good design can offer much additional gain.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
202 Indeed, much effort should be spent on good design to make software more valuable.
840cbc667009 applied corrections by Andrew Antle
meillo@marmaro.de
parents: 55
diff changeset
203 The Unix Philosophy provides a way to design software well.
7
606f0ffca834 added two more paragraphs to ch02
meillo@marmaro.de
parents: 6
diff changeset
204 It offers guidelines to achieve good quality and high gain for the effort spent.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
205
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
206
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
207 .H 1 "The Unix Philosophy
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
208 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
209 The origins of the Unix Philosophy have already been introduced.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
210 This chapter explains the philosophy, oriented on Gancarz,
55
acd63ecc3606 added a ref; update dated of handing in
meillo@marmaro.de
parents: 54
diff changeset
211 .[
acd63ecc3606 added a ref; update dated of handing in
meillo@marmaro.de
parents: 54
diff changeset
212 gancarz
acd63ecc3606 added a ref; update dated of handing in
meillo@marmaro.de
parents: 54
diff changeset
213 unix philosophy
acd63ecc3606 added a ref; update dated of handing in
meillo@marmaro.de
parents: 54
diff changeset
214 .]
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
215 and shows concrete examples of its application.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
216
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
217 .H 2 Pipes
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
218 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
219 The following examples demonstrate how the Unix Philosophy is applied.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
220 Knowledge of using the Unix shell is assumed.
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
221 .PP
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
222 Counting the number of files in the current directory:
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
223 .DS
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
224 ls | wc -l
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
225 .DE
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
226 The
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
227 .CW ls
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
228 command lists all files in the current directory, one per line,
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
229 and
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
230 .CW "wc -l
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
231 counts the number of lines.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
232 .PP
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
233 Counting the number of files that do not contain ``foo'' in their name:
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
234 .DS
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
235 ls | grep -v foo | wc -l
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
236 .DE
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
237 Here, the list of files is filtered by
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
238 .CW grep
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
239 to remove all lines that contain ``foo''.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
240 The rest equals the previous example.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
241 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
242 Finding the five largest entries in the current directory:
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
243 .DS
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
244 du -s * | sort -nr | sed 5q
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
245 .DE
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
246 .CW "du -s *
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
247 returns the recursively summed sizes of all files in the current directory
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
248 \(en no matter if they are regular files or directories.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
249 .CW "sort -nr
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
250 sorts the list numerically in reverse order (descending).
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
251 Finally,
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
252 .CW "sed 5q
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
253 quits after it has printed the fifth line.
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
254 .PP
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
255 The presented command lines are examples of what Unix people would use
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
256 to get the desired output.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
257 There are other ways to get the same output;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
258 it is the user's decision which way to go.
14
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
259 .PP
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
260 The examples show that many tasks on a Unix system
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
261 are accomplished by combining several small programs.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
262 The connection between the programs is denoted by the pipe operator `|'.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
263 .PP
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
264 Pipes, and their extensive and easy use, are one of the great
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
265 achievements of the Unix system.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
266 Pipes were possible in earlier operating systems,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
267 but never before have they been such a central part of the concept.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
268 In the early seventies when Doug McIlroy introduced pipes into the
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
269 Unix system,
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
270 ``it was this concept and notation for linking several programs together
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
271 that transformed Unix from a basic file-sharing system to an entirely new way of computing.''
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
272 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
273 aughenbaugh
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
274 unix oral history
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
275 .]
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
276 .PP
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
277 Being able to specify pipelines in an easy way is,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
278 however, not enough by itself;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
279 it is only one half.
4
c707b0c5c849 new text about pipes
meillo@marmaro.de
parents: 3
diff changeset
280 The other is the design of the programs that are used in the pipeline.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
281 They need interfaces that allow them to be used in this way.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
282
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
283 .H 2 "Interface design
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
284 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
285 Unix is, first of all, simple \(en everything is a file.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
286 Files are sequences of bytes, without any special structure.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
287 Programs should be filters, which read a stream of bytes from standard input (stdin)
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
288 and write a stream of bytes to standard output (stdout).
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
289 If the files \fIare\fP sequences of bytes,
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
290 and the programs \fIare\fP filters on byte streams,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
291 then there is exactly one data interface.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
292 Hence it is possible to combine programs in any desired way.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
293 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
294 Even a handful of small programs yields a large set of combinations,
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
295 and thus a large set of different functions.
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
296 This is leverage!
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
297 If the programs are orthogonal to each other \(en the best case \(en
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
298 then the set of different functions is greatest.
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
299 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
300 Programs can also have a separate control interface
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
301 in addition to their data interface.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
302 The control interface is often called the ``user interface'',
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
303 because it is usually designed to be used by humans.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
304 The Unix Philosophy discourages the assumption that the user will be human.
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
305 Interactive use of software is slow use of software,
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
306 because the program waits for user input most of the time.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
307 Interactive software also requires the user to be in front of the computer,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
308 occupying his attention during usage.
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
309 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
310 Now, back to the idea of combining several small programs
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
311 to perform a more specific function:
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
312 If these single tools were all interactive,
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
313 how would the user control them?
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
314 It is not only a problem to control several programs at once
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
315 if they run at the same time;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
316 it is also very inefficient to have to control each program
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
317 when they are intended to act in concert.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
318 Hence, the Unix Philosophy discourages designing programs which demand
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
319 interactive use.
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
320 The behavior of programs should be defined at invocation.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
321 This is done by specifying arguments to the program call
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
322 (command line switches).
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
323 Gancarz discusses this topic as ``avoid[ing] captive user interfaces''.
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
324 .[ [
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
325 gancarz unix philosophy
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
326 .], page 88 ff.]
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
327 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
328 Non-interactive use is also an advantage for testing during development.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
329 Testing interactive programs is much more complicated
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
330 than testing non-interactive counterparts.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
331
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
332 .H 2 "The toolchest approach
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
333 .LP
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
334 A toolchest is a set of tools.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
335 Instead of one big tool for all tasks, there are many small tools,
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
336 each for one task.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
337 Difficult tasks are solved by combining several small, simple tools.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
338 .PP
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
339 The Unix toolchest \fIis\fP a set of small, (mostly) non-interactive programs
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
340 that are filters on byte streams.
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
341 They are, to a large extent, unrelated in their function.
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
342 Hence, the Unix toolchest provides a large set of functions
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
343 that can be accessed by combining the programs in the desired way.
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
344 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
345 The act of software development benefits from small toolchest programs, too.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
346 Writing small programs is generally easier and less error-prone
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
347 than writing large programs.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
348 Hence, writing a large set of small programs is still easier and
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
349 less error-prone than writing one large program with all the
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
350 functionality included.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
351 If the small programs are combinable, then they offer even an even larger set
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
352 of functions than the single monolithic program.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
353 Hence, one gets two advantages out of writing small, combinable programs:
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
354 They are easier to write and they offer a greater set of functions through
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
355 combination.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
356 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
357 There are also two main drawbacks of the toolchest approach.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
358 First, one simple, standardized interface has to be sufficient.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
359 If one feels the need for more ``logic'' than a stream of bytes,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
360 then a different approach might be required.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
361 Also, a design where a stream of bytes is sufficient,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
362 might not be conceivable.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
363 By becoming more familiar with the ``Unix style of thinking'',
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
364 developers will more often and easier find simple designs where
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
365 a stream of bytes is a sufficient interface.
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
366 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
367 The second drawback of the toolchest approach concerns the users.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
368 A toolchest is often more difficult to use because
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
369 it is necessary to become familiar with each tool and
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
370 be able to choose and use the right one in any given situation.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
371 Additionally, one needs to know how to combine the tools in a sensible way.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
372 The issue is similar to having a sharp knife \(en
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
373 it is a powerful tool in the hand of a master,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
374 but of no value in the hand of an unskilled person.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
375 However, learning single, small tools of a toolchest is often easier than
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
376 learning a complex tool.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
377 The user will already have a basic understanding of an as yet unknown tool
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
378 if the tools of a toolchest have a common, consistent style.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
379 He will be able to transfer knowledge of one tool to another.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
380 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
381 This second drawback can be removed to a large extent
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
382 by adding wrappers around the basic tools.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
383 Novice users do not need to learn several tools if a professional wraps
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
384 complete command lines into a higher-level script.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
385 Note that the wrapper script still calls the small tools;
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
386 it is just like a skin around them.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
387 No complexity is added this way,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
388 but new programs can be created out of existing one with very little effort.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
389 .PP
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
390 A wrapper script for finding the five largest entries in the current directory
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
391 might look like this:
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
392 .DS
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
393 #!/bin/sh
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
394 du -s * | sort -nr | sed 5q
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
395 .DE
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
396 The script itself is just a text file that calls the commands
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
397 that a professional user would type in directly.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
398 It is probably beneficial to make the program flexible in regard to
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
399 the number of entries it prints:
41
13ef7042fa28 some rework in ch01; nicer formating
meillo@marmaro.de
parents: 40
diff changeset
400 .DS
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
401 #!/bin/sh
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
402 num=5
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
403 [ $# -eq 1 ] && num="$1"
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
404 du -sh * | sort -nr | sed "${num}q"
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
405 .DE
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
406 This script acts like the one before when called without an argument,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
407 but the user can also specify a numerical argument to define the number
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
408 of lines to print.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
409 One can surely imagine even more flexible versions;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
410 however, they will still rely on the external programs
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
411 which actually do the work.
5
48f1f3465550 new content about interfaces and toolchests
meillo@marmaro.de
parents: 4
diff changeset
412
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
413 .H 2 "A powerful shell
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
414 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
415 The Unix shell provides the ability to combine small programs into large ones.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
416 But a powerful shell is a great feature in other ways, too;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
417 for instance, by being scriptable.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
418 Control statements are built into the shell
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
419 and the functions are the normal programs of the system.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
420 As the programs are already known,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
421 learning to program in the shell becomes easy.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
422 Using normal programs as functions in the shell programming language
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
423 is only possible because they are small and combinable tools in a toolchest style.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
424 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
425 The Unix shell encourages writing small scripts,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
426 by combining existing programs because it is so easy to do.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
427 This is a great step towards automation.
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
428 It is wonderful if the effort to automate a task equals the effort
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
429 to do the task a second time by hand.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
430 If this holds,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
431 then the user will be happy to automate everything he does more than once.
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
432 .PP
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
433 Small programs that do one job well, standardized interfaces between them,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
434 a mechanism to combine parts to larger parts, and an easy way to automate tasks
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
435 will inevitably produce software leverage,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
436 achieving multiple times the benefit of the initial investment.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
437 .PP
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
438 The shell also encourages rapid prototyping.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
439 Many well known programs started as quickly hacked shell scripts,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
440 and turned into ``real'' programs later written in C.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
441 Building a prototype first is a way to avoid the biggest problems
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
442 in application development.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
443 Fred Brooks explains in ``No Silver Bullet'':
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
444 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
445 brooks
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
446 no silver bullet
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
447 .]
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
448 .QP
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
449 The hardest single part of building a software system is deciding precisely what to build.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
450 No other part of the conceptual work is so difficult as establishing the detailed
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
451 technical requirements, [...].
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
452 No other part of the work so cripples the resulting system if done wrong.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
453 No other part is more difficult to rectify later.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
454 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
455 Writing a prototype is a great method for becoming familiar with the requirements
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
456 and to run into real problems early.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
457 .[ [
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
458 gancarz
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
459 unix philosophy
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
460 .], page 28 f.]
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
461 .PP
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
462 Prototyping is often seen as a first step in building software.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
463 This is, of course, good.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
464 However, the Unix Philosophy has an \fIadditional\fP perspective on prototyping:
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
465 After having built the prototype, one might notice that the prototype is already
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
466 \fIgood enough\fP.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
467 Hence, no reimplementation in a more sophisticated programming language
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
468 might be of need, at least for the moment.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
469 Maybe later, it might be necessary to rewrite the software, but not now.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
470 By delaying further work, one keeps the flexibility to react on
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
471 changing requirements.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
472 Software parts that are not written will not miss the requirements.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
473 Well known is Gordon Bell's classic saying:
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
474 ``The cheapest, fastest, and most reliable components are those
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
475 that aren't there.''
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
476 .\" FIXME: ref?
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
477
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
478 .H 2 "Worse is better
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
479 .LP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
480 The Unix Philosophy aims for the 90% solution;
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
481 others call it the ``Worse is better'' approach.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
482 Experience from real life projects shows:
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
483 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
484 (1) It is almost impossible to define the
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
485 requirements completely and correctly the first time.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
486 Hence one should not try to; one will fail anyway.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
487 .PP
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
488 (2) Requirements change during time.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
489 Hence it is best to delay requirement-based design decisions as long as possible.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
490 Software should be small and flexible as long as possible in order
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
491 to react to changing requirements.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
492 Shell scripts, for example, are more easily adjusted than C programs.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
493 .PP
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
494 (3) Maintenance work is hard work.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
495 Hence, one should keep the amount of code as small as possible;
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
496 it should only fulfill the \fIcurrent\fP requirements.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
497 Software parts that will be written in the future
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
498 do not need maintenance until that time.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
499 .PP
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
500 See Brooks' ``The Mythical Man-Month'' for reference.
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
501 .[ [
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
502 brooks
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
503 mythical man-month
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
504 .], page 115 ff.]
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
505 .PP
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
506 Starting with a prototype in a scripting language has several advantages:
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
507 .IP \(bu
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
508 As the initial effort is low, one will likely start right away.
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
509 .IP \(bu
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
510 Real requirements can be identified quickly since working parts are
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
511 available sooner.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
512 .IP \(bu
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
513 When software is usable and valuable, it gets used, and thus tested.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
514 This ensures that problems will be found in the early stages of development.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
515 .IP \(bu
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
516 The prototype might be enough for the moment;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
517 thus, further work can be delayed until a time
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
518 when one knows about the requirements and problems more thoroughly.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
519 .IP \(bu
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
520 Implementing only the parts that are actually needed at the moment
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
521 introduces less programming and maintenance work.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
522 .IP \(bu
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
523 If the situation changes such that the software is not needed anymore,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
524 then less effort was spent on the project than it would have been
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
525 if a different approach had been taken.
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
526
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
527 .H 2 "Upgrowth and survival of software
11
b32a43a62cae some rework about interface arch (ch03)
meillo@marmaro.de
parents: 10
diff changeset
528 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
529 So far, \fIwriting\fP or \fIbuilding\fP software has been discussed.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
530 Although ``writing'' and ``building'' are just verbs,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
531 they do imply a specific view on the work process they describe.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
532 A better verb would be to \fI``grow''\fP.
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
533 Creating software in the sense of the Unix Philosophy is an incremental process.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
534 It starts with an initial prototype, which evolves as requirements change.
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
535 A quickly hacked shell script might become a large, sophisticated,
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
536 compiled program this way.
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
537 Its lifetime begins with the initial prototype and ends when the software is not used anymore.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
538 While alive, it will be extended, rearranged, rebuilt.
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
539 Growing software matches the view that ``software is never finished. It is only released.''
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
540 .[ [
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
541 gancarz
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
542 unix philosophy
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
543 .], page 26]
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
544 .PP
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
545 Software can be seen as being controlled by evolutionary processes.
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
546 Successful software is software that is used by many for a long time.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
547 This implies that the software is necessary, useful, and better than the alternatives.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
548 Darwin describes ``the survival of the fittest.''
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
549 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
550 darwin
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
551 origin of species
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
552 .]
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
553 In relation to software, the most successful software is the fittest;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
554 the one that survives.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
555 (This may be at the level of one creature, or at the level of one species.)
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
556 The fitness of software is affected mainly by four properties:
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
557 portability of code, portability of data, range of usability, and reusability of parts.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
558 .PP
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
559 (1)
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
560 .I "``Portability of code''
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
561 means using high-level programming languages,
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
562 sticking to the standard,
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
563 .[ [
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
564 kernighan pike
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
565 practice of programming
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
566 .], chapter\|8]
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
567 and avoiding optimizations that introduce dependencies on specific hardware.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
568 Hardware has a much shorter lifespan than software.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
569 By chaining software to specific hardware,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
570 its lifetime is limited to that of this hardware.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
571 In contrast, software should be easy to port \(en
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
572 adaptation is the key to success.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
573 .PP
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
574 (2)
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
575 .I "``Portability of data''
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
576 is best achieved by avoiding binary representations
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
577 to store data, since binary representations differ from machine to machine.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
578 Textual representation is favored.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
579 Historically, \s-1ASCII\s0 was the character set of choice;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
580 for the future, \s-1UTF\s0-8 might be the better way forward.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
581 Important is that it is a plain text representation in a
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
582 very common character set encoding.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
583 Apart from being able to transfer data between machines,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
584 readable data has the great advantage that humans are able to directly
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
585 read and edit it with text editors and other tools from the Unix toolchest.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
586 .[ [
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
587 gancarz
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
588 unix philosophy
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
589 .], page 56 ff.]
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
590 .PP
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
591 (3)
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
592 A large
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
593 .I "``range of usability''
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
594 ensures good adaptation, and thus good survival.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
595 It is a special distinction when software becomes used in fields of endeavor,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
596 the original authors never imagined.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
597 Software that solves problems in a general way will likely be used
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
598 for many kinds of similar problems.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
599 Being too specific limits the range of usability.
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
600 Requirements change through time, thus use cases change or even vanish.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
601 As a good example of this point,
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
602 Allman identifies flexibility to be one major reason for sendmail's success:
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
603 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
604 allman
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
605 sendmail
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
606 .]
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
607 .QP
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
608 Second, I limited myself to the routing function [...].
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
609 This was a departure from the dominant thought of the time, [...].
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
610 .QP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
611 Third, the sendmail configuration file was flexible enough to adapt
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
612 to a rapidly changing world [...].
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
613 .LP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
614 Successful software adapts itself to the changing world.
12
018d5f9a2993 wrote about upgrowth and survival (ch03)
meillo@marmaro.de
parents: 11
diff changeset
615 .PP
15
00e306ee903b reformated content (ch03)
meillo@marmaro.de
parents: 14
diff changeset
616 (4)
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
617 .I "``Reusability of parts''
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
618 goes one step further.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
619 Software may become obsolete and completely lose its field of action,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
620 but the constituent parts of the software may be general and independent enough
13
c665b9e7bf8a more about portability and reuse (ch03)
meillo@marmaro.de
parents: 12
diff changeset
621 to survive this death.
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
622 If software is built by combining small independent programs,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
623 then these parts are readily available for reuse.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
624 Who cares that the large program is a failure,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
625 if parts of it become successful instead?
10
355ed69a34a8 more about the shell and worse is better (ch03)
meillo@marmaro.de
parents: 9
diff changeset
626
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
627 .H 2 "Summary
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
628 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
629 This chapter explained ideas central to the Unix Philosophy.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
630 For each of the ideas, the advantages they introduce were explained.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
631 The Unix Philosophy is a set of guidelines that help in the design of
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
632 more valuable software.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
633 From the viewpoint of a software developer or software designer,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
634 the Unix Philosophy provides answers to many software design problems.
14
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
635 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
636 The various ideas comprising the Unix Philosophy are very interweaved
14
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
637 and can hardly be applied independently.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
638 The most important messages are:
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
639 .I "``Keep it simple!''" ,
14
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
640 .I "``Do one thing well!''" ,
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
641 and
59305c854751 rearrangements of headlines; summary (ch03)
meillo@marmaro.de
parents: 13
diff changeset
642 .I "``Use software leverage!''
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
643
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
644
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
645
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
646 .H 1 "Case study: \s-1MH\s0
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
647 .LP
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
648 The previous chapter introduced and explained the Unix Philosophy
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
649 from a general point of view.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
650 The driving force was that of the guidelines;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
651 references to existing software were given only sparsely.
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
652 In this and the next chapter, concrete software will be
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
653 the driving force in the discussion.
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
654 .PP
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
655 This first case study is about the mail user agents (\s-1MUA\s0)
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
656 \s-1MH\s0 (``mail handler'') and its descendant \fInmh\fP
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
657 (``new mail handler'').
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
658 .[
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
659 nmh website
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
660 .]
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
661 \s-1MUA\s0s provide functions to read, compose, and organize mail,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
662 but (ideally) not to transfer it.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
663 In this document, the name \s-1MH\s0 will be used to include nmh.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
664 A distinction will only be made if differences between
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
665 \s-1MH\s0 and nmh are described.
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
666
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
667
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
668 .H 2 "Historical background
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
669 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
670 Electronic mail was available in Unix from a very early stage.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
671 The first \s-1MUA\s0 on Unix was \f(CWmail\fP,
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
672 which was already present in the First Edition.
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
673 .[ [
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
674 salus
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
675 quarter century of unix
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
676 .], page 41 f.]
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
677 It was a small program that either printed the user's mailbox file
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
678 or appended text to someone else's mailbox file,
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
679 depending on the command line arguments.
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
680 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
681 manual mail(1)
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
682 .]
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
683 It was a program that did one job well.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
684 This job was emailing, which was very simple then.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
685 .PP
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
686 Later, emailing became more powerful, and thus more complex.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
687 The simple \f(CWmail\fP, which knew nothing of subjects,
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
688 independent handling of single messages,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
689 and long-term email storage, was not powerful enough anymore.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
690 In 1978 at Berkeley, Kurt Shoens wrote \fIMail\fP (with a capital `M')
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
691 to provide additional functions for emailing.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
692 Mail was still one program, but was large and did several jobs.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
693 Its user interface was modeled after \fIed\fP.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
694 Ed is designed for humans, but is still scriptable.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
695 \fImailx\fP is the adaptation of Berkeley Mail for System V.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
696 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
697 ritter
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
698 mailx history
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
699 .]
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
700 Elm, pine, mutt, and a slew of graphical \s-1MUA\s0s
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
701 followed Mail's direction:
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
702 large, monolithic programs which included all emailing functions.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
703 .PP
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
704 A different way was taken by the people of \s-1RAND\s0 Corporation.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
705 Initially, they also had used a monolithic mail system
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
706 called \s-1MS\s0 (for ``mail system'').
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
707 But in 1977, Stockton Gaines and Norman Shapiro
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
708 came up with a proposal for a new email system concept \(en
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
709 one that honored the Unix Philosophy.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
710 The concept was implemented by Bruce Borden in 1978 and 1979.
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
711 This was the birth of \s-1MH\s0 \(en the ``mail handler''.
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
712 .PP
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
713 Since then, \s-1RAND\s0, the University of California at Irvine and
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
714 at Berkeley, and several others have contributed to the software.
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
715 However, it's core concepts remained the same.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
716 In the late 90s, when development of \s-1MH\s0 slowed down,
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
717 Richard Coleman started with \fInmh\fP, the new mail handler.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
718 His goal was to improve \s-1MH\s0 especially in regard to
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
719 the requirements of modern emailing.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
720 Today, nmh is developed by various people on the Internet.
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
721 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
722 ware
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
723 rand history
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
724 .]
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
725 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
726 peek
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
727 mh
18
e2240a387a84 wrote about history of MH and nmh
meillo@marmaro.de
parents: 17
diff changeset
728 .]
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
729
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
730 .H 2 "Contrasts to monolithic mail systems
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
731 .LP
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
732 All \s-1MUA\s0s are monolithic, except \s-1MH\s0.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
733 Although some very little known toolchest \s-1MUA\s0s might also exist,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
734 this statement reflects the situation pretty well.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
735 .PP
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
736 Monolithic \s-1MUA\s0s gather all their functions in one program.
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
737 In contrast, \s-1MH\s0 is a toolchest of many small tools \(en one for each job.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
738 Following is a list of important programs of \s-1MH\s0's toolchest
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
739 and their function.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
740 It gives an indication of what the toolchest looks like.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
741 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
742 .CW inc :
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
743 incorporate new mail (this is how mail enters the system)
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
744 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
745 .CW scan :
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
746 list messages in folder
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
747 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
748 .CW show :
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
749 show message
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
750 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
751 .CW next\fR/\fPprev :
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
752 show next/previous message
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
753 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
754 .CW folder :
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
755 change current folder
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
756 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
757 .CW refile :
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
758 refile message into different folder
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
759 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
760 .CW rmm :
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
761 remove message
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
762 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
763 .CW comp :
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
764 compose new message
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
765 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
766 .CW repl :
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
767 reply to message
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
768 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
769 .CW forw :
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
770 forward message
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
771 .IP \(bu
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
772 .CW send :
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
773 send prepared message (this is how mail leaves the system)
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
774 .LP
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
775 \s-1MH\s0 has no special user interface like monolithic \s-1MUA\s0s have.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
776 The user does not leave the shell to run \s-1MH\s0;
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
777 instead he uses the various \s-1MH\s0 programs within the shell.
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
778 Using a monolithic program with a captive user interface
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
779 means ``entering'' the program, using it, and ``exiting'' the program.
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
780 Using toolchests like \s-1MH\s0 means running programs,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
781 alone or in combination with others, also from other toolchests,
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
782 without leaving the shell.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
783
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
784 .H 2 "Data storage
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
785 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
786 \s-1MH\s0's mail storage consists of a hierarchy under the user's
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
787 \s-1MH\s0 directory (usually \f(CW$HOME/Mail\fP),
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
788 where mail folders are directories and mail messages are text files
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
789 within them.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
790 Each mail folder contains a file \f(CW.mh_sequences\fP which lists
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
791 the public message sequences of that folder,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
792 for instance, the \fIunseen\fP sequence for new messages.
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
793 Mail messages are text files located in a mail folder.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
794 The files contain the messages as they were received,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
795 and they are named by ascending numbers in each folder.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
796 .PP
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
797 This mailbox format is called ``\s-1MH\s0'' after the \s-1MUA\s0.
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
798 Alternatives are \fImbox\fP and \fImaildir\fP.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
799 In the mbox format, all messages are stored within one file.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
800 This was a good solution in the early days, when messages
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
801 were only a few lines of text deleted within a short period of time.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
802 Today, with single messages often including several megabytes
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
803 of attachments, this is a bad solution.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
804 Another disadvantage of the mbox format is that it is
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
805 more difficult to write tools that work on mail messages,
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
806 because it is always necessary to first find and extract
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
807 the relevant message in the mbox file.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
808 With the \s-1MH\s0 mailbox format, each message is a separate file.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
809 Also, the problem of concurrent access to one mailbox is
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
810 reduced to the problem of concurrent access to one message.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
811 The maildir format is generally similar to the \s-1MH\s0 format,
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
812 but modified towards guaranteed reliability.
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
813 This involves some complexity, unfortunately.
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
814 .PP
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
815 Working with \s-1MH\s0's toolchest on mailboxes is much like
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
816 working with Unix' toolchest on directory trees:
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
817 \f(CWscan\fP is like \f(CWls\fP,
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
818 \f(CWshow\fP is like \f(CWcat\fP,
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
819 \f(CWfolder\fP is like \f(CWcd\fP and \f(CWpwd\fP,
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
820 \f(CWrefile\fP is like \f(CWmv\fP,
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
821 and \f(CWrmm\fP is like \f(CWrm\fP.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
822 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
823 \s-1MH\s0 extends the context of processes in Unix by two more items
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
824 for its tools:
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
825 .IP \(bu
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
826 The current mail folder, which is similar to the current working directory.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
827 For mail folders, \f(CWfolder\fP provides the corresponding functionality
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
828 of \f(CWcd\fP and \f(CWpwd\fP for directories.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
829 .IP \(bu
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
830 Sequences, which are named sets of messages in a mail folder.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
831 The current message, relative to a mail folder, is a special sequence.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
832 It enables commands like \f(CWnext\fP and \f(CWprev\fP.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
833 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
834 In contrast to the general process context in Unix,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
835 which is maintained by the kernel,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
836 \s-1MH\s0's context must be maintained by the tools themselves.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
837 Usually there is one context per user, which resides in his
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
838 \f(CWcontext\fP file in the \s-1MH\s0 directory,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
839 but a user can have several contexts, too.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
840 Public sequences are an exception, as they belong to a mail folder,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
841 and reside in the \f(CW.mh_sequences\fP file there.
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
842 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
843 man page mh-profile mh-sequence
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
844 .]
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
845
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
846 .H 2 "Discussion of the design
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
847 .LP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
848 This section discusses \s-1MH\s0 in regard to the tenets
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
849 of the Unix Philosophy that Gancarz identified.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
850
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
851 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
852 .B "Small is beautiful
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
853 and
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
854 .B "do one thing well
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
855 are two design goals that are directly visible in \s-1MH\s0.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
856 Gancarz actually uses \s-1MH\s0 in his book as example under the
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
857 headline ``Making \s-1UNIX\s0 Do One Thing Well'':
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
858 .[ [
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
859 gancarz
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
860 unix philosophy
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
861 .], page 125 ff.]
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
862 .QP
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
863 [\s-1MH\s0] consists of a series of programs which
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
864 when combined give the user an enormous ability
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
865 to manipulate electronic mail messages.
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
866 A complex application, it shows that not only is it
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
867 possible to build large applications from smaller
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
868 components, but also that such designs are actually preferable.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
869 .LP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
870 The various programs of \s-1MH\s0 were relatively easy to write,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
871 because each one was small, limited to one function,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
872 and had clear boundaries.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
873 For the same reasons, they are also easy to maintain.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
874 Further more, the system can easily get extended:
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
875 One only needs to place a new program into the toolchest.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
876 This was done when \s-1MIME\s0 support was added
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
877 (e.g. \f(CWmhbuild\fP).
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
878 Also, different programs can exist to do basically the same job
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
879 in different ways (e.g. in nmh: \f(CWshow\fP and \f(CWmhshow\fP).
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
880 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
881 If someone needs a mail system with some additional
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
882 functionality that is not available anywhere yet,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
883 it is beneficial to expand a toolchest system like \s-1MH\s0.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
884 There he can add new functionality by simply adding additional
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
885 programs to the toolchest;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
886 he does not risk to break existing functionality by doing so.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
887
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
888 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
889 .B "Store data in flat text files" ;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
890 this principle was followed by \s-1MH\s0.
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
891 This is not surprising, because email messages are already plain text.
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
892 \s-1MH\s0 stores the messages as it receives them,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
893 thus any other tool that works on \s-1RFC\s0\|2822 compliant mail
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
894 messages can operate
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
895 on the messages in an \s-1MH\s0 mailbox.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
896 All other files \s-1MH\s0 uses are plain text as well.
34
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
897 It is therefore possible and encouraged to use the text processing
0b2cf026d93d rework of MH's data storage section
meillo@marmaro.de
parents: 33
diff changeset
898 tools of Unix' toolchest to extend \s-1MH\s0's toolchest.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
899
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
900 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
901 .B "Avoid captive user interfaces" .
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
902 \s-1MH\s0 is perfectly suited for non-interactive use.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
903 It offers all functions directly, without captive user interfaces.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
904 If users want a graphical user interface,
53
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
905 they can have it with \fIxmh\fP, \fIexmh\fP,
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
906 or with the Emacs interface \fImh-e\fP.
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
907 These are frontends for the \s-1MH\s0 toolchest.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
908 This means all email-related work is still done by \s-1MH\s0 tools,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
909 but the frontend calls the appropriate commands when the user
53
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
910 clicks on buttons or pushes a key.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
911 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
912 Providing additional user interfaces in form of frontends is a good
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
913 approach, because it does not limit the power of the backend itself.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
914 The frontend will only be able to make a subset of the
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
915 backend's power and flexibility available to the user,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
916 but if it is a separate program,
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
917 then the missing parts can still be accessed at the backend directly.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
918 If it is integrated, then this will be much more difficult.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
919 An additional advantage is the ability to have different frontends
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
920 to the same backend.
19
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
921
d8f428cee0d1 about mh (ch04)
meillo@marmaro.de
parents: 18
diff changeset
922 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
923 .B "Choose portability over efficiency
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
924 and
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
925 .B "use shell scripts to increase leverage and portability" .
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
926 These two tenets are indirectly, but nicely, demonstrated by
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
927 Bolsky and Korn in their book about the Korn Shell.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
928 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
929 bolsky korn
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
930 korn shell
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
931 .]
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
932 Chapter\|18 of the book shows a basic implementation
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
933 of a subset of \s-1MH\s0 in ksh scripts.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
934 This is just a demonstration, but a brilliant one.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
935 It shows how quickly one can implement such a prototype with shell scripts,
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
936 and how readable they are.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
937 The implementation in scripting language may not be very fast,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
938 but it can be fast enough, and this is all that matters.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
939 By having the code in an interpreted language, like the shell,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
940 portability becomes a minor issue if we assume the interpreter
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
941 to be widespread.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
942 .PP
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
943 This demonstration also shows how easy it is to create single programs
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
944 of toolchest software.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
945 Eight tools (two of them having multiple names) and 16 functions
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
946 with supporting code are presented to the reader.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
947 The tools comprise less than 40 lines of ksh each,
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
948 in total about 200 lines.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
949 The functions comprise less than 80 lines of ksh each,
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
950 in total about 450 lines.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
951 Such small software is easy to write, easy to understand,
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
952 and thus easy to maintain.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
953 A toolchest improves one's ability to only write some parts of a
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
954 program while still creating a working result.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
955 Expanding the toolchest, even without global changes,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
956 will likely be possible.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
957
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
958 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
959 .B "Use software leverage to your advantage
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
960 and the lesser tenet
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
961 .B "allow the user to tailor the environment
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
962 are ideally followed in the design of \s-1MH\s0.
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
963 Tailoring the environment is heavily encouraged by the ability to
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
964 directly define default options to programs.
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
965 It is even possible to define different default options
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
966 depending on the name under which a program is called.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
967 Software leverage is heavily encouraged by the ease of
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
968 creating shell scripts that run a specific command line,
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
969 built of several \s-1MH\s0 programs.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
970 There are few pieces of software that encourages users to tailor their
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
971 environment and to leverage the use of the software like \s-1MH\s0.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
972 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
973 Just to cite one example:
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
974 One might prefer a different listing format for the \f(CWscan\fP
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
975 program.
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
976 It is possible to take one of the distributed format files
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
977 or to write one yourself.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
978 To use the format as default for \f(CWscan\fP, a single line,
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
979 reading
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
980 .DS
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
981 scan: -form FORMATFILE
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
982 .DE
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
983 must be added to \f(CW.mh_profile\fP.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
984 If one wants this alternative format available as an additional command,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
985 instead of changing the default, he just needs to create a link to
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
986 \f(CWscan\fP, for instance titled \f(CWscan2\fP.
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
987 The line in \f(CW.mh_profile\fP would then start with \f(CWscan2\fP,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
988 as the option should only be in effect for a program that is invoked as
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
989 \f(CWscan2\fP.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
990
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
991 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
992 .B "Make every program a filter
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
993 is hard to find implemented in \s-1MH\s0.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
994 The reason is that most of \s-1MH\s0's tools provide
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
995 basic file system operations for mailboxes.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
996 It is for the same reason because that \f(CWls\fP, \f(CWcp\fP, \f(CWmv\fP,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
997 and \f(CWrm\fP aren't filters neither.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
998 \s-1MH\s0 does not provide many filters itself,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
999 but it provides a basis upon which to write filters.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1000 An example would be a mail text highlighter,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1001 a program that makes use of a color terminal to display header lines,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1002 quotations, and signatures in distinct colors.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1003 The author's version of such a program is an awk script with 25 lines.
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1004
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1005 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
1006 .B "Build a prototype as soon as possible
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1007 was again well followed by \s-1MH\s0.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1008 This tenet, of course, focuses on early development, which is a
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1009 long time ago for \s-1MH\s0.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1010 But without following this guideline at the very beginning,
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
1011 Bruce Borden may have not convinced the management of \s-1RAND\s0
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
1012 to ever create \s-1MH\s0.
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
1013 In Bruce' own words:
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
1014 .[ [
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
1015 ware rand history
46
98a1446744c7 now concrete page numbers in ref markers
meillo@marmaro.de
parents: 45
diff changeset
1016 .], page 132]
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1017 .QP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1018 [...] but [Stockton Gaines and Norm Shapiro] were not able
23
f0511a56416e rework in ch04 and spell check
meillo@marmaro.de
parents: 22
diff changeset
1019 to convince anyone that such a system would be fast enough to be usable.
21
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1020 I proposed a very short project to prove the basic concepts,
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1021 and my management agreed.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1022 Looking back, I realize that I had been very lucky with my first design.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1023 Without nearly enough design work,
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1024 I built a working environment and some header files
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1025 with key structures and wrote the first few \s-1MH\s0 commands:
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1026 inc, show/next/prev, and comp.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1027 [...]
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1028 With these three, I was able to convince people that the structure was viable.
ca929b042039 more on MH (ch04)
meillo@marmaro.de
parents: 20
diff changeset
1029 This took about three weeks.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1030
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1031 .H 2 "Problems
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1032 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1033 \s-1MH\s0 is not without its problems.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1034 There are two main problems: one is technical, the other pertains to human behavior.
22
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1035 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1036 \s-1MH\s0 is old and email today is quite different than it was in the time
22
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1037 when \s-1MH\s0 was designed.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1038 \s-1MH\s0 adapted to the changes fairly well, but it has its limitations.
22
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1039 \s-1MIME\s0 support and support for different character encodings
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1040 is available, but only on a moderate level.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1041 This comes from limited development resources.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1042 A larger and more active developer base could quickly remedy this.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1043 But \s-1MH\s0 is also limited by design, which is the larger problem.
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
1044 \s-1IMAP\s0, for example, conflicts with \s-1MH\s0's design to a large extent.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1045 These design conflicts are not easily solvable
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1046 and may require a redesign.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1047 \s-1IMAP\s0 may be too incompatible with the classic mail model,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1048 which \s-1MH\s0 covers, so \s-1MH\s0 may never support it well.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1049 (Using \s-1IMAP\s0 and a filesystem abstraction layer to only map
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1050 a remote directory into the local filesystem, is a different topic.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1051 \s-1IMAP\s0 support is seen as being able to access the special
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1052 mail features of the protocol.)
22
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1053 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1054 The other kind of problem relates to human habits.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1055 In this world, where almost all \s-1MUA\s0s are monolithic,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1056 it is very difficult to convince people to use a toolchest-style \s-1MUA\s0
22
4c21f5b8d716 wrote about problems of MH (ch04)
meillo@marmaro.de
parents: 21
diff changeset
1057 like \s-1MH\s0.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1058 These habits are so strong, that even people who understand the concept
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1059 and advantages of \s-1MH\s0 are reluctant to switch,
30
ec17b3a969c7 various minor rework in ch04
meillo@marmaro.de
parents: 23
diff changeset
1060 simply because \s-1MH\s0 is different.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1061 Unfortunately, the frontends to \s-1MH\s0, which could provide familiar
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1062 look and feel, are quite outdated and thus not very appealing in comparison
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1063 to the modern interfaces of many monolithic \s-1MUA\s0s.
53
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
1064 One notable exception is \fImh-e\fP which provides an Emacs interface
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
1065 to \s-1MH\s0.
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
1066 \fIMh-e\fP looks much like \fImutt\fP or \fIpine\fP,
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
1067 but it has buttons, menus, and graphical display capabilities.
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
1068
53
14f5ff66ad8a added notes about mh-e; fixed missing heading
meillo@marmaro.de
parents: 51
diff changeset
1069 .H 2 "Summary
20
578d5c84e5c0 a lot about mh (ch04)
meillo@marmaro.de
parents: 19
diff changeset
1070 .LP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1071 \s-1MH\s0 is an \s-1MUA\s0 that follows the Unix Philosophy in its design.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1072 It consists of a toolchest of small tools, each of which does one job well.
31
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1073 The toolchest approach offers great flexibility to the user.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1074 It is possible to utilize the complete power of the Unix shell with \s-1MH\s0.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1075 This makes \s-1MH\s0 a very powerful mail system,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1076 and extending and customizing \s-1MH\s0 is easy and encouraged.
31
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1077 .PP
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1078 Apart from the user's perspective, \s-1MH\s0 is development-friendly.
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1079 Its overall design follows clear rules.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1080 The single tools do only one job; thus they are easy to understand,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1081 write, and maintain.
31
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1082 They are all independent and do not interfere with the others.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1083 Automated testing of their function is a straightforward task.
31
0caa9760fca8 wrote summary of ch04
meillo@marmaro.de
parents: 30
diff changeset
1084 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1085 It is sad, that \s-1MH\s0's dissimilarity to other \s-1MUA\s0s is its
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1086 largest problem, as this dissimilarity is also its largest advantage.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1087 Unfortunately, most people's habits are stronger
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1088 than the attraction of the clear design and the power \s-1MH\s0 offers.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1089
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
1090
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
1091
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1092 .H 1 "Case study: uzbl
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1093 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1094 The last chapter focused on the \s-1MUA\s0 \s-1MH\s0,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1095 which is an old and established piece of software.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1096 This chapter covers uzbl, a fresh new project.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1097 Uzbl is a web browser that adheres to the Unix Philosophy.
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1098 Its name comes from the \fILolspeak\fP word for ``usable'';
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1099 both are pronounced in the same way.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1100
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1101 .H 2 "Historical background
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1102 .LP
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1103 Uzbl was started by Dieter Plaetinck in April 2009.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1104 The idea was born in a thread on the Arch Linux forums.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1105 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
1106 arch linux forums
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
1107 browser
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1108 .]
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1109 After some discussion about the failures of well-known web browsers,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1110 Plaetinck (alias Dieter@be) came up with a rough proposal
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1111 of how a better web browser could look.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1112 In response to another member who asked if Plaetinck would write this
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1113 program because it sounded fantastic, Plaetinck replied:
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1114 ``Maybe, if I find the time ;-)''.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1115 .PP
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1116 Fortunately, he found the time.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1117 One day later, the first prototype was out.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1118 One week later, uzbl had its own website.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1119 .[
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1120 uzbl website
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1121 .]
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1122 One month after the initial code was presented,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1123 a mailing list was set up to coordinate and discuss further development,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1124 and a wiki was added to store documentation and scripts that cropped up
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1125 on the mailing list and elsewhere.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1126 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1127 In the first year of uzbl's existence, it was heavily developed on various branches.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1128 Plaetinck's task became more and more to only merge the best code from the
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1129 different branches into his main branch, and to apply patches.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1130 .[
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1131 lwn uzbl
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1132 .]
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1133 About once a month, Plaetinck released a new version.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1134 In September 2009, he presented several forks of uzbl.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1135 .[ [
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1136 uzbl website
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1137 .], news archive]
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1138 Uzbl actually opened the field for a whole family of web browsers with
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1139 a similar design.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1140 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1141 In July 2009, \fILinux Weekly News\fP published an interview with
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1142 Plaetinck about uzbl.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1143 .[
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1144 lwn uzbl
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1145 .]
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1146 In September 2009, the uzbl web browser was on \fISlashdot\fP.
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1147 .[
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1148 slashdot uzbl
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1149 .]
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1150
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1151 .H 2 "Contrasts to other web browsers
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1152 .LP
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1153 Like most \s-1MUA\s0s are monolithic, but \s-1MH\s0 is a toolchest,
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1154 most web browsers are monolithic, but uzbl is a frontend to a toolchest.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1155 .PP
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1156 Today, uzbl is divided into uzbl-core and uzbl-browser.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1157 Uzbl-core is, as its name indicates, the core of uzbl.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1158 It handles commands and events to interface with other programs,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1159 and displays webpages by using \fIwebkit\fP as its rendering engine.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1160 Uzbl-browser combines uzbl-core with a selection of handler scripts,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1161 a status bar, an event manager, yanking, pasting, page searching,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1162 zooming, and much more functionality, to form a ``complete'' web browser.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1163 In the following text, the term ``uzbl'' usually refers to uzbl-browser,
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1164 so uzbl-core is included.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1165 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1166 Unlike most other web browsers, uzbl is mainly the mediator between
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1167 various tools that cover single jobs.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1168 Uzbl listens for commands on a named pipe (fifo), a Unix socket,
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1169 and on stdin, and it writes events to a Unix socket and to stdout.
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1170 Loading a webpage in a running uzbl instance requires only:
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1171 .DS
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1172 echo 'uri http://example.org' >/path/to/uzbl-fifo
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1173 .DE
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1174 The rendering of the webpage is done by libwebkit,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1175 around which uzbl-core is built.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1176 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1177 Downloads, browsing history, bookmarks, and the like are not provided
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1178 by the core itself like they are in other web browsers.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1179 Uzbl-browser also only provides ``handler scripts'' which wrap
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1180 external applications to provide the actual functionality.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1181 For instance, \fIwget\fP is used to download files and uzbl-browser
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1182 includes a script that calls wget with appropriate options in
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1183 a prepared environment.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1184 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1185 Modern web browsers are proud to have addons, plugins, modules,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1186 and so forth.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1187 This is their effort to achieve similar goals.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1188 But instead of using existing external programs, modern web browsers
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1189 include these functions.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1190
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1191 .H 2 "Discussion of the design
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1192 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1193 This section discusses uzbl in regard to the Unix Philosophy,
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1194 as identified by Gancarz.
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1195
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1196 .PP
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1197 .B "Make each program do one thing well" .
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1198 Uzbl tries to be a web browser and nothing else.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1199 The common definition of a web browser is highly influenced by
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1200 existing implementations of web browsers.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1201 But a web browser should be a program to browse the web, and nothing more.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1202 This is the one thing it should do.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1203 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1204 Web browsers should not, for instance, manage downloads;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1205 this is the job of download managers.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1206 A download manager is primary concerned with downloading files.
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1207 Modern web browsers provide download management only as a secondary feature.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1208 How could they do this job better than programs that exist only for
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1209 this very job?
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1210 And why would anyone want less than the best download manager available?
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1211 .PP
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1212 A web browser's job is to let the user browse the web.
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1213 This means, navigating through websites by following links.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1214 Rendering the \s-1HTML\s0 sources is a different job, too.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1215 In uzbl's case, this is covered by the webkit rendering engine.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1216 Handling audio and video content, PostScript, \s-1PDF\s0,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1217 and other such files are also not the job of a web browser.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1218 Such content should be handled by external programs
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1219 that were written to handle such data.
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1220 Uzbl strives to do it this way.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1221 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1222 Remember Doug McIlroy's words:
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1223 .I
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1224 ``Write programs that do one thing and do it well.
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1225 Write programs to work together.''
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1226 .R
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1227 .PP
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1228 The lesser tenet
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1229 .B "allow the user to tailor the environment
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1230 applies here as well.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1231 Previously, the question, ``Why would anyone want anything less than the
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1232 best program for the job?'' was put forward.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1233 But as personal preferences matter, it might be more important to ask:
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1234 ``Why would anyone want something other than his preferred program for
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1235 the job?''
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1236 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1237 Users typically want one program for a specific job.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1238 Hence, whenever one wishes to download something,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1239 the same download manager should be used.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1240 More advanced users might want to use one download manager in a certain
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1241 situation and another in a different situation;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1242 they should be able to configure it this way.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1243 With uzbl, any download manager can be used.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1244 To switch to a different one, a single line in a small handler script
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1245 needs to be changed.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1246 Alternatively, it would be possible to query which download manager to use by
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1247 reading a global file or an environment variable in the handler script.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1248 Of course, uzbl can use a different handler script as well.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1249 This simply requires a one line change in uzbl's configuration file.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1250 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1251 Uzbl neither has its own download manager nor depends on a specific one;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1252 hence, uzbl's browsing abilities will not be crippled by having
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1253 a bad download manager.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1254 Uzbl's download capabilities will be as good as the best
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1255 download manager available on the system.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1256 Of course, this applies to all of the other supplementary tools, too.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1257
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1258 .PP
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1259 .B "Use software leverage to your advantage" .
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1260 Uzbl is designed to be extended by external tools.
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1261 These external tools are usually wrapped by small handler shell scripts.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1262 Shell scripts form the basis for the glue which holds the various
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1263 parts together.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1264 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1265 The history mechanism of uzbl shall be presented as an example.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1266 Uzbl is configured to spawn a script to append an entry to the history
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1267 whenever the event of a fully loaded page occurs.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1268 The script to append the entry to the history is not much more than:
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1269 .DS
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1270 #!/bin/sh
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1271 file=/path/to/uzbl-history
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1272 echo `date +'%Y-%m-%d %H:%M:%S'`" $6 $7" >> $file
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1273 .DE
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1274 \f(CW$6\fP and \f(CW$7\fP expand to the \s-1URL\s0 and the page title,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1275 respectively.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1276 .PP
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1277 For loading an entry, a key is bound to spawn a load-from-history script.
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1278 The script reverses the history to have newer entries first,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1279 displays \fIdmenu\fP to let the user select an item,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1280 and then writes the selected \s-1URL\s0 into uzbl's command input pipe.
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1281 With error checking and corner case handling removed,
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1282 the script looks like this:
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1283 .DS
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1284 #!/bin/sh
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1285 file=/path/to/uzbl-history
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1286 goto=`tac $file | dmenu | cut -d' ' -f 3`
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1287 echo "uri $goto" > $4
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1288 .DE
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1289 \f(CW$4\fP expands to the path of the command input pipe of the current
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1290 uzbl instance.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1291
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1292 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
1293 .B "Avoid captive user interfaces" .
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1294 One could say that uzbl, to a large extent, actually \fIis\fP
36
4f2b2defbc8c some rework and more about uzbl design (ch05)
meillo@marmaro.de
parents: 35
diff changeset
1295 a captive user interface.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1296 But the difference from other web browsers is that uzbl is only
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1297 the captive user interface frontend (and the core of the backend).
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1298 Many parts of the backend are independent of uzbl.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1299 For some external programs, handler scripts are distributed with uzbl;
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1300 but arbitrary additional functionality can always be added if desired.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1301 .PP
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1302 The frontend is captive \(en that is true.
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1303 This is okay for the task of browsing the web, as this task is only relevant
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1304 to humans.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1305 Automated programs would \fIcrawl\fP the web, that means,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1306 read the source directly, including all semantics.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1307 The graphical representation is just for humans to understand the semantics
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1308 more intuitively.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1309
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1310 .PP
33
0bd43c4ad9f8 removed quotes and used bold instead of italic
meillo@marmaro.de
parents: 32
diff changeset
1311 .B "Make every program a filter" .
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1312 Graphical web browsers are almost dead ends in the chain of information flow.
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1313 Thus it is difficult to see what graphical web browsers should filter.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1314 Graphical web browsers exist almost exclusively to be interactively used
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1315 by humans.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1316 The only case in which one might want to automate the rendering function is
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1317 to generate images of rendered webpages.
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1318
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1319 .PP
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1320 .B "Small is beautiful"
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1321 is not easy to apply to a web browser because modern web technology
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1322 is very complex; hence, the rendering task is very complex.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1323 Unfortunately, modern web browsers ``have'' to consist of many thousand
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1324 lines of code,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1325 Using the toolchest approach and wrappers can help to split the browser
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1326 into several small parts, though.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1327 .PP
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1328 As of March 2010, uzbl-core consists of about 3\,500 lines of C code.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1329 The distribution includes another 3\,500 lines of Shell and Python code,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1330 which are the handler scripts and plugins like one to provide a modal
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1331 interface.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1332 Further more, uzbl makes use of external tools like
54
0a435d76b868 applied corrections by Dieter@be; and did spell checking
meillo@marmaro.de
parents: 53
diff changeset
1333 \fIwget\fP and \fIsocat\fP.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1334 Up to this point, uzbl looks pretty neat and small.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1335 The ugly part of uzbl is the rendering engine, webkit.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1336 Webkit consists of roughly 400\,000 (!) lines of code.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1337 Unfortunately, small rendering engines are not feasible anymore
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1338 due to the nature of the modern web.
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1339
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1340 .PP
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1341 .B "Build a prototype as soon as possible" .
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1342 Plaetinck made his code public right from the beginning.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1343 Discussion and development was, and still is, open to everyone interested,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1344 and development versions of uzbl can be obtained very easily from the
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1345 code repository.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1346 Within the first year of uzbl's existence, a new version was released
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1347 more often than once a month.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1348 Different forks and branches arose introducing new features which were
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1349 then considered for merging into the main branch.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1350 The experiences with using prototypes influenced further development.
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1351 Actually, all development was community driven.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1352 Plaetinck says, three months after uzbl's birth:
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1353 ``Right now I hardly code anything myself for Uzbl.
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1354 I just merge in other people's code, ponder a lot, and lead the discussions.''
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1355 .[
44
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
1356 lwn
46e34e433231 moved bibliography to external file
meillo@marmaro.de
parents: 42
diff changeset
1357 uzbl
35
f11406a85319 some minor rework; new content in ch05
meillo@marmaro.de
parents: 34
diff changeset
1358 .]
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1359
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1360
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1361 .H 2 "Problems
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1362 .LP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1363 Similar to \s-1MH\s0, uzbl suffers from being different.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1364 It is sad, but people use what they know.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1365 Fortunately, uzbl's user interface can be made to look and feel very similar
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1366 to the one of the well known web browsers,
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1367 hiding the internal differences.
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1368 But uzbl has to provide this similar look and feel to be accepted
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1369 as a ``normal'' browser by ``normal'' users.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1370 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1371 The more important problem here is the modern web.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1372 The modern web is simply broken.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1373 It has state in a state-less protocol, misuses technologies,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1374 and is helplessly overloaded.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1375 This results in rendering engines that ``must'' consist
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1376 of hundreds of thousands of lines of code.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1377 They also must combine and integrate many different technologies
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1378 to make our modern web accessible.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1379 This results, however, in a failing attempt to provide good usability.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1380 Website-to-image converters are almost impossible to run without
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1381 human interaction because of state in sessions, impossible
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1382 deep-linking, and ``unautomatable'' technologies.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1383 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1384 The web was misused in order to attempt to fulfill all kinds of wishes.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1385 Now web browsers, and ultimately users, suffer from it.
37
9282c4cea18c more about uzbl design
meillo@marmaro.de
parents: 36
diff changeset
1386
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
1387
51
a41320ca9ab6 changed some words
meillo@marmaro.de
parents: 50
diff changeset
1388 .H 2 "Summary
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1389 .LP
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1390 ``Uzbl is a browser that adheres to the Unix Philosophy'',
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1391 is how uzbl is seen by its authors.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1392 Indeed, uzbl follows the Unix Philosophy in many ways.
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1393 It consists of independent parts that work together,
45
ade392f024aa a lot of rework throughout the whole document
meillo@marmaro.de
parents: 44
diff changeset
1394 while its core is mainly a mediator which glues the parts together.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1395 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1396 Software leverage is put to excellent use.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1397 External tools are used, independent tasks are separated out
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1398 to independent parts and glued together with small handler scripts.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1399 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1400 Since uzbl roughly consists of a set of tools and a bit of glue,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1401 anyone can put the parts together and expand it in any desired way.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1402 Flexibility and customization are properties that make it valuable
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1403 for advanced users, but may keep novice users from understanding
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1404 and using it.
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1405 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1406 But uzbl's main problem is the modern web, which makes it very difficult
38
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1407 to design a sane web browser.
3628e9649046 wrote uzbl summary and did several spell fixes
meillo@marmaro.de
parents: 37
diff changeset
1408 Despite this bad situation, uzbl does a fairly good job.
32
d632de027d77 wrote about uzbl (ch05)
meillo@marmaro.de
parents: 31
diff changeset
1409
8
924b2ac2d477 new text about toolchest and shell (ch03)
meillo@marmaro.de
parents: 7
diff changeset
1410
48
40caeb9e9b25 switched to new header macro; cleaned up CW
meillo@marmaro.de
parents: 47
diff changeset
1411 .H 1 "Final thoughts
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1412
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1413 .LP
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1414 This paper explained why good design is important.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1415 It introduced the Unix Philosophy as a set of guidelines that encourage
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1416 good design in order to create good quality software.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1417 Then, real world software that was designed with the Unix Philosophy
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1418 in mind was discussed.
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1419 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1420 Throughout this paper, the aim was do explain \fIwhy\fP something
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1421 should be done the Unix way.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1422 Reasons were given to substantiate the claim that the Unix Philosophy
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1423 is a preferable way of designing software.
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1424 .PP
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1425 The Unix Philosophy is close to the software developer's point of view.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1426 Its main goal is taming the beast known as ``software complexity''.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1427 Hence it strives first and foremost for simplicity of software.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1428 It might appear that usability for humans is a minor goal,
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1429 but actually, the Unix Philosophy sees usability as a result of sound design.
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1430 Sound design does not need to be ultimately intuitive,
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1431 but it will provide a consistent way to access the enormous power
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1432 of software leverage.
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1433 .PP
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1434 Being able to solve some specific concrete problem becomes less and less
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1435 important as there is software available for nearly every possible task
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1436 today.
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1437 But the quality of software matters.
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1438 It is important that we have \fIgood\fP software.
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1439 .sp
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1440 .LP
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1441 .B "But why the Unix Philosophy?
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1442 .PP
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1443 The largest problem of software development is the complexity involved.
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1444 It is the only part of the job that computers cannot take over.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1445 The Unix Philosophy fights complexity, as it is the main enemy.
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1446 .PP
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1447 On the other hand,
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1448 the most unique advantage of software is its ability to leverage.
50
bb5901b17889 added final thoughts
meillo@marmaro.de
parents: 49
diff changeset
1449 Current software still fails to make the best possible use of this ability.
61
733f4fb03071 a huge bunch of improvements of my wordings by Andrew Antle
meillo@marmaro.de
parents: 57
diff changeset
1450 The Unix Philosophy concentrates on exploiting this great opportunity.
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1451
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1452
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1453 .bp
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1454 .TL
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1455 References
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1456 .LP
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1457 .XS
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1458 .sp .5v
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1459 .B
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1460 References
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1461 .XE
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1462 .ev r
42
303e8f449e77 added TOC and improved visual appearance
meillo@marmaro.de
parents: 41
diff changeset
1463 .nr PS -1
303e8f449e77 added TOC and improved visual appearance
meillo@marmaro.de
parents: 41
diff changeset
1464 .nr VS -1
0
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1465 .[
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1466 $LIST$
cecef8bfa812 early version, mainly the outline
meillo@marmaro.de
parents:
diff changeset
1467 .]
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1468 .nr PS +1
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1469 .nr VS +1
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1470 .ev
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1471
42
303e8f449e77 added TOC and improved visual appearance
meillo@marmaro.de
parents: 41
diff changeset
1472 .bp
47
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1473 .TL
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1474 Table of Contents
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1475 .LP
b6ae4a8ab1d3 improved references and some minor design issues
meillo@marmaro.de
parents: 46
diff changeset
1476 .PX no