Mercurial > docs > unix-phil
annotate unix-phil.ms @ 5:48f1f3465550
new content about interfaces and toolchests
author | meillo@marmaro.de |
---|---|
date | Sat, 13 Feb 2010 11:37:50 +0100 |
parents | c707b0c5c849 |
children | a6b837d822b7 |
rev | line source |
---|---|
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
1 .\".if n .pl 1000i |
0 | 2 .de XX |
3 .pl 1v | |
4 .. | |
5 .em XX | |
1 | 6 .\".nr PI 0 |
7 .\".if t .nr PD .5v | |
8 .\".if n .nr PD 1v | |
0 | 9 .nr lu 0 |
10 .de CW | |
11 .nr PQ \\n(.f | |
12 .if t .ft CW | |
13 .ie \\$1 .if n .ul 999 | |
14 .el .if n .ul 1 | |
15 .if t .if !\\$1 \&\\$1\f\\n(PQ\\$2 | |
16 .if n .if \\n(.$=1 \&\\$1 | |
17 .if n .if \\n(.$>1 \&\\$1\c | |
18 .if n .if \\n(.$>1 \&\\$2 | |
19 .. | |
20 .ds [. \ [ | |
21 .ds .] ] | |
1 | 22 .\"---------------------------------------- |
0 | 23 .TL |
24 Why the Unix Philosophy matters | |
25 .AU | |
26 markus schnalke <meillo@marmaro.de> | |
27 .AB | |
1 | 28 .ti \n(.iu |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
29 This paper discusses the importance of the Unix Philosophy in software design. |
0 | 30 Today, few software designers are aware of these concepts, |
3 | 31 and thus most modern software is limited and does not make use of software leverage. |
0 | 32 Knowing and following the tenets of the Unix Philosophy makes software more valuable. |
33 .AE | |
34 | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
35 .if t .2C |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
36 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
37 .FS |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
38 .ps -1 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
39 This paper was prepared for the seminar ``Software Analysis'' at University Ulm. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
40 Mentor was professor Schweiggert. 2010-02-05 |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
41 .br |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
42 You may get this document from my website |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
43 .CW \s-1http://marmaro.de/docs |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
44 .FE |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
45 |
0 | 46 .NH 1 |
47 Introduction | |
48 .LP | |
49 Building a software is a process from an idea of the purpose of the software | |
3 | 50 to its release. |
0 | 51 No matter \fIhow\fP the process is run, two things are common: |
52 the initial idea and the release. | |
3 | 53 The process inbetween can be of any shape. |
54 The the maintainance work after the release is ignored for the moment. | |
1 | 55 .PP |
0 | 56 The process of building splits mainly in two parts: |
57 the planning of what and how to build, and implementing the plan by writing code. | |
3 | 58 This paper focuses on the planning part \(en the designing of the software. |
59 .PP | |
60 Software design is the plan of how the internals and externals of the software should look like, | |
61 based on the requirements. | |
62 This paper discusses the recommendations of the Unix Philosphy about software design. | |
63 .PP | |
64 The here discussed ideas can get applied by any development process. | |
65 The Unix Philosphy does recommend how the software development process should look like, | |
66 but this shall not be of matter here. | |
0 | 67 Similar, the question of how to write the code is out of focus. |
1 | 68 .PP |
3 | 69 The name ``Unix Philosophy'' was already mentioned several times, but it was not explained yet. |
1 | 70 The Unix Philosophy is the essence of how the Unix operating system and its toolchest was designed. |
3 | 71 It is no limited set of rules, but what people see to be common to typical Unix software. |
1 | 72 Several people stated their view on the Unix Philosophy. |
73 Best known are: | |
74 .IP \(bu | |
75 Doug McIlroy's summary: ``Write programs that do one thing and do it well.'' | |
76 .[ | |
77 %A M. D. McIlroy | |
78 %A E. N. Pinson | |
79 %A B. A. Taque | |
80 %T UNIX Time-Sharing System Forward | |
81 %J The Bell System Technical Journal | |
82 %D 1978 | |
83 %V 57 | |
84 %N 6 | |
85 %P 1902 | |
86 .] | |
87 .IP \(bu | |
88 Mike Gancarz' book ``The UNIX Philosophy''. | |
89 .[ | |
90 %A Mike Gancarz | |
91 %T The UNIX Philosophy | |
92 %D 1995 | |
93 %I Digital Press | |
94 .] | |
95 .IP \(bu | |
96 Eric S. Raymond's book ``The Art of UNIX Programming''. | |
97 .[ | |
98 %A Eric S. Raymond | |
99 %T The Art of UNIX Programming | |
100 %D 2003 | |
101 %I Addison-Wesley | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
102 %O .CW \s-1http://www.faqs.org/docs/artu/ |
1 | 103 .] |
0 | 104 .LP |
1 | 105 These different views on the Unix Philosophy have much in common. |
3 | 106 Especially, the main concepts are similar for all of them. |
1 | 107 But there are also points on which they differ. |
108 This only underlines what the Unix Philosophy is: | |
109 A retrospective view on the main concepts of Unix software; | |
110 especially those that were sucessful and unique to Unix. | |
111 .PP | |
112 Before we will have a look at concrete concepts, | |
113 we discuss why software design is important | |
114 and what problems bad design introduces. | |
0 | 115 |
116 | |
117 .NH 1 | |
118 Importance of software design | |
119 .LP | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
120 Why should we design software at all? |
3 | 121 It is general knowledge, that a bad plan is better than no plan. |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
122 As stated earlier in this document, the process of building a software |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
123 means going from an idea to a release. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
124 The development process tells how to get from the idea to the release. |
3 | 125 Software design is the shape of the built software. |
126 This means, that different designs of a software would be different target points to go to. | |
127 Thus, the design of a software defines the global direction the development goes. | |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
128 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
129 It is not enough that the released software offers all requested functionality. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
130 It is a misbelief that only function matters. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
131 Building a software the first time is only a small part of the overall work. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
132 The larger part begins when the software is released for the first time |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
133 \(en maintainance and extending work.. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
134 This part soon covers more time than the time which was needed to build the software the first time. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
135 .\" cf. brooks? |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
136 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
137 The extendability and maitainability of a software highly depends on its design. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
138 Good design eases these tasks much. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
139 Bad design, in contrast, requires much more effort for maintaining and |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
140 extending the software. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
141 Developers should, for their own best, have maintainability and extendability in mind |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
142 when they design the software. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
143 .PP |
3 | 144 Users of the software, in contrast, do not care about maintainability and extendability, |
2
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
145 at least not directly. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
146 They care about usability and flexibility. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
147 They want the software to directly solve their problems. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
148 They want to be able to to use all its functions if they learned a few of them. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
149 They want to use the software for similar tasks. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
150 Software is successful if users enjoy using it. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
151 Good software design can offer great flexibility and usability. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
152 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
153 Good design matters for developers \fIand\fP for users. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
154 Hence both groups should care about good software design. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
155 Bad design limits the software in some way. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
156 It may still provide all requested function, but it will have worse quality, |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
157 and thus require more work effort for developers or frustrate users. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
158 .PP |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
159 Good software design is to the implementation like data structures are to algorithms |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
160 \(en if you get the former right, then you do not need to care about the latter, |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
161 it will simply go the right way. |
fbd7baf6a61f
added content about sw design; some formating
meillo@marmaro.de
parents:
1
diff
changeset
|
162 .\" cf. ??? ``good data, bad algos'' |
0 | 163 |
164 | |
165 | |
166 | |
167 .NH 1 | |
168 The Unix Philosophy | |
4 | 169 .LP |
170 The origins of the Unix Philosophy were already introduced. | |
171 This chapter explains the philosophy and shows concrete examples of its application. | |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
172 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
173 .SH |
4 | 174 Examples |
0 | 175 .LP |
4 | 176 Following are some examples to demonstrate how applied Unix Philosophy feels like. |
177 Knowledge of using the Unix shell is assumed. | |
178 .PP | |
179 Counting the number of files in the current directory: | |
180 .DS | |
181 .CW | |
182 ls | wc -l | |
183 .DE | |
184 The | |
185 .CW ls | |
186 command lists all files in the current directory, one per line, | |
187 and | |
188 .CW "wc -l | |
189 counts how many lines they are. | |
190 .PP | |
191 Counting all files that do not contain ``foo'' in their name: | |
192 .DS | |
193 .CW | |
194 ls | grep -v foo | wc -l | |
195 .DE | |
196 Here, the list of files is filtered by | |
197 .CW grep | |
198 to remove all that contain ``foo''. | |
199 The rest is the same as in the previous example. | |
200 .PP | |
201 Finding the five largest entries in the current directory. | |
202 .DS | |
203 .CW | |
204 du -s * | sort -nr | sed 5q | |
205 .DE | |
206 .CW "du -s * | |
207 returns the recursively summed sizes of all files | |
208 -- no matter if they are regular files or directories. | |
209 .CW "sort -nr | |
210 sorts the list numerically in reverse order. | |
211 Finally, | |
212 .CW "sed 5q | |
213 quits after it has printed the fifth line. | |
214 .PP | |
215 The presented command lines are examples of what Unix people would use | |
216 to get the desired output. | |
217 There are also other ways to get the same output. | |
218 It's a user's decision which way to go. | |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
219 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
220 .SH |
4 | 221 Pipes |
0 | 222 .LP |
4 | 223 The examples show that a lot of tasks on a Unix system |
224 are accomplished by combining several small programs. | |
225 The connection between the single programs is denoted by the pipe operator `|'. | |
226 .PP | |
227 Pipes, and their extensive and easy use, are one of the great | |
228 achievements of the Unix system. | |
229 Pipes between programs have been possible in earlier operating systems, | |
230 but it has never been a so central part of the concept. | |
231 When, in the early seventies, Doug McIlroy introduced pipes for the | |
232 Unix system, | |
233 ``it was this concept and notation for linking several programs together | |
234 that transformed Unix from a basic file-sharing system to an entirely new way of computing.'' | |
235 .[ | |
236 %T Unix: An Oral History | |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
237 %O .CW \s-1http://www.princeton.edu/~hos/frs122/unixhist/finalhis.htm |
4 | 238 .] |
239 .PP | |
240 Being able to specify pipelines in an easy way is, | |
241 however, not enough by itself. | |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
242 It is only one half. |
4 | 243 The other is the design of the programs that are used in the pipeline. |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
244 They have to be of an external shape that allows them to be be used in such a way. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
245 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
246 .SH |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
247 Interface architecture |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
248 .LP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
249 Unix is, first of all, simple: Everything is a file. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
250 Files are sequences of bytes, without any special structure. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
251 Programs should be filters, which read a stream of bytes from ``standard input'' (stdin) |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
252 and write a stream of bytes to ``standard output'' (stdout). |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
253 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
254 If our files \fIare\fP sequences of bytes, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
255 and our programs \fIare\fP filters on byte streams, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
256 then there is exactly one standardized interface. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
257 Thus it is possible to combine them in any desired way. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
258 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
259 Even a handful of small programs will yield a large set of combinations, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
260 and thus a large set of different functions. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
261 This is leverage! |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
262 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
263 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
|
264 then the set of different functions is greatest. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
265 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
266 Now, the Unix toolchest is a set of small programs that |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
267 are filters on byte streams. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
268 They are to a large extend unrelated in their function. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
269 Hence, the Unix toolchest provides a large set of functions |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
270 that can be accessed by combining the programs in the desired way. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
271 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
272 .SH |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
273 Advantages of toolchests |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
274 .LP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
275 A toolchest is a set of tools. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
276 Instead of having one big tool for all tasks, one has many small tools, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
277 each for one task. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
278 Difficult tasks are solved by combining several of the small, simple tools. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
279 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
280 It is easier and less error-prone to write small programs. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
281 It is also easier and less error-prone to write a large set of small programs, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
282 than to write one large program with all the functionality included. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
283 If the small programs are combinable, then they offer even a larger set |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
284 of functions than the single large program. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
285 Hence, one gets two advantages out of writing small, combinable programs. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
286 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
287 There are two drawbacks of the toolchest approach. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
288 First, one simple, standardized, unidirectional Interface has to be sufficient. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
289 If one feels the need for more ``logic'' than a stream of bytes, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
290 then a different approach might be of need, or, more likely, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
291 he just did not came to a design where a stream of bytes is sufficient. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
292 The other drawback of a toolchest affects the users. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
293 A toolchest is often more difficult to use for novices. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
294 It is neccessary to become familiar with each of the tools, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
295 to be able to use the right one in a given situation. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
296 Additinally, one needs to combine the tools in a senseful way on its own. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
297 This is like a sharp knive \(en it is a powerful tool in the hand of a master, |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
298 but of no good value in the hand of an unskilled. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
299 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
300 Luckily, the second drawback can be solved easily by adding wrappers around the single tools. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
301 Novice users do not need to learn several tools if a professional wraps |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
302 the single commands into a single script. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
303 Note that the wrapper script still calls the small tools; |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
304 the wrapper script is just like a skin around. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
305 No complexity is added this way. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
306 .PP |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
307 A wrapper script for finding the five largest entries in the current directory |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
308 could look like this: |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
309 .DS |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
310 .CW |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
311 #!/bin/sh |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
312 du -s * | sort -nr | sed 5q |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
313 .DE |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
314 The script itself is just a text file that calls the command line |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
315 a professional user would type in directly. |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
316 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
317 |
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
318 |
4 | 319 |
320 | |
0 | 321 |
322 .NH 2 | |
5
48f1f3465550
new content about interfaces and toolchests
meillo@marmaro.de
parents:
4
diff
changeset
|
323 foo |
0 | 324 .LP |
325 standalone vs. tool chain | |
326 .LP | |
327 software leverage | |
328 .LP | |
329 possiblities | |
330 | |
331 .NH 2 | |
332 Results | |
333 .LP | |
334 The unix phil is an answer to the sw design question | |
335 .LP | |
336 tool chains empower the uses of sw | |
337 | |
338 .NH 1 | |
339 Case study: nmh | |
340 | |
341 .NH 2 | |
342 History | |
343 .LP | |
344 MH, nmh. | |
345 They are old. | |
346 | |
347 .NH 2 | |
348 Contrasts to similar sw | |
349 .LP | |
350 vs. Thunderbird, mutt, mailx, pine | |
351 .LP | |
352 flexibility, no redundancy, use the shell | |
353 | |
354 .NH 2 | |
355 Gains of the design | |
356 .LP | |
357 | |
358 .NH 2 | |
359 Problems | |
360 .LP | |
361 | |
362 .NH 1 | |
363 Case study: uzbl | |
364 | |
365 .NH 2 | |
366 History | |
367 .LP | |
368 uzbl is young | |
369 | |
370 .NH 2 | |
371 Contrasts to similar sw | |
372 .LP | |
373 like with nmh | |
374 .LP | |
375 addons, plugins, modules | |
376 | |
377 .NH 2 | |
378 Gains of the design | |
379 .LP | |
380 | |
381 .NH 2 | |
382 Problems | |
383 .LP | |
384 broken web | |
385 | |
386 .NH 1 | |
387 Final thoughts | |
388 | |
389 .NH 2 | |
390 Quick summary | |
391 .LP | |
392 good design | |
393 .LP | |
394 unix phil | |
395 .LP | |
396 case studies | |
397 | |
398 .NH 2 | |
399 Why people should choose | |
400 .LP | |
401 Make the right choice! | |
402 | |
403 .nr PI .5i | |
404 .rm ]< | |
405 .de ]< | |
406 .LP | |
407 .de FP | |
408 .IP \\\\$1. | |
409 \\.. | |
410 .rm FS FE | |
411 .. | |
412 .SH | |
413 References | |
414 .[ | |
415 $LIST$ | |
416 .] | |
417 .wh -1p |