• No results found

Assignment 1 Respecting assertions and invariants

N/A
N/A
Protected

Academic year: 2021

Share "Assignment 1 Respecting assertions and invariants"

Copied!
18
0
0

Loading.... (view fulltext now)

Full text

(1)

University of New South Wales COMP 6721

(In-)Formal Methods: The Lost Art 2020 Term 2

Assignment 1 —

Respecting assertions and invariants

Due 9:00pm Friday 3 July 2020 (end Week 5)

1

Typsetting a paragraph in L

A

TEX style

LATEX typesets paragraphs so that they fill the horizontal space exactly, both the

left- and right-hand sides (as for this paragraph). It does that by putting just enough blank space between the words to get the right width overall. That’s the program we will be writing in this assignment, more or less — but our program will only approximate LATEX’s approach, because we will use a fixed-width font.

As you will see, however— the assignment is not about how to typeset. It’s abouthow to write programs using assertions and invariants. Typesetting just happens to be an intricate-enough problem to make it interesting.

Figure 1(a) shows how some text in a fixed-width font is made into a para-graph exactly 37 columns wide (except for the last line).1 The “greedy”

type-setting (at left) fills each line as much as possible before moving on to the next. Then enough extra space is added to every line except the last, between words, so that it finishes exactly at the right-hand margin.

In general,greedyalgorithms take decisions based on the “current” situation, and do not look ahead to see whether a di↵erent decision now might lead to a better outcome later on.

In Fig. 1(b) the same text is typeset (at right), but now using a “clever” algo-rithm (dynamic programming) that optimises (minimises) the average amount of extra space that must be added between words in each line.

In this assignment you will program a clever paragraph-maker inPython3.

Be sure however to read Sec. 8 below carefully — it describes how the assignment will be marked (including penalties, if applicable, for late submission).

1The text is the abstract of

Donald E. Knuth and Michael F. Plass. Breaking Paragraphs into Lines. Software Practice and Experience 11(1119–84), 1981.

which describes the way that TEX and (thus) LATEX make paragraphs. 1

(2)

How L

A

TEX sets paragraphs

abstract from Donald E. Knuth and Michael F. Plass.

Breaking Paragraphs into Lines. This paper discusses a new approach

to the problem of dividing the text

of a paragraph into lines of approximately equal length. Instead of simply making decisions one line at a time, the method considers the paragraph as a whole, so that the final appearance of a given line might be influenced by the text on succeeding lines. A system based on three simple primitive concepts called boxes, glue, and penalties provides the ability to deal satisfactorily with a wide variety of typesetting problems in a unified framework, using a single algorithm that determines optimum breakpoints. The algorithm avoids backtracking by a judicious use of the techniques of dynamic programming. Extensive computational experience confirms that the approach is both efficient

and effective in producing

high-quality output. The paper concludes with a brief history of line-breaking methods, and an appendix presents a simplified algorithm that requires comparatively few resources.

1234567890123456789012345678901234567 (a) Greedy strategy: cost14/3 = 4.67

This paper discusses a new approach to the problem of dividing the

text of a paragraph into lines of approximately equal length. Instead of simply making decisions one line at a time, the method considers

the paragraph as a whole, so

that the final appearance of a given line might be influenced by the text on succeeding lines. A system based on three simple primitive concepts called boxes, glue, and penalties provides the ability to deal satisfactorily with a wide variety of typesetting problems in a unified framework, using a single algorithm that determines optimum breakpoints. The algorithm avoids backtracking by a judicious use of the techniques of dynamic programming. Extensive computational experience confirms that the approach is both efficient and effective in producing high-quality output. The paper concludes with a brief history of line-breaking methods, and an appendix presents a simplified algorithm that requires comparatively few resources.

1234567890123456789012345678901234567 (b) Clever strategy: cost14/5 = 2.80 The paragraph above is set in a column of 37 spaces in both cases: but a greedy strategy is used on the left and a clever one on the right.

The greedy paragraph took textinto the second line “because it could”, but paid for it later with extra white space in the last ten lines.

Thecost of a typesetting is the maximum over all lines (except the last) of the average white space between adjacent words on each line separately.

(3)

2

Assertions and invariants

Although this assignment asks you to write the clever, dynamic-programming algorithm, and test it, it is not about that algorithm itself, nor is it about dynamic programming. (You will learn more about those things in other courses.)

This assignment is about how to use assertions, invariants and static rea-soning to write complicated programs and get them right. The dynamic pro-gramming here is just an example of where it really helps. Thus there won’t be a “test suite” to check that your program is working correctly, and it won’t be run through an “auto marker”. Instead, it’s your actual source code that will be marked, as for an an essay, and your mark will depend on how well you have written it. (And that is normal for this course.)

Here therefore are some key points in the way the assignment is presented: (a) Your code will be written in Python3.2 (NotC, not Java, not anything

else.) That’s partly to make it feasible to mark, but also because of (b). (b) You are given (below) an overall program structure to start with (written in

Python3), and it will have –as comments– someassertionswritten already. (c) Your actual programming job will be to “Fill in the code between the

as-sertions.” That’s where you will gain your marks.

(d) Because of (b,c), your program will use the variable names chosen for you already. If you need extra variables, of course you can name them yourself. (There should be very few.) The principal ones must remain as given. (e) The code templates that contain questions (Figs. 3,4,5) you should type in

yourself — really. They won’t be in a downloadable file. (You don’t have to type in the comments; but you might consider doing some of them anyway.) That’s not only to ease the version-control problem between any extra files and this.texfile, but as well for the more important reason that, because typing takes time, you will be forced to think about what you are doing. This whole assignment is about how to think e↵ectively as you program; and typing (rather than swiping,) is one of the tricks.

2Python2is acceptable; but it is no longer supported. The code here is inPython3. Do not use anything other thanPython.

(4)

3

The general strategy of this algorithm

The program will be given a line-widthM and a file of blank-separated words, over as many lines as you like. Line-breaks and multiple spaces are treated as blanks. The program will place the words in a sequencewdsof character strings. The output of the program will be a paragraph, built fromwds, in which all lines (except possibly the last) are exactlyMcharacters long, achieved by adding blanks between words where necessary. The program prints the paragraph.

And that paragraph will be ofoptimal (minimum) cost, where the cost of a single line is the average number of blanks that are needed between each adjacent pair of words and the overall cost is the largest cost of any single line (excluding the last line). For example, if the words on a line have lengths 4,5,9,1,3,8 (as in the first line of Fig. 1) and the line-widthMis 37, then 37 (4+5+9+1+3+8) = 7 blanks must be distributed over the 5 inter-word spaces. Since we can use only whole blanks, we might mix 1- and 2-blank spaces in the pattern 1,2,1,2,1. Or perhaps 2,2,1,1,1; or 1,1,1,2,2. Butgaps-lengths must not di↵er by more than one within a single line. Thus 1,1,1,1,3 is not allowed.

The program will be in three principal parts:

Part (1) Starting from the end of the list of words, calculate the minimum possible cost of making a paragraph for successively longer suffixes. (That’s the dynamic-programming part.)

Part (2) Use the the results of (1), starting from the beginning of the list of words, to split the words into lines such that each line fits within the line-width and the cost of that line is no worse than the minimum achievable for the whole paragraph.

Part (3) Use the results of (2) to print out the actual paragraph, complete with the extra blanks necessary so that each line takes exactlyMcharacters. And there is a Part (0) part that is just concerned with reading the input.

4

Part (0) — Read the input.

The Python3 code of Fig. 2 reads the list of words from standard input, and the line width from the command line. Enter it and test it. (You may copy-and-paste this part from thepdf; but you will need to tidy it up.)

Test your code by printing out what (you think) you have read in and have taken from the command line: wdsandwlsandM.

You do not have to hand in this part on its own; but youdo have to hand it in as part of the larger program, as explained in later parts of the assignment.

(5)

from sys import argv,stdin ### Paragraph.py --- Synopsis #

# % python3 Paragraph.py WIDTH < WORDS #

# The column WIDTH is given as the only argument; WORDS come from standard # input, over as many lines as it takes. Multiple blanks and linefeeds # are treated as a single blank, and wholly blank lines are ignored. # EOF from the terminal is ^D (as usual).

#

# The program prints WORDS in lines of exactly WIDTH characters, except # possibly the last. It minimises the largest average-per-line white space # between words in order to achieve right justification, that is to make # a straight right margin.

#

# Although the average white space needed in a line might not be a # whole number of blanks, the program simulates that in a fixed-width # font by using a mixture of "just more than" and "just less than" # inter-word gaps.

### Part (0) --- Collect input.

# Get the line-width from command line.

assert len(argv)==2, "\n%s: Exactly one argument expected.\n"%argv[0]+ \ "\nusage: python3 %s WIDTH < WORDS"%argv[0]

M= int(argv[1])

# Get the words and their lengths from standard input into wds and wls. # Invariant: wds contains all the words read so far.

# and wds contains their lengths. wds,wls= [],[]

for line in stdin.readlines():

for w in line.split(): wds.append(w); wls.append(len(w)) # Check that the input satisfies the program’s precondition. assert wds!=[], "The list of words may not be empty."

for w in wls: assert w<=M, "Each word must be able to fit on a line alone." N= len(wds) # N words in total.

print("wds is",wds) print("wls is",wls) print("M is",M)

print("There are",N,"words in total.")

### Do not hand this file in on its own; DO test it. ###

You may copy-and-paste the code here directly from thepdf— but you will have to fix some white-space copying errors afterwards. Only a few.

(6)

% If wds[l:h] is a single word, then the line made % from it has either 1 gap (at the end of the word, say) % or no gap at all (if the word is of length M exactly). % In both those cases, the Cost should be the number % of blanks needed to make that single word take up % M spaces.

Ignore the "exactly fits" case in your coding here; that is, act as if an exactly fitting word does have 1 gap. By good fortune, the function will work anyway.

Once the assignment's deadline has passed, I will change

this function body. ("Good fortune" is not good enough for us :-)

(7)

5

Part (1) — Calculate the minimum costs

The dynamic-programming aspect of this algorithm is that in order to minimise (optimise) the cost of the whole paragraph, we actually find the optimum costs for all its suffixes along the way. Thus we introduce a sequence of real numbers

cs[0:N](forcosts), and the postcondition of this part will be that

For all n in [:N] we have # [:N] is Python for 0,1,...,.N-1 . cs[n] == "the optimal achievable cost of typsettting

suffix wds[n:] in line-width M."

That means that in particularcs[0]will be the optimal achievable cost for the whole paragraph.

A code skeleton for this is shown in Fig. 3. The bluetext is the assertions (including invariants) that you must respect when you write your code. Typing them in as well will help you to make sure that you have. Theredtext identifies the places where you must supply code.

For Part (1), fill in the missing portionsAAA· · ·IIIof the skeleton given in Fig. 3; the number after the three letters is the marks available. Type it in; and test it together with the code you used for Part (0) by including theprint cs

at the end to check those values against your test inputs.

/

1

Put your code for Parts (0,1) into a single (text) file Para1-yourZID.py, whereyourZIDis your student number. Include your name and student num-ber as a comment at the beginning of the file. That is the first file that you will submit for marking — see Sec. 8.3. It will be marked based on how well your added red code in this part (that replaced AAA· · ·III) respects the blue assertions in Fig. 3. If it does, then it should (also) produce the correct output as shown by theprint cs—but do not hand your tests in.

Do make sure your program “so far” compiles and runs, however, since I might test it myself if I am unsure the assertions are being respected. And –obviously– do not change the assertions or change any variable names.

6

Part (2) — Calculate the paragraph lines

In Part (2) the results of Part (1), thecssequence, are used to split the original listwdsof words into the separate lines that will achieve the optimal-cost layout for the paragraph overall.

This time we start from the front of wls, making the lines of the eventual paragraph one by one. For each of those lines we take as many words as are nec-essary to reach a “rest of paragraph” point where the overall cost is sufficiently low. (This is a greedy algorithm, not a dynamic-programming algorithm.)

(8)

Fill in the missing portionsJJJ· · ·NNNof the skeleton given in Fig. 4. Type it in; and test it in combination with your earlier code printing cs andwlss

and checking that against your test input.

/

2

Put your code for Parts (0,1,2) into a (text) filePara2-yourZID.pyby itself. Include your name and student number as a comment at the beginning of the file. You will submit that for marking — see Sec. 8.3.

It will be marked based on how well your added red code in Part (3) respects the blue assertions in Fig. 4. Do not hand your tests in.

Note in particular that Answer MMM asks not for code, but for an answer in prose: for this one, statewhy the statementi= i+1maintains the invariant

Inv3and add it as a comment to your program.

7

Part (3) — Print the paragraph

The final part of this program prints out the formatted paragraph, filling every line (expect the last) so that it takes exactly M spaces. Given that thelengths of the paragraph’s lines are now available in wlss, that seems an easy job: something like

for ws in wlss: l= len(ws)

ls,wds= wds[:l],wds[l:]

print ls # Blanks needed here.

would do... sort of. Except for the “blanks needed here” issue. The main job this part is theMakeLinefunction, which inserts those blanks. In that function there are, as usual, things to fill in: fromOOOtoRRR.

An important note: you are not required to fill in the needed blanks in any particular order: you can put all longer ones at the front, or at the back. It doesn’t matter. But you must not have gaps whose lengths di↵er by more than one within a single line. Thus for example to get 7 blanks into 3 gaps you can have 2,2,3 or 2,3,2 or 3,2,2 — but you cannot have 1,2,4 or similar. The second half of this part also has a loop, but it’s so trivial –print every line– that it probably doesn’t need assertions/invariants so much. And so, in this part only, we have usedMeaningfulVariableNames.

MVN is indeed good style, but only up to a point. It makes the program more verbose — and if you have to do calculations with the assertions (especially if they’re on paper), then that can become a bit tedious and, indeed, error prone.

(9)

The "forall" should not be there.

(10)
(11)

### Part (3b) --- # Construct the lines of the paragraph, # one-by-one, and print them out. maxBlanks,lineCount= 0,0 # For reporting only. for ws in wlss:

ls,wds= wds[:len(ws)],wds[len(ws):] # Get the actual words. gapsHere= len(ws)-1

if wds==[]: line= MakeLine(ls,gapsHere); print(line) # Last line. else:

blanksNeededHere= M-sum(ws)

line= MakeLine(ls,blanksNeededHere) maxBlanks= max(maxBlanks, \

blanksNeededHere/gapsHere \

if len(ws)>1 else blanksNeededHere) print("%s %d/%d = %.2f." % ( \

line, blanksNeededHere, \

gapsHere,blanksNeededHere/gapsHere \ if len(ws)>1 else blanksNeededHere) )

lineCount= lineCount+1 print(" "*M+"^")

print(("==> 567890"+("1234567890"*floor(M/10)))[:M]+"|")

print("==> The maximum (fractional) white space for column width" + \ " %3d was %.2f over %d lines." % \

(M, maxBlanks,lineCount))

### Hand this in, together with the code from Figs. 2,3,4,5 ### as a single Para3-yourZID.py file.

### It is your complete program.

You may copy-and-paste this.

(12)

8

How this assignment will be marked

Do not spend any time in Secs. 9, 10 unless you have completed the main as-signment. You can get full marks for correct answers toAAA· · ·RRR.

8.1

Testing — must be done; but who does it?

With luck, it will be you and not me: you are expected to test your program –of course– butdo not submit your test results. Still, if you would like for example to see for yourself how your program handles a fixed input over varying column widths, use something like

for ((M= 0; M <= maximumWidth; M++))

do python3 Para3_z1234567.py $M < inputFile | tail -1

done

inzsh(the “zed shell”). Other shells can do similar.

Each of the three.pyfiles still should have in it the test printcommands that you used for testing it yourself. That way I can test it too — if I have to. (Seehttp://www.cs.utexas.edu/users/EWD/ewd02xx/EWD249.PDFon p7.)

8.2

What will get marks — and what won’t

AAA 3 BBB 2 CCC 1 DDD 2 EEE 5 FFF 2 GGG 4 HHH 2 III 1 JJJ 2 KKK 2 LLL 6 MMM 4 NNN 3 OOO 4 PPP 2 QQQ 2 RRR 3 SSS · · · ⇠0 ZZZ P 50

Here’s how to get good marks: If you were asked to fill-inAAAandBBBfor the program

# N>=0 n,s= N,0

while AAA: # INV: s==sum(as[n:])

BBB

# s==sum(as)

and you answered

# Answer Prog1 # N>=0

n,s= N,0

while n!=0: # INV: s==sum(as[n:]) n= n-1

s= s+as[n] # s==sum(as)

then you would get full marks. Your answer need not be coloured; but the replacements n!=0 and n= n-1; s=s+as[n] you gave for AAA and BBB must respect theblue assertionsthat were there already.

(13)

Here’s how to lose marks: If on the other hand your answer had been this program (which does correctly calculate the sum)

# Answer Prog2 # N>=0

n,s= 0,0

while n!=N: # INV: s==sum(as[n:]) s,n= s+as[n],n+1

# s==sum(as)

then your marks would be considerablylessthan full. For even thoughProg2

satisfies the Hoare triple

{N>=0} Prog2 {s==sum(as)}

it does not respect the invariants==sum(as[n:]) that was supplied.

In “real life” you could of course change the invariant to something that

Answer 2doesrespect,4and indeed in the long run that’s the point: you must

find your own invariants. But in this assignment you are not allowed to change the assertions— for learning to respect assertions (ultimately, your own or your team mates’) is what this assignment is practising.

Thus the program fragments you fill in must respect theblue assertionsthat are supplied: if they don’t, you risk losing marks even if your program is correct. Each three-letter question identifier fromAAAup toRRRcomes with a small number indicating how many marks it is worth. Their total is 50, and your mark will contribute 30% to the overall course mark.

The question identifiers from SSSto ZZZhave no mark indicators because they are optional, just for those who are interested in looking further. Ex-ceptionally good work there might, however, gain a few marks extra in the assignment overall. But you can get 100% for fully correct work onAAAup to RRRalone.

8.3

Frequently Asked Questions

• What happens if I change the assertions? If you think an assertion is wrong, contact the lecturer (me)privately. If you change the assertion, you risk losing marks.

• What happens if my program works but it does not respect the assertions? If your program does not respect the assertions, then you cannot be sure it is working. At best, your tests have established only that it probably works. Any of your answers that don’t respect the assertions that surround them risk receiving few marks.

• What happens if my program respects the assertions, but doesn’t work?

// Can’t happen. If your program respects the assertions, then itmust work. 5

4What would it be?

(14)

• What exactly must I hand in, by when, and how?

/

(1,2,3)

You must hand in the files asked for in the marginal indications 1,2,3, that is three text-filesPara1-yourZID.py,Para2-yourZID.pyandPara3-yourZID.py. Zip them together into a single zip-fileCOMP6721-Ass1-yourZID.zipand sub-mit it following the instructions that will be given nearer the time. (It will probably be via Moodle.)

Be careful to use exactly the file names given, and to make sure that your zIDand name occurs withineach file as a Python comment) as well as having thezID within the file names exactly as shown — please. Random file names cause confusion, lead to extra work for the marker and can cause errors.

The assignment submission is due at9:00pm on Friday 3 July 2020, the end of Week 5. Late submissions will be mark-capped at 85% up to one day; for two days at 75%, three days at 65% and four days at 50%. After four days late, submissions are no longer accepted.

9

Extras

There are no marks “officially” available for this section (or the next); thus don’t attempt it unless you have completed the assignment proper. Still, there could be a small benefit available if some of this is really well done.

9.1

Greedy typesetting

If you’d like to compare your program with the (much simpler) greedy approach, you can change just your answer to Part (2) so that it fills lines greedily, ignoring Part (1) — which you can leave just sitting there, since it does no harm.

What change would you make? SSS

9.2

Even spacing

In MakeLines the blanks are distributed over the line to make it exactly M

characters long. And some white-spaces will be longer than others. How would you make all the longer white-spaces come before the shorter ones? TTTOr all longer ones come after the shorter ones? UUU

What about making the distribution of longer and shorter white-spaces be more or less even, as in Fig. 1? VVV

5. . . unless of course the assertions themselves are wrong. I have tried to make sure they are right.

(15)

9.3

Number of lines used

Minimising the white space has a disadvantage, that in some case more lines might be used overall than for the greedy strategy. (Look ahead to Sec. 10.) That is, a greedy strategy might not be pretty, but it probably does save paper. Can you see why our current code doesn’t necessarily use as few lines as possible, even though it minimises average white space? WWW

10

Epilogue: a very long paragraph

As for Sec. 9, there are no marks “officially” available for this section; again, don’t attempt it unless you have completed the assignment proper. Still, there could be a small benefit available if some if this is really well done.

The text in the figures below comes from Moby Dick;6I found it by looking

for the longest sentence in English that (1) would still fit on one page and (2) came from a book I had heard of. You might like to try others.7 In Fig. 7 it

is typeset with the greedy strategy, and a large white space occurs (13 blanks) near the end; but at least the fewest number of lines (102) is used. Can you explain rigorously why the greedy strategy is guaranteed to use the fewest lines? (Of course it’s “obvious” — but can you be rigorous about it?)XXX

In Fig. 8 the code of this assignment is used, in particular Part (2). It takes more lines, but the average white space is drastically reduced: the cost is reduced from 13 to 3.50.

In Fig. 9 the code of this assignment is again used, except that Part (2) is modified to take thelongest line possble consistent with minimising the white space (which, being minimum, must be the same as for Fig. 8). However it takes fewerlines than Fig. 8 — though still more than Fig. 7. (See Sec. 9.3.)

Can you modify our Part (2) to achieve the e↵ect of Fig. 9? Do it by proposing a revisedInv4first — of course.YYYWhat’s your new loop?ZZZ

Carroll Morgan 8 June 2020 6Moby-Dick; Or, The Whale. Herman Melville. Harper & Brothers, 1851.

7https://thejohnfox.com/long-sentences/

(16)

Though in many natural objects, whiteness refiningly

enhances beauty, as if

imparting some special virtue of its own, as in marbles, japonicas, and pearls; and though various nations have

in some way recognised a

certain royal preeminence in - this hue; even the barbaric,

grand old kings of Pegu

placing the title ’Lord of the White Elephants’ above all their other magniloquent ascriptions of dominion; and

the modern kings of Siam

unfurling the same snow-white

quadruped in the royal

standard; and the Hanoverian - flag bearing the one figure of a snow-white charger; and the great Austrian Empire,

Caesarian, heir to

overlording Rome, having for the imperial colour the same imperial hue; and though this pre-eminence in it applies to the human race itself, giving

the white man ideal

- mastership over every dusky tribe; and though, besides, all this, whiteness has been

even made significant of

gladness, for among the

Romans a white stone marked a

joyful day; and though in

other mortal sympathies and symbolizings this same hue is

made the emblem of many

- touching, noble things

---the innocence of brides, the

benignity of age; though

among the Red Men of America the giving of the white belt

of wampum was the deepest

pledge of honour; though in

many climes, whiteness

typifies the majesty of

Justice in the ermine of the - Judge, and contributes to the

daily state of kings and

queens drawn by milk-white steeds; though even in the higher mysteries of the most august religions it has been made the symbol of the divine spotlessness and power; by the Persian fire worshippers, the white forked flame being

held the holiest on the

-altar; and in the Greek

mythologies, Great Jove

himself being made incarnate

in a snow-white bull; and

though to the noble Iroquois, the midwinter sacrifice of the sacred White Dog was by far the holiest festival of

their theology, that

spotless, faithful creature -being held the purest envoy they could send to the Great

Spirit with the annual

tidings of their own

fidelity; and though directly

from the Latin word for

white, all Christian priests derive the name of one part of their sacred vesture, the

alb or tunic, worn beneath

-the cassock; and though among the holy pomps of the Romish

faith, white is specially

employed in the celebration of the Passion of our Lord; though in the Vision of St. John, white robes are given

to the redeemed, and the

four-and-twenty elders stand clothed in white before the -great-white throne, and the Holy One that sitteth there white like wool; yet for all these accumulated associations, with whatever is sweet, and honourable, and sublime, there yet lurks an

elusive something in the

innermost idea of this hue, which strikes more of panic -to the soul than that redness which affrights in blood.

Line-width 29, cost13, lines used 102.

(17)

Though in many natural objects, whiteness refiningly

enhances beauty, as if

imparting some special virtue of its own, as in marbles, japonicas, and pearls; and though various nations have

in some way recognised

a certain royal preeminence

- in this hue; even the

barbaric, grand old kings of Pegu placing the title ’Lord of the White Elephants’ above all their other magniloquent

ascriptions of dominion;

and the modern kings of

Siam unfurling the same

snow-white quadruped in the

royal standard; and the

- Hanoverian flag bearing the one figure of a snow-white

charger; and the great

Austrian Empire, Caesarian,

heir to overlording Rome,

having for the imperial

colour the same imperial hue; and though this pre-eminence

in it applies to the

human race itself, giving the

- white man ideal mastership

over every dusky tribe;

and though, besides, all

this, whiteness has been

even made significant of

gladness, for among the

Romans a white stone marked

a joyful day; and though

in other mortal sympathies and symbolizings this same

- hue is made the emblem

of many touching, noble

things --- the innocence

of brides, the benignity

of age; though among the

Red Men of America the

giving of the white belt

of wampum was the deepest

pledge of honour; though

in many climes, whiteness

- typifies the majesty of

Justice in the ermine of

the Judge, and contributes

to the daily state of

kings and queens drawn

by milk-white steeds; though even in the higher mysteries of the most august religions it has been made the symbol of the divine spotlessness

and power; by the Persian

-fire worshippers, the white

forked flame being held

the holiest on the altar;

and in the Greek mythologies, Great Jove himself being made

incarnate in a snow-white

bull; and though to the

noble Iroquois, the midwinter

sacrifice of the sacred

White Dog was by far

-the holiest festival of -their

theology, that spotless,

faithful creature being held the purest envoy they could

send to the Great Spirit

with the annual tidings

of their own fidelity; and

though directly from the

Latin word for white, all

Christian priests derive the

-name of one part of their

sacred vesture, the alb

or tunic, worn beneath the

cassock; and though among

the holy pomps of the Romish

faith, white is specially

employed in the celebration of the Passion of our Lord;

though in the Vision of

St. John, white robes are

-given to the redeemed, and the four-and-twenty elders stand clothed in white before the great-white throne, and

the Holy One that sitteth

there white like wool; yet

for all these accumulated

associations, with whatever

is sweet, and honourable,

and sublime, there yet lurks -an elusive something in the innermost idea of this hue, which strikes more of panic to the soul than that redness which affrights in blood.

Line-width 29, cost 3.50, lines used 105.

(18)

Though in many natural objects, whiteness refiningly

enhances beauty, as if

imparting some special virtue of its own, as in marbles, japonicas, and pearls; and though various nations have in some way recognised a certain royal preeminence in - this hue; even the barbaric,

grand old kings of Pegu

placing the title ’Lord of the White Elephants’ above all their other magniloquent ascriptions of dominion; and

the modern kings of Siam

unfurling the same snow-white

quadruped in the royal

standard; and the Hanoverian - flag bearing the one figure

of a snow-white charger;

and the great Austrian

Empire, Caesarian, heir to overlording Rome, having for the imperial colour the same imperial hue; and though this pre-eminence in it applies to

the human race itself,

giving the white man ideal - mastership over every dusky tribe; and though, besides, all this, whiteness has been

even made significant of

gladness, for among the

Romans a white stone marked a

joyful day; and though in

other mortal sympathies and symbolizings this same hue is

made the emblem of many

- touching, noble things

---the innocence of brides, the

benignity of age; though

among the Red Men of America the giving of the white belt

of wampum was the deepest

pledge of honour; though

in many climes, whiteness

typifies the majesty of

Justice in the ermine of the - Judge, and contributes to the

daily state of kings and

queens drawn by milk-white

steeds; though even in the higher mysteries of the most august religions it has been made the symbol of the divine spotlessness and power; by the Persian fire worshippers,

the white forked flame

being held the holiest on

-the altar; and in the

Greek mythologies, Great

Jove himself being made

incarnate in a snow-white

bull; and though to the

noble Iroquois, the midwinter

sacrifice of the sacred

White Dog was by far the

holiest festival of their

theology, that spotless,

-faithful creature being held the purest envoy they could

send to the Great Spirit

with the annual tidings of

their own fidelity; and

though directly from the

Latin word for white, all

Christian priests derive the

name of one part of their

sacred vesture, the alb or

-tunic, worn beneath the

cassock; and though among the

holy pomps of the Romish

faith, white is specially

employed in the celebration of the Passion of our Lord;

though in the Vision of

St. John, white robes are

given to the redeemed, and

the four-and-twenty elders

-stand clothed in white before the great-white throne, and

the Holy One that sitteth

there white like wool; yet for all these accumulated associations, with whatever

is sweet, and honourable,

and sublime, there yet lurks an elusive something in the innermost idea of this hue, -which strikes more of panic to the soul than that redness which affrights in blood.

Line-width 29, cost 3.50, lines used 103.

References

Related documents

Commercial aircraft programs inventory included the following amounts related to the 747 program: $448 of deferred production costs at December 31, 2011, net of previously

This suggest that developed countries, such as the UK and US, have superior payment systems which facilitate greater digital finance usage through electronic payments compared to

○ If BP elevated, think primary aldosteronism, Cushing’s, renal artery stenosis, ○ If BP normal, think hypomagnesemia, severe hypoK, Bartter’s, NaHCO3,

Over the past decade we have been working with colleagues from around the globe and from a variety of disciplines to quantify human capital management and use the resultant

The results will be com- pared with the allocation schemes proposed by Wyglinski and the ones proposed under peak error rate constraint for OFDM and LP-OFDM systems.. The

1994-1995 President: Adrien Gervais. Vice-President:

Acknowledging the lack of empirical research on design rights, our paper wishes to investigate the risk of piracy and the perceptions of the registered and unregistered design

Looking at the developments in 2013, the mobile revenue generated per device remained constant, but shows an interesting turn in early 2014: While all devices are increasing