add tutorial

pull/9/head
Matthew Butterick 11 years ago
parent 18c4027557
commit 4c7872ea0f

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,4 +1,4 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>1&nbsp;Installation</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.css" title="default"/><script type="text/javascript" src="scribble-common.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr></table></div><div class="tocviewsublistonly" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="Installation.html" class="tocviewselflink" data-pltdoc="x">Installation</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="quick-tour.html" class="tocviewlink" data-pltdoc="x">Quick tour</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="Backstory.html" class="tocviewlink" data-pltdoc="x">Backstory</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="The_big_picture.html" class="tocviewlink" data-pltdoc="x">The big picture</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="Using_raco_pollen.html" class="tocviewlink" data-pltdoc="x">Using <span class="stt">raco pollen</span></a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="File_formats.html" class="tocviewlink" data-pltdoc="x">File formats</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="reader.html" class="tocviewlink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="Module_reference.html" class="tocviewlink" data-pltdoc="x">Module reference</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="Acknowledgments.html" class="tocviewlink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="License___source_code.html" class="tocviewlink" data-pltdoc="x">License &amp; source code</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">6.0.1.6</span></div><div class="navsettop"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="index.html" title="backward to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="quick-tour.html" title="forward to &quot;2 Quick tour&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h3>1<tt>&nbsp;</tt><a name="(part._.Installation)"></a>Installation</h3><p>Install Racket, which includes DrRacket.</p><p><div class="SIntrapara">Install Pollen from the command line:
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>1&nbsp;Installation</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.css" title="default"/><script type="text/javascript" src="scribble-common.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr></table></div><div class="tocviewsublistonly" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="Installation.html" class="tocviewselflink" data-pltdoc="x">Installation</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="quick-tour.html" class="tocviewlink" data-pltdoc="x">Quick tour</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="Backstory.html" class="tocviewlink" data-pltdoc="x">Backstory</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="big-picture.html" class="tocviewlink" data-pltdoc="x">The big picture</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="First_tutorial.html" class="tocviewlink" data-pltdoc="x">First tutorial</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="raco-pollen.html" class="tocviewlink" data-pltdoc="x">Using <span class="stt">raco pollen</span></a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="File_formats.html" class="tocviewlink" data-pltdoc="x">File formats</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="reader.html" class="tocviewlink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="Module_reference.html" class="tocviewlink" data-pltdoc="x">Module reference</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="Acknowledgments.html" class="tocviewlink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="License___source_code.html" class="tocviewlink" data-pltdoc="x">License &amp; source code</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">6.0.1.6</span></div><div class="navsettop"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="index.html" title="backward to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="quick-tour.html" title="forward to &quot;2 Quick tour&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h3>1<tt>&nbsp;</tt><a name="(part._.Installation)"></a>Installation</h3><p>Install Racket, which includes DrRacket.</p><p><div class="SIntrapara">Install Pollen from the command line:
</div><div class="SIntrapara"><table cellspacing="0"><tr><td><p><span class="stt">raco pkg install pollen</span></p></td></tr></table></div></p><p><div class="SIntrapara">After that, you can update the package from the command line:
</div><div class="SIntrapara"><table cellspacing="0"><tr><td><p><span class="stt">raco pkg update pollen</span></p></td></tr></table></div></p><div class="navsetbottom"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="index.html" title="backward to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="quick-tour.html" title="forward to &quot;2 Quick tour&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>

@ -1,2 +1,2 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>10&nbsp;License &amp; source code</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.css" title="default"/><script type="text/javascript" src="scribble-common.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr></table></div><div class="tocviewsublistonly" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="Installation.html" class="tocviewlink" data-pltdoc="x">Installation</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="quick-tour.html" class="tocviewlink" data-pltdoc="x">Quick tour</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="Backstory.html" class="tocviewlink" data-pltdoc="x">Backstory</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="The_big_picture.html" class="tocviewlink" data-pltdoc="x">The big picture</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="Using_raco_pollen.html" class="tocviewlink" data-pltdoc="x">Using <span class="stt">raco pollen</span></a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="File_formats.html" class="tocviewlink" data-pltdoc="x">File formats</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="reader.html" class="tocviewlink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="Module_reference.html" class="tocviewlink" data-pltdoc="x">Module reference</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="Acknowledgments.html" class="tocviewlink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="License___source_code.html" class="tocviewselflink" data-pltdoc="x">License &amp; source code</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">6.0.1.6</span></div><div class="navsettop"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="Acknowledgments.html" title="backward to &quot;9 Acknowledgments&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="doc-index.html" title="forward to &quot;Index&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h3>10<tt>&nbsp;</tt><a name="(part._.License___source_code)"></a>License &amp; source code</h3><p>This module is licensed under the LGPL.</p><p>Source repository at <a href="http://github.com/mbutterick/pollen">http://github.com/mbutterick/pollen</a>. Suggestions &amp; corrections welcome.</p><div class="navsetbottom"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="Acknowledgments.html" title="backward to &quot;9 Acknowledgments&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="doc-index.html" title="forward to &quot;Index&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>11&nbsp;License &amp; source code</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.css" title="default"/><script type="text/javascript" src="scribble-common.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr></table></div><div class="tocviewsublistonly" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="Installation.html" class="tocviewlink" data-pltdoc="x">Installation</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="quick-tour.html" class="tocviewlink" data-pltdoc="x">Quick tour</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="Backstory.html" class="tocviewlink" data-pltdoc="x">Backstory</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="big-picture.html" class="tocviewlink" data-pltdoc="x">The big picture</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="First_tutorial.html" class="tocviewlink" data-pltdoc="x">First tutorial</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="raco-pollen.html" class="tocviewlink" data-pltdoc="x">Using <span class="stt">raco pollen</span></a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="File_formats.html" class="tocviewlink" data-pltdoc="x">File formats</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="reader.html" class="tocviewlink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="Module_reference.html" class="tocviewlink" data-pltdoc="x">Module reference</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="Acknowledgments.html" class="tocviewlink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="License___source_code.html" class="tocviewselflink" data-pltdoc="x">License &amp; source code</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">6.0.1.6</span></div><div class="navsettop"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="Acknowledgments.html" title="backward to &quot;10 Acknowledgments&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="doc-index.html" title="forward to &quot;Index&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h3>11<tt>&nbsp;</tt><a name="(part._.License___source_code)"></a>License &amp; source code</h3><p>This module is licensed under the LGPL.</p><p>Source repository at <a href="http://github.com/mbutterick/pollen">http://github.com/mbutterick/pollen</a>. Suggestions &amp; corrections welcome.</p><div class="navsetbottom"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="Acknowledgments.html" title="backward to &quot;10 Acknowledgments&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Pollen: the book is a program&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="doc-index.html" title="forward to &quot;Index&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@ -1,6 +1,6 @@
#lang scribble/manual
@title{The big picture}
@title[#:tag "big-picture"]{The big picture}
A summary of the key components & concepts of the Pollen publishing system and how they fit together. If you've completed the @secref["quick-tour"], this will lend some context to what you saw. The next tutorials will make more sense if you read this first.

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

@ -5,7 +5,7 @@
@(define my-eval (make-base-eval))
@(my-eval `(require pollen pollen/file))
@title{File}
@title[#:tag "file-types"]{File}
@defmodule[pollen/file]

@ -0,0 +1,598 @@
#lang scribble/manual
@(require (for-label pollen/world))
@title{First tutorial}
In this tutorial, you'll use Pollen to make a single HTML page with a poem. You'll learn about:
@itemlist[
@item{The relationship of Racket & Pollen}
@item{DrRacket}
@item{The project server}
@item{The preprocessor}
]
If you want the shortest possible introduction to Pollen, try the @secref["quick-tour"].
@section{Prerequisites}
I'm going to assume that you've already installed Racket and Pollen. If not, do that now.
I'm also going to assume you know the basics of using a command line to run programs and navigate the file system using commands like @tt{cd} and @tt{ls}. On Mac OS X, your command-line program is called Terminal; on Windows it's the Windows Command Processor.
@section{The relationship of Racket & Pollen}
As I mentioned in the @secref["big-picture"], Pollen is built using Racket, and everything in Pollen ultimately becomes Racket code. If you're comfortable with that idea, you may move along.
But if not, or if you're just a curious character:
One of the key features of Racket as a programming language is that it provides tools to create @italic{other} programming languages. These languages might look & behave @link["http://docs.racket-lang.org/ts-guide/index.html"]{like Racket}. Or they @link["http://hashcollision.org/brainfudge/"]{might not}. These languages might serve a general purpose, but more often they're specialized for a particular purpose, in which case they're known as @italic{domain-specific languages}, or @italic{DSLs}.
@margin-note{Racket exploits the fact that under the hood, all programming languages are basically doing the same thing. (CS jocks know this more formally as a side effect of @link["https://en.wikipedia.org/wiki/Turing_completeness"]{Turing completeness}.) Racket starts with the most general expression of a Turing-complete language — called @link["https://en.wikipedia.org/wiki/Lambda_calculus"]{the lambda calculus} — and lets users build on that. In most programming languages, you can build functions, classes, and modules. But in Racket, you can alter anything about the language.}
If you find this a strange idea, you're not alone. Most programmers — and until recently, me too — have never made or used DSLs. If you have a programming problem to solve, you start with a general-purpose language like Python or Java or Ruby, and go from there. Nothing wrong with that.
But programming languages contain their own design choices and compromises. Sometimes the problem at hand is best solved by manipulating the language at a deeper level. When you make a DSL, you're still programming in the underlying language, but doing so at a point of higher leverage.
Pollen is a DSL implemented in Racket. It is a close cousin of @other-doc['(lib "scribblings/scribble/scribble.scrbl")], another Racket DSL, which was designed for writing Racket documentation. The key feature of Scribble, and thus also of Pollen, is that it's text-based. Meaning, whereas most languages have source files made of code with text embedded within, Pollen's source files are text with code embedded within.
Moreover, Pollen is meant to be a small step away from Racket — you can think of it as a more convenient notation system for Racket code, similar to how Markdown is a more convenient notation for HTML. But unlike Markdown, which only lets you access a subset of HTML, anything that can be done in Racket can also be done in Pollen.
As you work more with Pollen, you'll pick up more about how Pollen corresponds to Racket (see @secref["reader"]) and easily be able to convert commands from one system to the other. In later tutorials, you'll see how larger Pollen projects are made out of both Pollen and Racket source files.
But in smaller projects, like this one, you can just use Pollen.
@section{Starting a new file in DrRacket}
DrRacket is the IDE for the Racket programming language, and other languages made with Racket (like Pollen). IDE stands for ``Integrated Development Environment,'' which is a fancy phrase for ``a nice place to edit and run your code.'' DrRacket is installed as part of the core Racket distribution.
@margin-note{If you've worked with languages like Perl, Python, or Ruby, you may be more familiar with using a general-purpose text editor to edit your code, and then running your program at the command line. You can do that with Racket too. But DrRacket is a considerately designed tool. I recommend it. For these tutorials, I'll assume you're using DrRacket. If you insist on using the command line, I trust you to figure out what you need to do to keep up.}
Launch DrRacket. Start a new file. The code in the file will look like this:
@racketmod[racket]
Within the main window, you should also see an @italic{interactions window}, which shows the output of the current file, and starts out looking something like this (details, like the version number, will vary):
@verbatim{
Welcome to DrRacket, version 6.0.1.6--2013-11-26(-/f) [3m].
Language: racket; memory limit: 1000 MB.
> }
If you don't see the interactions window, select @menuitem["View"
"Show Interactions"] from the menu.
@subsection{Setting the @racketfont{#lang} line}
The first line of every Racket source file, and every Pollen source file, is called the @italic{@racketfont{#lang} line}. The @racketfont{#lang} line identifies the language used to interpret the rest of the file.
@margin-note{For more about the @racketfont{#lang} line, see @secref[#:doc '(lib "scribblings/guide/guide.scrbl") "hash-lang"].}
When you start a new Pollen source file in DrRacket, you'll need to change the @racketfont{#lang} line to the Pollen language. The simplest way is to change the first line to this:
@racketmod[pollen]
Now run your file by clicking the @onscreen["Run"] button in the upper-right corner, or select @menuitem["Racket" "Run"] from the menu. You'll get something like:
@verbatim{
Welcome to DrRacket, version 6.0.1.6--2013-11-26(-/f) [3m].
Language: pollen; memory limit: 1000 MB.
>
}
Notice that the language is now reported as @racketfont{pollen}. If you like, change the @racketfont{#lang} line to this:
@nested[#:style 'code-inset]{@verbatim{
#lang pollenxyz}}
Then click @onscreen["Run"] again. DrRacket will print an error:
@verbatim{@racketerror{Module Language: invalid module text
@(linebreak)standard-module-name-resolver: collection not found ...}}
Why? Because there's no language called @racketfont{pollenxyz}. Switch it back to @racketfont{pollen} and let's move on.
@subsection{Putting in the text of the poem}
Here's a short, bad poem I wrote about CSS.
@verbatim{
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.
}
Paste the text of this poem into your DrRacket editing window, below the @racketfont{#lang} line, so it looks like this:
@nested[#:style 'code-inset]{@verbatim{
#lang pollen
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.}}
@onscreen["Run"] the file again. In the interactions window, you'll see:
@racketvalfont{
The margin is 8em.
@(linebreak)The border is blue.
@(linebreak)The padding is 2em.
@(linebreak)The border is too.}
This shows you something important: by default, any plain text in a Pollen source file is simply printed as written when you @onscreen["Run"] the file (minus the @racketfont{#lang} line, which is just for Racket's benefit). If you like, edit the text of the poem and click @onscreen["Run"] again. You'll see the updated text printed in the interactions window.
@subsection{Saving & naming your source file}
File naming in Pollen is consequential.
Ultimately, every Pollen source file in your project will be @italic{rendered} into an output file. Each Pollen source file corresponds to one output file. @bold{The name of this output file will be the name of the source file minus the Pollen source extension.} So a source file called @racketfont{file.txt.pp} will become @racketfont{file.txt}.
Thus, to build the name of a source file, we take the name we want for the output file and add the appropriate Pollen file extension. Different Pollen source files use different extensions — but more about that later. For now, the extension you'll use for your source is @racketfont{.pp}.
In this case, let's say we want to end up with a file called @racketfont{poem.html}. Therefore, the name of our source file needs to be:
the output name @racketfont{poem.html} + the source extension @racketfont{.pp} = @racketfont{poem.html.pp}
(If you want to name the file @racketfont{something-else.html.pp}, be my guest. There's no magic associated with the prefix.)
@margin-note{You're welcome to change the name of your source files from the desktop. On Mac OS X and Windows, however, the desktop interface often hides file extensions, so check the properties of the file afterward to make sure you got the name you expected.}
In a convenient location (e.g., your home directory or the desktop) create a new directory for your project called @racketfont{tutorial}. In this new directory, save your DrRacket file as @racketfont{poem.html.pp}.
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.}}
@section{Using the project server}
The project server is a web server built into Pollen. Just as DrRacket lets you run individual files and see if they work as you expect, the project server lets you preview and test your project as a real website. While working on your Pollen project, you may find it convenient to have DrRacket open on half your screen, and on the other half, a web browser pointing at the project server.
@image["scribblings/project-server.png" #:scale 0.7]
``Why can't I just open the HTML files directly in my browser?'' If you want to keep making web pages the way we did in 1996, go ahead. But that approach has several shortcomings. First, when you open files directly in your browser, you're cruising the local filesystem, and absolute URLs (the kind that start with a @litchar{/}) won't work. Second, if you want to test your website on devices other than your own machine — well, you can't. Third, you have to render your HTML files in advance, whereas the project server is clever about doing this dynamically.
So use the project server.
A note about security. The project server isn't intended for real-world use, but rather as a development tool. That said, once you start the project server, it's an actual web server running on your machine, and it will respond to requests from any computer. If you want to limit traffic to your local network, or certain machines on your local network, it's your job — not mine — to configure your firewall or other network security measures accordingly.
@subsection{Starting the project server with @racketfont{raco pollen}}
Before we start the project server, a word about the @racketfont{raco pollen} command.
When you installed Racket, Racket installed a utility program called @racketfont{raco}. This name is short for @bold{Ra}cket @bold{co}mmand, and @racketfont{raco} acts as a hub for — you guessed it — Racket commands. You used it when you first installed Pollen:
@verbatim{
> raco pkg install pollen
}
The first argument after @racketfont{raco} is the subcommand. For instance, @racketfont{raco pkg ...} lets you install, update, and remove packages like so:
@verbatim{
> raco pkg update pollen
> raco pkg remove pollen
}
Likewise, @racketfont{raco pollen} lets you issue commands relevant to Pollen, like starting the project server. (See @secref["raco-pollen"] for a full description of available commands.)
Now we'll start the project server. Go to your command line and enter the following:
@verbatim{
> cd /path/to/tutorial
> raco pollen start}
@margin-note{Windows users, I'll trust you to convert @racketfont{raco} into the appropriate command for your system — assuming defaults, it's likely to be @racketfont{"C:\Program Files\Racket\raco"} (include the surrounding quotes in the command).}
After a moment, you'll see a startup message like this:
@verbatim{
Welcome to Pollen 0.001 (Racket 6.x.x.x)
Project root is /path/to/tutorial
Project server is http://localhost:8080 (Ctrl-C to exit)
Project dashboard is http://localhost:8080/index.ptree
Ready to rock}
@italic{Project root} means the directory that the project server was started in, and which it's treating as its root directory. Any absolute URLs (i.e., those beginning with @litchar{/}) will resolve into this directory. So a URL like @racketfont{/styles.css} will impliedly become @racketfont{/path/to/tutorial/styles.css}.
If you use the bare command @racketfont{raco pollen start}, the project server will start in the current directory. But if you want to start the project server elsewhere, you can add that directory as an argument like this:
@verbatim{
> raco pollen start /some/other/path
}
The next line of the startup message tells you that the web address of the project server is @racketfont{http://localhost:8080}. This is the address you put into your web browser to test your project. If you're unfamiliar with this style of URL, @racketfont{localhost} refers to your own machine, and @racketfont{8080} is the network port where the project server will respond to browser requests.
If you want to access the project server from a different machine, you can't use @racketfont{localhost}. But you can use the IP address of the machine running the project server (e.g., @racketfont{http://192.168.1.10:8080}) or any name for that machine available through local DNS (e.g., @racketfont{http://mb-laptop:8080}).
Though port @racketfont{8080} is the default, you can start the project server on any port you like by adding it as an argument to @racketfont{raco pollen start}:
@verbatim{
> raco pollen start /path/to/tutorial
> raco pollen start /path/to/tutorial 8088
}
@margin-note{You can also change the default port by altering @racket[world:default-port], or parameterizing it with @racket[world:current-server-port].}
Note that when you pass a port argument, you also have to pass a path argument. If you want the project server to start in the current directory, you can use the usual @litchar{.} shorthand:
@verbatim{
> cd /path/to/tutorial
> raco pollen start 8088
@racketerror{/path/to/tutorial/8088 is not a directory}
> raco pollen start . 8088
}
@margin-note{You can run multiple project servers simultaneously. Just start them on different ports so they don't conflict with each other.}
Your terminal window will report status and error messages from the project server as it runs. Use @onscreen{Ctrl-C} to stop the server.
@subsection{Using the dashboard}
For each directory in your project, starting at the top, the project server displays a @italic{dashboard} in your web browser. The dashboard gives you an overview of the files in the directory, and links to view them.
The address of the top-level dashboard is @racketfont{http://localhost:8080/index.ptree}. Other dashboards follow the same pattern (e.g., @racketfont{http://localhost:8080/path/to/dir/index.ptree}.)
Note that the dashboard is @bold{not} at @racketfont{http://localhost:8080/} or its equivalent, @racketfont{http://localhost:8080/index.html}. Why? So it doesnt interfere with any @racketfont{index.html} that you may want to put in your project.
Thus, @racketfont{index.ptree}. The @racketfont{.ptree} extension is short for @italic{pagetree}. In Pollen, a pagetree is a hierarchical list of pages. We'll do more with pagetrees in a later tutorial. For now, just be aware that to generate the dashboard, the project server will first look for an actual @racketfont{index.ptree} file in each directory. If it doesn't find one, it will generate a pagetree from a listing of files in the directory.
Let's look at the root-level dashboard for our project. First, make sure your project server is running:
@verbatim{
> cd /path/to/tutorial
> raco pollen start
}
Then, in your web browser, visit @link["http://localhost:8080/index.ptree"]{@racketfont{http://localhost:8080/index.ptree}}.
You should see something like this:
@image["scribblings/dashboard.png" #:scale 1]
The top line tells us that we're in the root directory of the project. We didn't make an explicit @racketfont{index.ptree} file, so the project server just shows us a directory listing.
@subsection{Source files in the dashboard}
We see the only file, @racketfont{poem.html.pp}. Note that the @racketfont{.pp} extension is grayed out. The dashboard automatically consolidates references to source and output files into a single entry. What this entry says is ``The directory contains a source file in @racketfont{.pp} format for the output file @racketfont{poem.html}.''
Every source-file entry in the dashboard has three links. The first link is attached to the filename itself, and takes you to a preview of the output file. If the output file doesn't yet exist — as is the case here — it will be dynamically rendered. (This is true whether you click its name in the dashboard, or link to it from another page.) So click the filename. You'll see in your web browser:
@nested[#:style 'code-inset]{
The margin is 42em. The border is red. The padding is 15em. The border is too.}
Granted, this is a boring web page. The main point here is that you're seeing the @italic{output} from your source file, which didn't exist before. Notice that the address bar says @racketfont{http://localhost:8080/poem.html}, not @racketfont{poem.html.pp}. And if you look in your @racketfont{tutorial} directory, you'll see a new file called @racketfont{poem.html}.
In other words, when you clicked on the filename link in the dashboard, Pollen rendered the output file from your source file and saved it in your project directory. As promised earlier, the name of the output file (@racketfont{poem.html}) is the name of the source file (@racketfont{poem.html.pp}) minus the Pollen extension (@racketfont{.pp}).
If you go back to the dashboard and click on the filename link again, you'll see the same output file. If the source file hasn't changed, Pollen will just show you the output file that's already been rendered.
But if you like, open your @racketfont{poem.html.pp} source file in DrRacket, edit the first line, and save the file:
@nested[#:style 'code-inset]{@verbatim{
#lang pollen
The cave is pitch black.
Look out for the grue.
The padding is 15em.
The border is too.}}
Go back to the dashboard and click on the filename. This time, you'll see:
@nested[#:style 'code-inset]{
The cave is pitch black. Look out for the grue. The padding is 15em. The border is too.}
Here, Pollen notices that the source file has changed, so it refreshes the output file. This makes it convenient to work between DrRacket and your web browser, editing source and then reloading to see the changes.
The other two links in the dashboard are labeled @racketfont{in} and @racketfont{out}.
The link labeled @racketfont{in} will display the contents of the source file:
@nested[#:style 'code-inset]{@verbatim{
#lang pollen
The cave is pitch black.
Look out for the grue.
The padding is 15em.
The border is too.}}
The link labeled @racketfont{out} will display the contents of the output file (just like the ``view source'' option in your web browser):
@nested[#:style 'code-inset]{@verbatim{
The cave is pitch black.
Look out for the grue.
The padding is 15em.
The border is too.}}
For now, the files are identical except for the @racketfont{#lang} line. But let's change that.
@section{Working with the preprocessor}
Pollen can operate in several processing modes. One of these is @italic{preprocessor} mode. A preprocessor is a tool for making systematic, automated changes to a file, often in contemplation of further processing (hence the @italic{pre-}). You can use the Pollen preprocessor this way. Or you can just use it on its own, and leave your files in a finished state.
That's how we'll use it in this tutorial. We'll build out our @racketfont{poem.html.pp} source file so that it exits the preprocessor as a legit HTML file.
@subsection{Setting up a preprocessor source file}
The file extension of a Pollen source file tells Pollen what kind of processing to apply to it. The ``@racketfont{.pp}'' file extension stands for ``Pollen preprocessor.'' You can use the preprocessor with any text-based file by:
@itemlist[
@item{inserting @racketfont{#lang pollen} as the first line,}
@item{adding the @racketfont{.pp} file extension,}
@item{running it through Pollen.}
]
@margin-note{For more about the Pollen processing modes and how to invoke them, see @secref["file-types"].}
``The preprocessor be used with @bold{any} kind of text-based file?'' Right. ``But how?'' The preprocessor reads the source file, handles any Pollen commands it finds, and lets the rest of the content pass through untouched. To the preprocessor, it's all just text data. It doesn't care whether that text represents HTML, CSS, JavaScript, or even @link["https://en.wikipedia.org/wiki/TI-BASIC"]{TI-BASIC}.
Because the preprocessor only deals in text, the Pollen commands you use in the preprocessor also have to produce text. Moreover, Pollen doesn't enforce the semantics of the underlying file — that's your responsibility. For instance, Pollen won't stop you from doing nonsensical things like this:
@filebox["bad-poem.html.pp"]{@verbatim{
#lang pollen
The cave is pitch black.
Look out for the grue.
◊(insert-mp3-recording-of-scream)
}}
Here, the result is not going to be valid HTML, because you can't simply drop binary data in the middle of an HTML file. To paraphrase Mr. Babbage — garbage in, garbage out.
I've encouraged you to mess with the source file, but let's return it to its original state:
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.}}
This file has @racketfont{#lang pollen} as the first line, and @racketfont{.pp} as the file extension, so it meets the minimum requirements for the preprocessor.
@subsection{Creating valid HTML output}
Let's update our source so it produces valid HTML. Edit the source as follows:
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
<!DOCTYPE html>
<html>
<body>
<pre>
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.
</pre>
</body>
</html>}}
Return to the project server and view @link["http://localhost:8080/poem.html" "http://localhost:8080/poem.html"]. Earlier, the output looked like this:
@nested[#:style 'code-inset]{
The margin is 42em. The border is red. The padding is 15em. The border is too.}
But now, because of the @racketfont{<pre>} tag, the poem will appear in a monospaced font, and the line breaks will be preserved:
@nested[#:style 'code-inset]{
@tt{The margin is 42em.
@(linebreak)The border is red.
@(linebreak)The padding is 15em.
@(linebreak)The border is too.}}
As before, because the source has changed, Pollen refreshes the output file. From the dashboard, you can use the @racketfont{in} and @racketfont{out} links to inspect the source and output.
This is now a valid HTML page.
@subsection{Adding commands}
I mentioned that the preprocessor reads the file and handles any Pollen commands it finds. But our source file doesn't have any commands yet. Let's add some.
Pollen commands can be embedded in your source file using one of two modes: @italic{Racket mode} or @italic{text mode}. We'll try text mode in a later tutorial. For now, we'll use Racket mode.
To make a Racket-mode Pollen command, just take any Racket expression and put the lozenge character (@litchar["◊"]) in front of it. For instance, these are valid Racket expressions:
@nested[#:style 'code-inset]{@verbatim{
(define inner 2)
(define edge (* inner 4))
(define color "blue")
}}
And these are the equivalent commands in Pollen:
@nested[#:style 'code-inset]{@verbatim{
◊(define inner 2)
◊(define edge (* inner 4))
◊(define color "blue")
}}
@subsection{Racket basics (if you're not familiar)}
``But how am I supposed to know Racket?'' You don't. So we'll start now. Here are the five basic rules of Racket:
@itemlist[#:style 'ordered
@item{The core building block of Racket is the @italic{expression}. An expression can be a value (like @racket[2] or @racket{blue}), a variable (like @racketfont{edge}), or a function call (like @racket[(* inner 4)]).}
@item{Every expression is @italic{evaluated} to produce a value.}
@item{A variable evaluates to whatever value it holds (so @racketfont{inner} would become @racket[2]). A function call evaluates to its return value (so @racket[(+ 1 1)] would become @racket[2]).}
@item{Function calls go between parentheses. Unlike most languages, the function name comes @italic{first}, followed by its arguments (so it's @racket[(* inner 4)], not @racket[(inner * 4)]). This is called @italic{prefix notation}.}
@item{Expressions can contain recursively nested expressions. Thus, @racket[(* inner 4)] could be written @racket[(* inner (+ 2 2))] or @racket[(* inner (+ (+ 1 1) (+ 1 1)))].}
]
@margin-note{Newcomers to Racket often gripe about prefix notation and the parentheses. If you need to get it out of your system, go ahead. Keep in mind, however, that it's not some peculiar affectation, but rather a necessary consequence of rule #1. As you'll come to learn, rule #1 is where the magic happens.}
That should tell you enough to infer what's going on in the Pollen commands above:
@nested[#:style 'code-inset]{@verbatim{
◊(define inner 2)
◊; create a variable 'inner' that holds the value 2
◊(define edge (* inner 4))
◊; create a variable 'edge' that's four times the value of 'inner'
◊(define color "blue")
◊; create a variable 'color' that holds the value "blue"
}}
To learn more about Racket syntax, consider a detour through the excellent @other-doc['(lib "scribblings/quick/quick.scrbl")].
@subsection{Defining variables with commands}
Let's use commands to define variables that will hold some values for our page. First, add a @racketfont{<head>} tag to your source file, and three commmands to define three variables:
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
<!DOCTYPE html>
<html>
<head>
◊(define inner 2)
◊(define edge (* inner 4))
◊(define color "blue")
</head>
<body>
<pre>
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.
</pre>
</body>
</html>}}
Then look at @link["http://localhost:8080/poem.html" "http://localhost:8080/poem.html"] again. Does it look the same? Not a trick question — it should. If you click the @onscreen{Out} link on the dashboard, you'll see this:
@nested[#:style 'code-inset]{@verbatim{
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<pre>
The margin is 42em.
The border is red.
The padding is 15em.
The border is too.
</pre>
</body>
</html>}}
What's happening here? Our @racketfont{◊(define ...)} commands just define variables, so they don't evaluate to any value. Instead, we get blank lines. So far, so good.
@subsection{Inserting values from variables}
To insert the value of a variable in our file, we use the command @litchar{◊|}@italic{variable-name}@litchar{|}. Let's do that now:
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
<!DOCTYPE html>
<html>
<head>
◊(define inner 2)
◊(define edge (* inner 4))
◊(define color "blue")
</head>
<body>
<pre>
The margin is ◊|edge|em.
The border is ◊|color|.
The padding is ◊|inner|em.
The border is too.
</pre>
</body>
</html>}}
Here, we're replacing three values in the poem with the variables containing those values — @racketfont{◊|edge|}, @racketfont{◊|color|}, and @racketfont{◊|inner|}. @link["http://localhost:8080/poem.html"]{Reload the file} in the project server, and you'll see:
@nested[#:style 'code-inset]{@verbatim{
The margin is 8em.
The border is blue.
The padding is 2em.
The border is too.}}
Hey, look at that — the text of the poem changed. Now it even rhymes.
If you like, in the source file, edit the variable definitions with different values and reload the page in the project server. The page will be rendered afresh with the new values. In particular, if you update @racketfont{inner}, you'll also see @racketfont{edge} change, since its value depends on @racketfont{inner}.
@subsection{Inserting variables within CSS}
Our poem makes claims about the @racketfont{margin}, @racketfont{border}, and @racketfont{padding} of the page that aren't yet true. To fix this, we'll rely on the same basic technique of inserting variables into our HTML file. But instead of putting them in the @racketfont{<body>} of the page, we'll put them in a CSS @racketfont{<style>} tag.
Update the @racketfont{<head>} section of the page with a new @racketfont{<style>} tag that defines a style for @racketfont{pre} like so, using our variables for the relevant values:
@filebox["/path/to/tutorial/poem.html.pp"]{@verbatim{
#lang pollen
<!DOCTYPE html>
<html>
<head>
◊(define inner 2)
◊(define edge (* inner 4))
◊(define color "blue")
<style type="text/css">
pre {
margin: ◊|edge|em;
border: ◊|inner|em solid ◊|color|;
padding: ◊|inner|em;
}
</style>
</head>
<body>
<pre>
The margin is ◊|edge|em.
The border is ◊|color|.
The padding is ◊|inner|em.
The border is too.
</pre>
</body>
</html>}}
Notice that we're using the same @litchar{◊|}@italic{variable-name}@litchar{|} pattern as before to insert the variable values.
What do we expect to see? We expect that the @racketfont{padding} and @racketfont{border} will be 2em wide, because @racketfont{inner} is 2. We expect the @racketfont{margin} to be 8em, because it's equal to @racketfont{edge}, which is @racketfont{inner} multiplied by 4. And we expect the color of the border to be @racket["blue"], because that's the value of the variable @racketfont{color}.
And indeed, when you @link["http://localhost:8080/poem.html"]{reload the file} in the project server, you'll see exactly that:
@image["scribblings/result.png" #:scale 0.7]
As before, if you edit the values of the variables in the source file and reload in the project server, you'll see both the text and the layout change.
@section{First tutorial complete}
This was a sneaky tutorial. The HTML page we made was very simple, but in building it, we covered many important points about how Pollen works.
Feel free to go back and experiment with what you've learned. The next tutorial will assume that you're comfortable with all the material here.

@ -47,6 +47,8 @@ Or, if you can find a better digital-publishing tool, use that. But I'm never go
@include-section["big-picture.scrbl"]
@include-section["poem.scrbl"]
@include-section["raco.scrbl"]
@include-section["formats.scrbl"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

@ -6,7 +6,7 @@
@(my-eval `(require pollen pollen/file))
@title{Using @exec{raco pollen}}
@title[#:tag "raco-pollen"]{Using @exec{raco pollen}}
Racket provides centralized command-line options through @racket[raco] (short for @code{racket command}, see @other-doc['(lib "scribblings/raco/raco.scrbl")]).
@ -30,6 +30,8 @@ But if you get:
You'll need to fix the problem before proceeding, most likely by reinstalling Pollen (see @racket[Installation]).
@margin-note{Pro tip: I have an alias in my @racketfont{.bash_profile} like so: @racketfont{alias polcom=@literal{'}raco pollen@literal{'}}}
@section{@racket[raco pollen]}
Same as @racket[raco pollen help].

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@ -0,0 +1,12 @@
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
<root><div class="figure"><img src="space.jpg" alt="" /><p class="caption"></p></div><h1 id="introduction">Introduction</h1><p>This tutorial provides a brief introduction to the Racket programming language by using one of its picture-drawing libraries. Even if you dont intend to use Racket for your artistic endeavours, the picture library supports interesting and enlightening examples. After all, a picture is worth five hundred "hello world"s.</p><p>Along the same lines, we assume that you will run the examples using <a href="http://racket-lang.org/">DrRacket</a>. Using DrRacket is the fastest way to get a sense of what the language and system feels like, even if you eventually use Racket with Emacs, vi, or some other editor.</p><h2 id="ready">Ready&hellip;</h2><p><a href="http://racket-lang.org/">Download Racket</a>, install, and then start DrRacket.</p><h2 id="set">Set&hellip;</h2><blockquote><p>See <a href="file:///Users/MB/git/racket/racket/doc/drracket/interface-essentials.html">the DrRacket documentation</a> for a brief overview of the DrRacket IDE.</p></blockquote><p>To draw pictures, we must first load some picture functions, which are part of a library for creating slide presentations. Copy the following into the <em>definitions area</em>, which is the top text area that you see in DrRacket:</p><pre><code>#lang slideshow</code></pre><p>Then click the Run button. Youll see the text caret move to the bottom text area, which is the <em>interactions area</em>.</p><p>If youve used DrRacket before, you might need to reset DrRacket to use the language declared in the source via the <strong>Language|Choose Language&hellip;</strong> menu item before clicking <strong>Run</strong>.</p><h2 id="go">Go!</h2><p>When you type an expression after the &gt; in the interactions window and hit Enter, DrRacket evaluates the expression and prints its result. An expression can be just a value, such as the number 5 or the string &ldquo;art gallery&rdquo;:</p><pre><code>&gt; 5
5
&gt; "art gallery"
"art gallery"</code></pre><p>An expression can also be a function call. To call a function, put an open parenthesis before the function name, then expressions for the function arguments, and then a close parenthesis.</p></root>
</body>
</html>

@ -0,0 +1,41 @@
#lang pollen
![](space.jpg)
Introduction
============
This tutorial provides a brief introduction to the Racket programming language by using one of its picture-drawing libraries. Even if you dont intend to use Racket for your artistic endeavours, the picture library supports interesting and enlightening examples. After all, a picture is worth five hundred "hello world"s.
Along the same lines, we assume that you will run the examples using [DrRacket](http://racket-lang.org/). Using DrRacket is the fastest way to get a sense of what the language and system feels like, even if you eventually use Racket with Emacs, vi, or some other editor.
## Ready...
[Download Racket](http://racket-lang.org/), install, and then start DrRacket.
## Set...
> See [the DrRacket documentation](file:///Users/MB/git/racket/racket/doc/drracket/interface-essentials.html) for a brief overview of the DrRacket IDE.
To draw pictures, we must first load some picture functions, which are part of a library for creating slide presentations. Copy the following into the *definitions area*, which is the top text area that you see in DrRacket:
```
#lang slideshow
```
Then click the Run button. Youll see the text caret move to the bottom text area, which is the *interactions area*.
If youve used DrRacket before, you might need to reset DrRacket to use the language declared in the source via the **Language|Choose Language...** menu item before clicking **Run**.
## Go!
When you type an expression after the > in the interactions window and hit Enter, DrRacket evaluates the expression and prints its result. An expression can be just a value, such as the number 5 or the string "art gallery":
```
> 5
5
> "art gallery"
"art gallery"
```
An expression can also be a function call. To call a function, put an open parenthesis before the function name, then expressions for the function arguments, and then a close parenthesis.

@ -0,0 +1,199 @@
#lang pollen
Morning-room in Algernons flat in Half-Moon Street. The room is luxuriously and artistically furnished. The sound of a piano is heard in the adjoining room.
[**Lane** is arranging afternoon tea on the table, and after the music has ceased, **Algernon** enters.]
**Algernon.** Did you hear what I was playing, Lane?
**Lane.** I didnt think it polite to listen, sir.
**Algernon.** Im sorry for that, for your sake. I dont play accurately—any one can play accurately—but I play with wonderful expression. As far as the piano is concerned, sentiment is my forte. I keep science for Life.
**Lane.** Yes, sir.
**Algernon.** And, speaking of the science of Life, have you got the cucumber sandwiches cut for Lady Bracknell?
**Lane.** Yes, sir. [Hands them on a salver.]
**Algernon.** [Inspects them, takes two, and sits down on the sofa.] Oh! . . . by the way, Lane, I see from your book that on Thursday night, when Lord Shoreman and Mr. Worthing were dining with me, eight bottles of champagne are entered as having been consumed.
**Lane.** Yes, sir; eight bottles and a pint.
**Algernon.** Why is it that at a bachelors establishment the servants invariably drink the champagne? I ask merely for information.
**Lane.** I attribute it to the superior quality of the wine, sir. I have often observed that in married households the champagne is rarely of a first-rate brand.
**Algernon.** Good heavens! Is marriage so demoralising as that?
**Lane.** I believe it _is_ a very pleasant state, sir. I have had very little experience of it myself up to the present. I have only been married once. That was in consequence of a misunderstanding between myself and a young person.
**Algernon.** [Languidly.] I dont know that I am much interested in your family life, Lane.
**Lane.** No, sir; it is not a very interesting subject. I never think of it myself.
**Algernon.** Very natural, I am sure. That will do, Lane, thank you.
**Lane.** Thank you, sir. [**Lane** goes out.]
**Algernon.** Lane's views on marriage seem somewhat lax. Really, if the lower orders dont set us a good example, what on earth is the use of them? They seem, as a class, to have absolutely no sense of moral responsibility.
[Enter **Lane**.]
**Lane.** Mr. Ernest Worthing.
[Enter **Jack**.]
[**Lane** goes out.]
**Algernon.** How are you, my dear Ernest? What brings you up to town?
**Jack.** Oh, pleasure, pleasure! What else should bring one anywhere? Eating as usual, I see, Algy!
**Algernon.** [Stiffly.] I believe it is customary in good society to take some slight refreshment at five oclock. Where have you been since last Thursday?
**Jack.** [Sitting down on the sofa.] In the country.
**Algernon.** What on earth do you do there?
**Jack.** [Pulling off his gloves.] When one is in town one amuses oneself. When one is in the country one amuses other people. It is excessively boring.
**Algernon.** And who are the people you amuse?
**Jack.** [Airily.] Oh, neighbours, neighbours.
**Algernon.** Got nice neighbours in your part of Shropshire?
**Jack.** Perfectly horrid! Never speak to one of them.
**Algernon.** How immensely you must amuse them! [Goes over and takes sandwich.] By the way, Shropshire is your county, is it not?
**Jack.** Eh? Shropshire? Yes, of course. Hallo! Why all these cups? Why cucumber sandwiches? Why such reckless extravagance in one so young? Who is coming to tea?
**Algernon.** Oh! merely Aunt Augusta and Gwendolen.
**Jack.** How perfectly delightful!
**Algernon.** Yes, that is all very well; but I am afraid Aunt Augusta wont quite approve of your being here.
**Jack.** May I ask why?
**Algernon.** My dear fellow, the way you flirt with Gwendolen is perfectly disgraceful. It is almost as bad as the way Gwendolen flirts with you.
**Jack.** I am in love with Gwendolen. I have come up to town expressly to propose to her.
**Algernon.** I thought you had come up for pleasure? . . . I call that business.
**Jack.** How utterly unromantic you are!
**Algernon.** I really dont see anything romantic in proposing. It is very romantic to be in love. But there is nothing romantic about a definite proposal. Why, one may be accepted. One usually is, I believe. Then the excitement is all over. The very essence of romance is uncertainty. If ever I get married, Ill certainly try to forget the fact.
**Jack.** I have no doubt about that, dear Algy. The Divorce Court was specially invented for people whose memories are so curiously constituted.
**Algernon.** Oh! there is no use speculating on that subject. Divorces are made in Heaven—[**Jack** puts out his hand to take a sandwich. **Algernon** at once interferes.] Please dont touch the cucumber sandwiches. They are ordered specially for Aunt Augusta. [Takes one and eats it.]
**Jack.** Well, you have been eating them all the time.
**Algernon.** That is quite a different matter. She is my aunt. [Takes plate from below.] Have some bread and butter. The bread and butter is for Gwendolen. Gwendolen is devoted to bread and butter.
**Jack.** [Advancing to table and helping himself.] And very good bread and butter it is too.
**Algernon.** Well, my dear fellow, you need not eat as if you were going to eat it all. You behave as if you were married to her already. You are not married to her already, and I dont think you ever will be.
**Jack.** Why on earth do you say that?
**Algernon.** Well, in the first place girls never marry the men they flirt with. Girls dont think it right.
**Jack.** Oh, that is nonsense!
**Algernon.** It isnt. It is a great truth. It accounts for the extraordinary number of bachelors that one sees all over the place. In the second place, I dont give my consent.
**Jack.** Your consent!
**Algernon.** My dear fellow, Gwendolen is my first cousin. And before I allow you to marry her, you will have to clear up the whole question of Cecily. [Rings bell.]
**Jack.** Cecily! What on earth do you mean? What do you mean, Algy, by Cecily! I dont know any one of the name of Cecily.
[Enter **Lane**.]
**Algernon.** Bring me that cigarette case Mr. Worthing left in the smoking-room the last time he dined here.
**Lane.** Yes, sir. [**Lane** goes out.]
**Jack.** Do you mean to say you have had my cigarette case all this time? I wish to goodness you had let me know. I have been writing frantic letters to Scotland Yard about it. I was very nearly offering a large reward.
**Algernon.** Well, I wish you would offer one. I happen to be more than usually hard up.
**Jack.** There is no good offering a large reward now that the thing is found.
[Enter **Lane** with the cigarette case on a salver. **Algernon** takes it at once. **Lane** goes out.]
**Algernon.** I think that is rather mean of you, Ernest, I must say. [Opens case and examines it.] However, it makes no matter, for, now that I look at the inscription inside, I find that the thing isnt yours after all.
**Jack.** Of course its mine. [Moving to him.] You have seen me with it a hundred times, and you have no right whatsoever to read what is written inside. It is a very ungentlemanly thing to read a private cigarette case.
**Algernon.** Oh! it is absurd to have a hard and fast rule about what one should read and what one shouldnt. More than half of modern culture depends on what one shouldnt read.
**Jack.** I am quite aware of the fact, and I dont propose to discuss modern culture. It isnt the sort of thing one should talk of in private. I simply want my cigarette case back.
**Algernon.** Yes; but this isnt your cigarette case. This cigarette case is a present from some one of the name of Cecily, and you said you didnt know any one of that name.
**Jack.** Well, if you want to know, Cecily happens to be my aunt.
**Algernon.** Your aunt!
**Jack.** Yes. Charming old lady she is, too. Lives at Tunbridge Wells. Just give it back to me, Algy.
**Algernon.** [Retreating to back of sofa.] But why does she call herself little Cecily if she is your aunt and lives at Tunbridge Wells? [Reading.] From little Cecily with her fondest love.
**Jack.** [Moving to sofa and kneeling upon it.] My dear fellow, what on earth is there in that? Some aunts are tall, some aunts are not tall. That is a matter that surely an aunt may be allowed to decide for herself. You seem to think that every aunt should be exactly like your aunt! That is absurd! For Heavens sake give me back my cigarette case. [Follows **Algernon** round the room.]
**Algernon.** Yes. But why does your aunt call you her uncle? From little Cecily, with her fondest love to her dear Uncle Jack. There is no objection, I admit, to an aunt being a small aunt, but why an aunt, no matter what her size may be, should call her own nephew her uncle, I cant quite make out. Besides, your name isnt Jack at all; it is Ernest.
**Jack.** It isnt Ernest; its Jack.
**Algernon.** You have always told me it was Ernest. I have introduced you to every one as Ernest. You answer to the name of Ernest. You look as if your name was Ernest. You are the most earnest-looking person I ever saw in my life. It is perfectly absurd your saying that your name isnt Ernest. Its on your cards. Here is one of them. [Taking it from case.] Mr. Ernest Worthing, B. 4, The Albany. Ill keep this as a proof that your name is Ernest if ever you attempt to deny it to me, or to Gwendolen, or to any one else. [Puts the card in his pocket.]
**Jack.** Well, my name is Ernest in town and Jack in the country, and the cigarette case was given to me in the country.
**Algernon.** Yes, but that does not account for the fact that your small Aunt Cecily, who lives at Tunbridge Wells, calls you her dear uncle. Come, old boy, you had much better have the thing out at once.
**Jack.** My dear Algy, you talk exactly as if you were a dentist. It is very vulgar to talk like a dentist when one isnt a dentist. It produces a false impression,
**Algernon.** Well, that is exactly what dentists always do. Now, go on! Tell me the whole thing. I may mention that I have always suspected you of being a confirmed and secret Bunburyist; and I am quite sure of it now.
**Jack.** Bunburyist? What on earth do you mean by a Bunburyist?
**Algernon.** Ill reveal to you the meaning of that incomparable expression as soon as you are kind enough to inform me why you are Ernest in town and Jack in the country.
**Jack.** Well, produce my cigarette case first.
**Algernon.** Here it is. [Hands cigarette case.] Now produce your explanation, and pray make it improbable. [Sits on sofa.]
**Jack.** My dear fellow, there is nothing improbable about my explanation at all. In fact its perfectly ordinary. Old Mr. Thomas Cardew, who adopted me when I was a little boy, made me in his will guardian to his grand-daughter, Miss Cecily Cardew. Cecily, who addresses me as her uncle from motives of respect that you could not possibly appreciate, lives at my place in the country under the charge of her admirable governess, Miss Prism.
**Algernon.** Where is that place in the country, by the way?
**Jack.** That is nothing to you, dear boy. You are not going to be invited . . . I may tell you candidly that the place is not in Shropshire.
**Algernon.** I suspected that, my dear fellow! I have Bunburyed all over Shropshire on two separate occasions. Now, go on. Why are you Ernest in town and Jack in the country?
**Jack.** My dear Algy, I dont know whether you will be able to understand my real motives. You are hardly serious enough. When one is placed in the position of guardian, one has to adopt a very high moral tone on all subjects. Its ones duty to do so. And as a high moral tone can hardly be said to conduce very much to either ones health or ones happiness, in order to get up to town I have always pretended to have a younger brother of the name of Ernest, who lives in the Albany, and gets into the most dreadful scrapes. That, my dear Algy, is the whole truth pure and simple.
**Algernon.** The truth is rarely pure and never simple. Modern life would be very tedious if it were either, and modern literature a complete impossibility!
**Jack.** That wouldnt be at all a bad thing.
**Algernon.** Literary criticism is not your forte, my dear fellow. Dont try it. You should leave that to people who havent been at a University. They do it so well in the daily papers. What you really are is a Bunburyist. I was quite right in saying you were a Bunburyist. You are one of the most advanced Bunburyists I know.
**Jack.** What on earth do you mean?
**Algernon.** You have invented a very useful younger brother called Ernest, in order that you may be able to come up to town as often as you like. I have invented an invaluable permanent invalid called Bunbury, in order that I may be able to go down into the country whenever I choose. Bunbury is perfectly invaluable. If it wasnt for Bunburys extraordinary bad health, for instance, I wouldnt be able to dine with you at Williss to-night, for I have been really engaged to Aunt Augusta for more than a week.
**Jack.** I havent asked you to dine with me anywhere to-night.
**Algernon.** I know. You are absurdly careless about sending out invitations. It is very foolish of you. Nothing annoys people so much as not receiving invitations.
**Jack.** You had much better dine with your Aunt Augusta.
**Algernon.** I havent the smallest intention of doing anything of the kind. To begin with, I dined there on Monday, and once a week is quite enough to dine with ones own relations. In the second place, whenever I do dine there I am always treated as a member of the family, and sent down with either no woman at all, or two. In the third place, I know perfectly well whom she will place me next to, to-night. She will place me next Mary Farquhar, who always flirts with her own husband across the dinner-table. That is not very pleasant. Indeed, it is not even decent . . . and that sort of thing is enormously on the increase. The amount of women in London who flirt with their own husbands is perfectly scandalous. It looks so bad. It is simply washing ones clean linen in public. Besides, now that I know you to be a confirmed Bunburyist I naturally want to talk to you about Bunburying. I want to tell you the rules.

@ -0,0 +1,249 @@
#lang pollen
Garden at the Manor House. A flight of grey stone steps leads up to the house. The garden, an old-fashioned one, full of roses. Time of year, July. Basket chairs, and a table covered with books, are set under a large yew-tree.
[**Miss Prism** discovered seated at the table. **Cecily** is at the back watering flowers.]
**Miss Prism.** [Calling.] Cecily, Cecily! Surely such a utilitarian occupation as the watering of flowers is rather Moultons duty than yours? Especially at a moment when intellectual pleasures await you. Your German grammar is on the table. Pray open it at page fifteen. We will repeat yesterdays lesson.
**Cecily.** [Coming over very slowly.] But I dont like German. It isnt at all a becoming language. I know perfectly well that I look quite plain after my German lesson.
**Miss Prism.** Child, you know how anxious your guardian is that you should improve yourself in every way. He laid particular stress on your German, as he was leaving for town yesterday. Indeed, he always lays stress on your German when he is leaving for town.
**Cecily.** Dear Uncle Jack is so very serious! Sometimes he is so serious that I think he cannot be quite well.
**Miss Prism.** [Drawing herself up.] Your guardian enjoys the best of health, and his gravity of demeanour is especially to be commended in one so comparatively young as he is. I know no one who has a higher sense of duty and responsibility.
**Cecily.** I suppose that is why he often looks a little bored when we three are together.
**Miss Prism.** Cecily! I am surprised at you. Mr. Worthing has many troubles in his life. Idle merriment and triviality would be out of place in his conversation. You must remember his constant anxiety about that unfortunate young man his brother.
**Cecily.** I wish Uncle Jack would allow that unfortunate young man, his brother, to come down here sometimes. We might have a good influence over him, Miss Prism. I am sure you certainly would. You know German, and geology, and things of that kind influence a man very much. [**Cecily** begins to write in her diary.]
**Miss Prism.** [Shaking her head.] I do not think that even I could produce any effect on a character that according to his own brothers admission is irretrievably weak and vacillating. Indeed I am not sure that I would desire to reclaim him. I am not in favour of this modern mania for turning bad people into good people at a moments notice. As a man sows so let him reap. You must put away your diary, Cecily. I really dont see why you should keep a diary at all.
**Cecily.** I keep a diary in order to enter the wonderful secrets of my life. If I didnt write them down, I should probably forget all about them.
**Miss Prism.** Memory, my dear Cecily, is the diary that we all carry about with us.
**Cecily.** Yes, but it usually chronicles the things that have never happened, and couldnt possibly have happened. I believe that Memory is responsible for nearly all the three-volume novels that Mudie sends us.
**Miss Prism.** Do not speak slightingly of the three-volume novel, Cecily. I wrote one myself in earlier days.
**Cecily.** Did you really, Miss Prism? How wonderfully clever you are! I hope it did not end happily? I dont like novels that end happily. They depress me so much.
**Miss Prism.** The good ended happily, and the bad unhappily. That is what Fiction means.
**Cecily.** I suppose so. But it seems very unfair. And was your novel ever published?
**Miss Prism.** Alas! no. The manuscript unfortunately was abandoned. [**Cecily** starts.] I use the word in the sense of lost or mislaid. To your work, child, these speculations are profitless.
**Cecily.** [Smiling.] But I see dear Dr. Chasuble coming up through the garden.
**Miss Prism.** [Rising and advancing.] Dr. Chasuble! This is indeed a pleasure.
[Enter **Canon Chasuble**.]
**Chasuble.** And how are we this morning? Miss Prism, you are, I trust, well?
**Cecily.** Miss Prism has just been complaining of a slight headache. I think it would do her so much good to have a short stroll with you in the Park, Dr. Chasuble.
**Miss Prism.** Cecily, I have not mentioned anything about a headache.
**Cecily.** No, dear Miss Prism, I know that, but I felt instinctively that you had a headache. Indeed I was thinking about that, and not about my German lesson, when the Rector came in.
**Chasuble.** I hope, Cecily, you are not inattentive.
**Cecily.** Oh, I am afraid I am.
**Chasuble.** That is strange. Were I fortunate enough to be Miss Prisms pupil, I would hang upon her lips. [**Miss Prism** glares.] I spoke metaphorically.—My metaphor was drawn from bees. Ahem! Mr. Worthing, I suppose, has not returned from town yet?
**Miss Prism.** We do not expect him till Monday afternoon.
**Chasuble.** Ah yes, he usually likes to spend his Sunday in London. He is not one of those whose sole aim is enjoyment, as, by all accounts, that unfortunate young man his brother seems to be. But I must not disturb Egeria and her pupil any longer.
**Miss Prism.** Egeria? My name is Lætitia, Doctor.
**Chasuble.** [Bowing.] A classical allusion merely, drawn from the Pagan authors. I shall see you both no doubt at Evensong?
**Miss Prism.** I think, dear Doctor, I will have a stroll with you. I find I have a headache after all, and a walk might do it good.
**Chasuble.** With pleasure, Miss Prism, with pleasure. We might go as far as the schools and back.
**Miss Prism.** That would be delightful. Cecily, you will read your Political Economy in my absence. The chapter on the Fall of the Rupee you may omit. It is somewhat too sensational. Even these metallic problems have their melodramatic side.
[Goes down the garden with **Dr. Chasuble**.]
**Cecily.** [Picks up books and throws them back on table.] Horrid Political Economy! Horrid Geography! Horrid, horrid German!
[Enter **Merriman** with a card on a salver.]
**Merriman**. Mr. Ernest Worthing has just driven over from the station. He has brought his luggage with him.
**Cecily.** [Takes the card and reads it.] Mr. Ernest Worthing, B. 4, The Albany, W. Uncle Jacks brother! Did you tell him Mr. Worthing was in town?
**Merriman**. Yes, Miss. He seemed very much disappointed. I mentioned that you and Miss Prism were in the garden. He said he was anxious to speak to you privately for a moment.
**Cecily.** Ask Mr. Ernest Worthing to come here. I suppose you had better talk to the housekeeper about a room for him.
**Merriman**. Yes, Miss.
[**Merriman** goes off.]
**Cecily.** I have never met any really wicked person before. I feel rather frightened. I am so afraid he will look just like every one else.
[Enter **Algernon**, very gay and debonnair.] He does!
**Algernon.** [Raising his hat.] You are my little cousin Cecily, Im sure.
**Cecily.** You are under some strange mistake. I am not little. In fact, I believe I am more than usually tall for my age. [**Algernon** is rather taken aback.] But I am your cousin Cecily. You, I see from your card, are Uncle Jacks brother, my cousin Ernest, my wicked cousin Ernest.
**Algernon.** Oh! I am not really wicked at all, cousin Cecily. You mustnt think that I am wicked.
**Cecily.** If you are not, then you have certainly been deceiving us all in a very inexcusable manner. I hope you have not been leading a double life, pretending to be wicked and being really good all the time. That would be hypocrisy.
**Algernon.** [Looks at her in amazement.] Oh! Of course I have been rather reckless.
**Cecily.** I am glad to hear it.
**Algernon.** In fact, now you mention the subject, I have been very bad in my own small way.
**Cecily.** I dont think you should be so proud of that, though I am sure it must have been very pleasant.
**Algernon.** It is much pleasanter being here with you.
**Cecily.** I cant understand how you are here at all. Uncle Jack wont be back till Monday afternoon.
**Algernon.** That is a great disappointment. I am obliged to go up by the first train on Monday morning. I have a business appointment that I am anxious . . . to miss?
**Cecily.** Couldnt you miss it anywhere but in London?
**Algernon.** No: the appointment is in London.
**Cecily.** Well, I know, of course, how important it is not to keep a business engagement, if one wants to retain any sense of the beauty of life, but still I think you had better wait till Uncle Jack arrives. I know he wants to speak to you about your emigrating.
**Algernon.** About my what?
**Cecily.** Your emigrating. He has gone up to buy your outfit.
**Algernon.** I certainly wouldnt let Jack buy my outfit. He has no taste in neckties at all.
**Cecily.** I dont think you will require neckties. Uncle Jack is sending you to Australia.
**Algernon.** Australia! Id sooner die.
**Cecily.** Well, he said at dinner on Wednesday night, that you would have to choose between this world, the next world, and Australia.
**Algernon.** Oh, well! The accounts I have received of Australia and the next world, are not particularly encouraging. This world is good enough for me, cousin Cecily.
**Cecily.** Yes, but are you good enough for it?
**Algernon.** Im afraid Im not that. That is why I want you to reform me. You might make that your mission, if you dont mind, cousin Cecily.
**Cecily.** Im afraid Ive no time, this afternoon.
**Algernon.** Well, would you mind my reforming myself this afternoon?
**Cecily.** It is rather Quixotic of you. But I think you should try.
**Algernon.** I will. I feel better already.
**Cecily.** You are looking a little worse.
**Algernon.** That is because I am hungry.
**Cecily.** How thoughtless of me. I should have remembered that when one is going to lead an entirely new life, one requires regular and wholesome meals. Wont you come in?
**Algernon.** Thank you. Might I have a buttonhole first? I never have any appetite unless I have a buttonhole first.
**Cecily.** A Marechal Niel? [Picks up scissors.]
**Algernon.** No, Id sooner have a pink rose.
**Cecily.** Why? [Cuts a flower.]
**Algernon.** Because you are like a pink rose, Cousin Cecily.
**Cecily.** I dont think it can be right for you to talk to me like that. Miss Prism never says such things to me.
**Algernon.** Then Miss Prism is a short-sighted old lady. [**Cecily** puts the rose in his buttonhole.] You are the prettiest girl I ever saw.
**Cecily.** Miss Prism says that all good looks are a snare.
**Algernon.** They are a snare that every sensible man would like to be caught in.
**Cecily.** Oh, I dont think I would care to catch a sensible man. I shouldnt know what to talk to him about.
[They pass into the house. **Miss Prism** and **Dr. Chasuble** return.]
**Miss Prism.** You are too much alone, dear Dr. Chasuble. You should get married. A misanthrope I can understand—a womanthrope, never!
**Chasuble.** [With a scholars shudder.] Believe me, I do not deserve so neologistic a phrase. The precept as well as the practice of the Primitive Church was distinctly against matrimony.
**Miss Prism.** [Sententiously.] That is obviously the reason why the Primitive Church has not lasted up to the present day. And you do not seem to realise, dear Doctor, that by persistently remaining single, a man converts himself into a permanent public temptation. Men should be more careful; this very celibacy leads weaker vessels astray.
**Chasuble.** But is a man not equally attractive when married?
**Miss Prism.** No married man is ever attractive except to his wife.
**Chasuble.** And often, Ive been told, not even to her.
**Miss Prism.** That depends on the intellectual sympathies of the woman. Maturity can always be depended on. Ripeness can be trusted. Young women are green. [**Dr. Chasuble** starts.] I spoke horticulturally. My metaphor was drawn from fruits. But where is Cecily?
**Chasuble.** Perhaps she followed us to the schools.
[Enter **Jack** slowly from the back of the garden. He is dressed in the deepest mourning, with crape hatband and black gloves.]
**Miss Prism.** Mr. Worthing!
**Chasuble.** Mr. Worthing?
**Miss Prism.** This is indeed a surprise. We did not look for you till Monday afternoon.
**Jack.** [Shakes **Miss Prisms** hand in a tragic manner.] I have returned sooner than I expected. Dr. Chasuble, I hope you are well?
**Chasuble.** Dear Mr. Worthing, I trust this garb of woe does not betoken some terrible calamity?
**Jack.** My brother.
**Miss Prism.** More shameful debts and extravagance?
**Chasuble.** Still leading his life of pleasure?
**Jack.** [Shaking his head.] Dead!
**Chasuble.** Your brother Ernest dead?
**Jack.** Quite dead.
**Miss Prism.** What a lesson for him! I trust he will profit by it.
**Chasuble.** Mr. Worthing, I offer you my sincere condolence. You have at least the consolation of knowing that you were always the most generous and forgiving of brothers.
**Jack.** Poor Ernest! He had many faults, but it is a sad, sad blow.
**Chasuble.** Very sad indeed. Were you with him at the end?
**Jack.** No. He died abroad; in Paris, in fact. I had a telegram last night from the manager of the Grand Hotel.
**Chasuble.** Was the cause of death mentioned?
**Jack.** A severe chill, it seems.
**Miss Prism.** As a man sows, so shall he reap.
**Chasuble.** [Raising his hand.] Charity, dear Miss Prism, charity! None of us are perfect. I myself am peculiarly susceptible to draughts. Will the interment take place here?
**Jack.** No. He seems to have expressed a desire to be buried in Paris.
**Chasuble.** In Paris! [Shakes his head.] I fear that hardly points to any very serious state of mind at the last. You would no doubt wish me to make some slight allusion to this tragic domestic affliction next Sunday. [**Jack** presses his hand convulsively.] My sermon on the meaning of the manna in the wilderness can be adapted to almost any occasion, joyful, or, as in the present case, distressing. [All sigh.] I have preached it at harvest celebrations, christenings, confirmations, on days of humiliation and festal days. The last time I delivered it was in the Cathedral, as a charity sermon on behalf of the Society for the Prevention of Discontent among the Upper Orders. The Bishop, who was present, was much struck by some of the analogies I drew.
**Jack.** Ah! that reminds me, you mentioned christenings I think, Dr. Chasuble? I suppose you know how to christen all right? [**Dr. Chasuble** looks astounded.] I mean, of course, you are continually christening, arent you?
**Miss Prism.** It is, I regret to say, one of the Rectors most constant duties in this parish. I have often spoken to the poorer classes on the subject. But they dont seem to know what thrift is.
**Chasuble.** But is there any particular infant in whom you are interested, Mr. Worthing? Your brother was, I believe, unmarried, was he not?
**Jack.** Oh yes.
**Miss Prism.** [Bitterly.] People who live entirely for pleasure usually are.

@ -0,0 +1,211 @@
#lang pollen
Morning-room at the Manor House.
[**Gwendolen** and **Cecily** are at the window, looking out into the garden.]
**Gwendolen.** The fact that they did not follow us at once into the house, as any one else would have done, seems to me to show that they have some sense of shame left.
**Cecily.** They have been eating muffins. That looks like repentance.
**Gwendolen.** [After a pause.] They dont seem to notice us at all. Couldnt you cough?
**Cecily.** But I havent got a cough.
**Gwendolen.** Theyre looking at us. What effrontery!
**Cecily.** Theyre approaching. Thats very forward of them.
**Gwendolen.** Let us preserve a dignified silence.
**Cecily.** Certainly. Its the only thing to do now. [Enter **Jack** followed by **Algernon**. They whistle some dreadful popular air from a British Opera.]
**Gwendolen.** This dignified silence seems to produce an unpleasant effect.
**Cecily.** A most distasteful one.
**Gwendolen.** But we will not be the first to speak.
**Cecily.** Certainly not.
**Gwendolen.** Mr. Worthing, I have something very particular to ask you. Much depends on your reply.
**Cecily.** Gwendolen, your common sense is invaluable. Mr. Moncrieff, kindly answer me the following question. Why did you pretend to be my guardians brother?
**Algernon.** In order that I might have an opportunity of meeting you.
**Cecily.** [To **Gwendolen**.] That certainly seems a satisfactory explanation, does it not?
**Gwendolen.** Yes, dear, if you can believe him.
**Cecily.** I dont. But that does not affect the wonderful beauty of his answer.
**Gwendolen.** True. In matters of grave importance, style, not sincerity is the vital thing. Mr. Worthing, what explanation can you offer to me for pretending to have a brother? Was it in order that you might have an opportunity of coming up to town to see me as often as possible?
**Jack.** Can you doubt it, Miss Fairfax?
**Gwendolen.** I have the gravest doubts upon the subject. But I intend to crush them. This is not the moment for German scepticism. [Moving to **Cecily**.] Their explanations appear to be quite satisfactory, especially Mr. Worthings. That seems to me to have the stamp of truth upon it.
**Cecily.** I am more than content with what Mr. Moncrieff said. His voice alone inspires one with absolute credulity.
**Gwendolen.** Then you think we should forgive them?
**Cecily.** Yes. I mean no.
**Gwendolen.** True! I had forgotten. There are principles at stake that one cannot surrender. Which of us should tell them? The task is not a pleasant one.
**Cecily.** Could we not both speak at the same time?
**Gwendolen.** An excellent idea! I nearly always speak at the same time as other people. Will you take the time from me?
**Cecily.** Certainly. [**Gwendolen** beats time with uplifted finger.]
**Gwendolen** and **Cecily** [Speaking together.] Your Christian names are still an insuperable barrier. That is all!
**Jack** and **Algernon** [Speaking together.] Our Christian names! Is that all? But we are going to be christened this afternoon.
**Gwendolen.** [To **Jack**.] For my sake you are prepared to do this terrible thing?
**Jack.** I am.
**Cecily.** [To **Algernon**.] To please me you are ready to face this fearful ordeal?
**Algernon.** I am!
**Gwendolen.** How absurd to talk of the equality of the sexes! Where questions of self-sacrifice are concerned, men are infinitely beyond us.
**Jack.** We are. [Clasps hands with **Algernon**.]
**Cecily.** They have moments of physical courage of which we women know absolutely nothing.
**Gwendolen.** [To **Jack**.] Darling!
**Algernon.** [To **Cecily**.] Darling! [They fall into each others arms.]
[Enter **Merriman**. When he enters he coughs loudly, seeing the situation.]
**Merriman.** Ahem! Ahem! Lady Bracknell!
**Jack.** Good heavens!
[Enter **Lady Bracknell**. The couples separate in alarm. Exit **Merriman**.]
**Lady Bracknell.** Gwendolen! What does this mean?
**Gwendolen.** Merely that I am engaged to be married to Mr. Worthing, mamma.
**Lady Bracknell.** Come here. Sit down. Sit down immediately. Hesitation of any kind is a sign of mental decay in the young, of physical weakness in the old. [Turns to **Jack**.] Apprised, sir, of my daughters sudden flight by her trusty maid, whose confidence I purchased by means of a small coin, I followed her at once by a luggage train. Her unhappy father is, I am glad to say, under the impression that she is attending a more than usually lengthy lecture by the University Extension Scheme on the Influence of a permanent income on Thought. I do not propose to undeceive him. Indeed I have never undeceived him on any question. I would consider it wrong. But of course, you will clearly understand that all communication between yourself and my daughter must cease immediately from this moment. On this point, as indeed on all points, I am firm.
**Jack.** I am engaged to be married to Gwendolen Lady Bracknell!
**Lady Bracknell.** You are nothing of the kind, sir. And now, as regards Algernon! . . . Algernon!
**Algernon.** Yes, Aunt Augusta.
**Lady Bracknell.** May I ask if it is in this house that your invalid friend Mr. Bunbury resides?
**Algernon.** [Stammering.] Oh! No! Bunbury doesnt live here. Bunbury is somewhere else at present. In fact, Bunbury is dead,
**Lady Bracknell.** Dead! When did Mr. Bunbury die? His death must have been extremely sudden.
**Algernon.** [Airily.] Oh! I killed Bunbury this afternoon. I mean poor Bunbury died this afternoon.
**Lady Bracknell.** What did he die of?
**Algernon.** Bunbury? Oh, he was quite exploded.
**Lady Bracknell.** Exploded! Was he the victim of a revolutionary outrage? I was not aware that Mr. Bunbury was interested in social legislation. If so, he is well punished for his morbidity.
**Algernon.** My dear Aunt Augusta, I mean he was found out! The doctors found out that Bunbury could not live, that is what I mean—so Bunbury died.
**Lady Bracknell.** He seems to have had great confidence in the opinion of his physicians. I am glad, however, that he made up his mind at the last to some definite course of action, and acted under proper medical advice. And now that we have finally got rid of this Mr. Bunbury, may I ask, Mr. Worthing, who is that young person whose hand my nephew Algernon is now holding in what seems to me a peculiarly unnecessary manner?
**Jack.** That lady is Miss Cecily Cardew, my ward. [**Lady Bracknell** bows coldly to **Cecily**.]
**Algernon.** I am engaged to be married to Cecily, Aunt Augusta.
**Lady Bracknell.** I beg your pardon?
**Cecily.** Mr. Moncrieff and I are engaged to be married, Lady Bracknell.
**Lady Bracknell.** [With a shiver, crossing to the sofa and sitting down.] I do not know whether there is anything peculiarly exciting in the air of this particular part of Hertfordshire, but the number of engagements that go on seems to me considerably above the proper average that statistics have laid down for our guidance. I think some preliminary inquiry on my part would not be out of place. Mr. Worthing, is Miss Cardew at all connected with any of the larger railway stations in London? I merely desire information. Until yesterday I had no idea that there were any families or persons whose origin was a Terminus. [**Jack** looks perfectly furious, but restrains himself.]
**Jack.** [In a clear, cold voice.] Miss Cardew is the grand-daughter of the late Mr. Thomas Cardew of 149 Belgrave Square, S.W.; Gervase Park, Dorking, Surrey; and the Sporran, Fifeshire, N.B.
**Lady Bracknell.** That sounds not unsatisfactory. Three addresses always inspire confidence, even in tradesmen. But what proof have I of their authenticity?
**Jack.** I have carefully preserved the Court Guides of the period. They are open to your inspection, Lady Bracknell.
**Lady Bracknell.** [Grimly.] I have known strange errors in that publication.
**Jack.** Miss Cardews family solicitors are Messrs. Markby, Markby, and Markby.
**Lady Bracknell.** Markby, Markby, and Markby? A firm of the very highest position in their profession. Indeed I am told that one of the Mr. Markbys is occasionally to be seen at dinner parties. So far I am satisfied.
**Jack.** [Very irritably.] How extremely kind of you, Lady Bracknell! I have also in my possession, you will be pleased to hear, certificates of Miss Cardews birth, baptism, whooping cough, registration, vaccination, confirmation, and the measles; both the German and the English variety.
**Lady Bracknell.** Ah! A life crowded with incident, I see; though perhaps somewhat too exciting for a young girl. I am not myself in favour of premature experiences. [Rises, looks at her watch.] Gwendolen! the time approaches for our departure. We have not a moment to lose. As a matter of form, Mr. Worthing, I had better ask you if Miss Cardew has any little fortune?
**Jack.** Oh! about a hundred and thirty thousand pounds in the Funds. That is all. Goodbye, Lady Bracknell. So pleased to have seen you.
**Lady Bracknell.** [Sitting down again.] A moment, Mr. Worthing. A hundred and thirty thousand pounds! And in the Funds! Miss Cardew seems to me a most attractive young lady, now that I look at her. Few girls of the present day have any really solid qualities, any of the qualities that last, and improve with time. We live, I regret to say, in an age of surfaces. [To **Cecily**.] Come over here, dear. [**Cecily** goes across.] Pretty child! your dress is sadly simple, and your hair seems almost as Nature might have left it. But we can soon alter all that. A thoroughly experienced French maid produces a really marvellous result in a very brief space of time. I remember recommending one to young Lady Lancing, and after three months her own husband did not know her.
**Jack.** And after six months nobody knew her.
**Lady Bracknell.** [Glares at **Jack** for a few moments. Then bends, with a practised smile, to **Cecily**.] Kindly turn round, sweet child. [**Cecily** turns completely round.] No, the side view is what I want. [**Cecily** presents her profile.] Yes, quite as I expected. There are distinct social possibilities in your profile. The two weak points in our age are its want of principle and its want of profile. The chin a little higher, dear. Style largely depends on the way the chin is worn. They are worn very high, just at present. Algernon!
**Algernon.** Yes, Aunt Augusta!
**Lady Bracknell.** There are distinct social possibilities in Miss Cardews profile.
**Algernon.** Cecily is the sweetest, dearest, prettiest girl in the whole world. And I dont care twopence about social possibilities.
**Lady Bracknell.** Never speak disrespectfully of Society, Algernon. Only people who cant get into it do that. [To **Cecily**.] Dear child, of course you know that Algernon has nothing but his debts to depend upon. But I do not approve of mercenary marriages. When I married Lord Bracknell I had no fortune of any kind. But I never dreamed for a moment of allowing that to stand in my way. Well, I suppose I must give my consent.
**Algernon.** Thank you, Aunt Augusta.
**Lady Bracknell.** Cecily, you may kiss me!
**Cecily.** [Kisses her.] Thank you, Lady Bracknell.
**Lady Bracknell.** You may also address me as Aunt Augusta for the future.
**Cecily.** Thank you, Aunt Augusta.
**Lady Bracknell.** The marriage, I think, had better take place quite soon.
**Algernon.** Thank you, Aunt Augusta.
**Cecily.** Thank you, Aunt Augusta.
**Lady Bracknell.** To speak frankly, I am not in favour of long engagements. They give people the opportunity of finding out each others character before marriage, which I think is never advisable.
**Jack.** I beg your pardon for interrupting you, Lady Bracknell, but this engagement is quite out of the question. I am Miss Cardews guardian, and she cannot marry without my consent until she comes of age. That consent I absolutely decline to give.
**Lady Bracknell.** Upon what grounds may I ask? Algernon is an extremely, I may almost say an ostentatiously, eligible young man. He has nothing, but he looks everything. What more can one desire?
**Jack.** It pains me very much to have to speak frankly to you, Lady Bracknell, about your nephew, but the fact is that I do not approve at all of his moral character. I suspect him of being untruthful. [**Algernon** and **Cecily** look at him in indignant amazement.]
**Lady Bracknell.** Untruthful! My nephew Algernon? Impossible! He is an Oxonian.
**Jack.** I fear there can be no possible doubt about the matter. This afternoon during my temporary absence in London on an important question of romance, he obtained admission to my house by means of the false pretence of being my brother. Under an assumed name he drank, Ive just been informed by my butler, an entire pint bottle of my Perrier-Jouet, Brut, 89; wine I was specially reserving for myself. Continuing his disgraceful deception, he succeeded in the course of the afternoon in alienating the affections of my only ward. He subsequently stayed to tea, and devoured every single muffin. And what makes his conduct all the more heartless is, that he was perfectly well aware from the first that I have no brother, that I never had a brother, and that I dont intend to have a brother, not even of any kind. I distinctly told him so myself yesterday afternoon.
**Lady Bracknell.** Ahem! Mr. Worthing, after careful consideration I have decided entirely to overlook my nephews conduct to you.
**Jack.** That is very generous of you, Lady Bracknell. My own decision, however, is unalterable. I decline to give my consent.
**Lady Bracknell.** [To **Cecily**.] Come here, sweet child. [**Cecily** goes over.] How old are you, dear?
**Cecily.** Well, I am really only eighteen, but I always admit to twenty when I go to evening parties.
**Lady Bracknell.** You are perfectly right in making some slight alteration. Indeed, no woman should ever be quite accurate about her age. It looks so calculating . . . [In a meditative manner.] Eighteen, but admitting to twenty at evening parties. Well, it will not be very long before you are of age and free from the restraints of tutelage. So I dont think your guardians consent is, after all, a matter of any importance.
**Jack.** Pray excuse me, Lady Bracknell, for interrupting you again, but it is only fair to tell you that according to the terms of her grandfathers will Miss Cardew does not come legally of age till she is thirty-five.
**Lady Bracknell.** That does not seem to me to be a grave objection. Thirty-five is a very attractive age. London society is full of women of the very highest birth who have, of their own free choice, remained thirty-five for years. Lady Dumbleton is an instance in point. To my own knowledge she has been thirty-five ever since she arrived at the age of forty, which was many years ago now. I see no reason why our dear Cecily should not be even still more attractive at the age you mention than she is at present. There will be a large accumulation of property.
**Cecily.** Algy, could you wait for me till I was thirty-five?
**Algernon.** Of course I could, Cecily. You know I could.
**Cecily.** Yes, I felt it instinctively, but I couldnt wait all that time. I hate waiting even five minutes for anybody. It always makes me rather cross. I am not punctual myself, I know, but I do like punctuality in others, and waiting, even to be married, is quite out of the question.

@ -0,0 +1,81 @@
<html>
<body>
<pre>
"Ulysses" by Alfred Tennyson
It little profits that an idle king,
By this still hearth, among these barren crags,
Match'd with an aged wife, I mete and dole
Unequal laws unto a savage race,
That hoard, and sleep, and feed, and know not me.
I cannot rest from travel: I will drink
Life to the lees; all times I have enjoy'd
Greatly, have suffer'd greatly, both with those
That loved me, and alone; on shore, and when
Thro' scudding drifts the rainy Hyades
Vext the dim sea: I am become a name;
For always roaming with a hungry heart
Much have I seen and known; cities of men
And manners, climates, councils, governments,
Myself not least, but honour'd of them all;
And drunk delight of battle with my peers,
Far on the ringing plains of windy Troy,
I am a part of all that I have met;
Yet all experience is an arch wherethro'
Gleams that untravell'd world, whose margin fades
For ever and for ever when I move.
How dull it is to pause, to make an end,
To rust unburnish'd, not to shine in use!
As tho' to breathe were life. Life piled on life
Were all too little, and of one to me
Little remains: but every hour is saved
From that eternal silence, something more,
A bringer of new things; and vile it were
For some three suns to store and hoard myself,
And this gray spirit yearning in desire
To follow knowledge like a sinking star,
Beyond the utmost bound of human thought.
This is my son, mine own Telemachus,
To whom I leave the scepter and the isle—
Well-loved of me, discerning to fulfil
This labour, by slow prudence to make mild
A rugged people, and thro' soft degrees
Subdue them to the useful and the good.
Most blameless is he, centred in the sphere
Of common duties, decent not to fail
In offices of tenderness, and pay
Meet adoration to my household gods,
When I am gone. He works his work, I mine.
There lies the port; the vessel puffs her sail:
There gloom the dark broad seas. My mariners,
Souls that have toil'd, and wrought, and thought with me—
That ever with a frolic welcome took
The thunder and the sunshine, and opposed
Free hearts, free foreheads—you and I are old;
Old age hath yet his honour and his toil;
Death closes all: but something ere the end,
Some work of noble note, may yet be done,
Not unbecoming men that strove with Gods.
The lights begin to twinkle from the rocks:
The long day wanes: the slow moon climbs: the deep
Moans round with many voices. Come, my friends,
'Tis not too late to seek a newer world.
Push off, and sitting well in order smite
The sounding furrows; for my purpose holds
To sail beyond the sunset, and the baths
Of all the western stars, until I die.
It may be that the gulfs will wash us down:
It may be we shall touch the Happy Isles,
And see the great Achilles, whom we knew.
Tho' much is taken, much abides; and tho'
We are not now that strength which in old days
Moved earth and heaven; that which we are, we are;
One equal temper of heroic hearts,
Made weak by time and fate, but strong in will
To strive, to seek, to find, and not to yield.

@ -0,0 +1,89 @@
#lang pollen
<<<<<<< HEAD
<html>
<body>
<pre>
=======
>>>>>>> squash! earnest
"Ulysses" by Alfred Tennyson
It little profits that an idle king,
By this still hearth, among these barren crags,
Match'd with an aged wife, I mete and dole
Unequal laws unto a savage race,
That hoard, and sleep, and feed, and know not me.
I cannot rest from travel: I will drink
Life to the lees; all times I have enjoy'd
Greatly, have suffer'd greatly, both with those
That loved me, and alone; on shore, and when
Thro' scudding drifts the rainy Hyades
Vext the dim sea: I am become a name;
For always roaming with a hungry heart
Much have I seen and known; cities of men
And manners, climates, councils, governments,
Myself not least, but honour'd of them all;
And drunk delight of battle with my peers,
Far on the ringing plains of windy Troy,
I am a part of all that I have met;
Yet all experience is an arch wherethro'
Gleams that untravell'd world, whose margin fades
For ever and for ever when I move.
How dull it is to pause, to make an end,
To rust unburnish'd, not to shine in use!
As tho' to breathe were life. Life piled on life
Were all too little, and of one to me
Little remains: but every hour is saved
From that eternal silence, something more,
A bringer of new things; and vile it were
For some three suns to store and hoard myself,
And this gray spirit yearning in desire
To follow knowledge like a sinking star,
Beyond the utmost bound of human thought.
This is my son, mine own Telemachus,
To whom I leave the scepter and the isle
Well-loved of me, discerning to fulfil
This labour, by slow prudence to make mild
A rugged people, and thro' soft degrees
Subdue them to the useful and the good.
Most blameless is he, centred in the sphere
Of common duties, decent not to fail
In offices of tenderness, and pay
Meet adoration to my household gods,
When I am gone. He works his work, I mine.
There lies the port; the vessel puffs her sail:
There gloom the dark broad seas. My mariners,
Souls that have toil'd, and wrought, and thought with me
That ever with a frolic welcome took
The thunder and the sunshine, and opposed
Free hearts, free foreheadsyou and I are old;
Old age hath yet his honour and his toil;
Death closes all: but something ere the end,
Some work of noble note, may yet be done,
Not unbecoming men that strove with Gods.
The lights begin to twinkle from the rocks:
The long day wanes: the slow moon climbs: the deep
Moans round with many voices. Come, my friends,
'Tis not too late to seek a newer world.
Push off, and sitting well in order smite
The sounding furrows; for my purpose holds
To sail beyond the sunset, and the baths
Of all the western stars, until I die.
It may be that the gulfs will wash us down:
It may be we shall touch the Happy Isles,
And see the great Achilles, whom we knew.
Tho' much is taken, much abides; and tho'
We are not now that strength which in old days
Moved earth and heaven; that which we are, we are;
One equal temper of heroic hearts,
Made weak by time and fate, but strong in will
<<<<<<< HEAD
To strive, to seek, to find, and not to yield.
=======
To strive, to seek, to find, and not to yield.
>>>>>>> squash! earnest

@ -0,0 +1,81 @@
#lang pollen
APRIL is the cruellest month, breeding
Lilacs out of the dead land, mixing
Memory and desire, stirring
Dull roots with spring rain.
Winter kept us warm, covering
Earth in forgetful snow, feeding
A little life with dried tubers.
Summer surprised us, coming over the Starnbergersee
With a shower of rain; we stopped in the colonnade,
And went on in sunlight, into the Hofgarten,
And drank coffee, and talked for an hour.
Bin gar keine Russin, stamm aus Litauen, echt deutsch.
And when we were children, staying at the archdukes,
My cousins, he took me out on a sled,
And I was frightened. He said, Marie,
Marie, hold on tight. And down we went.
In the mountains, there you feel free.
I read, much of the night, and go south in the winter.
What are the roots that clutch, what branches grow
Out of this stony rubbish? Son of man,
You cannot say, or guess, for you know only
A heap of broken images, where the sun beats,
And the dead tree gives no shelter, the cricket no relief,
And the dry stone no sound of water. Only
There is shadow under this red rock,
(Come in under the shadow of this red rock),
And I will show you something different from either
Your shadow at morning striding behind you
Or your shadow at evening rising to meet you;
I will show you fear in a handful of dust.
Frisch weht der Wind
Der Heimat zu,
Mein Irisch Kind,
Wo weilest du?
You gave me hyacinths first a year ago;
They called me the hyacinth girl.
Yet when we came back, late, from the Hyacinth garden,
Your arms full, and your hair wet, I could not
Speak, and my eyes failed, I was neither
Living nor dead, and I knew nothing,
Looking into the heart of light, the silence.
Öd und leer das Meer.
Madame Sosostris, famous clairvoyante,
Had a bad cold, nevertheless
Is known to be the wisest woman in Europe,
With a wicked pack of cards. Here, said she,
Is your card, the drowned Phoenician Sailor,
(Those are pearls that were his eyes. Look!)
Here is Belladonna, the Lady of the Rocks,
The lady of situations.
Here is the man with three staves, and here the Wheel,
And here is the one-eyed merchant, and this card,
Which is blank, is something he carries on his back,
Which I am forbidden to see. I do not find
The Hanged Man. Fear death by water.
I see crowds of people, walking round in a ring.
Thank you. If you see dear Mrs. Equitone,
Tell her I bring the horoscope myself:
One must be so careful these days.
Unreal City,
Under the brown fog of a winter dawn,
A crowd flowed over London Bridge, so many,
I had not thought death had undone so many.
Sighs, short and infrequent, were exhaled,
And each man fixed his eyes before his feet.
Flowed up the hill and down King William Street,
To where Saint Mary Woolnoth kept the hours
With a dead sound on the final stroke of nine.
There I saw one I knew, and stopped him, crying Stetson!
You who were with me in the ships at Mylae!
That corpse you planted last year in your garden,
Has it begun to sprout? Will it bloom this year?
Or has the sudden frost disturbed its bed?
Oh keep the Dog far hence, thats friend to men,
Or with his nails hell dig it up again!
You! hypocrite lecteur!mon semblable,mon frère!

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

@ -0,0 +1,48 @@
body {
margin: 0 auto 0 auto;
padding: 0;
}
h1 {
font-size: 40px;
font-family: "Alegreya Sans";
font-weight: 700;
color: white;
margin-top: -5rem;
margin-left: 15%;
margin-right: 15%;
}
h2 {
font-size: 22px;
font-family: "Alegreya Sans";
font-weight: 700;
margin-left: 15%;
margin-right: 15%;
}
p {
color: #333;
font-size: 22px;
line-height: 1.4;
font-family: "Alegreya";
margin-left: 15%;
margin-right: 15%;
}
pre {
margin-left: 15%;
margin-right: 15%;
}
code {
font-family: "Source Code Pro";
}
img {
width: 100%;
}

@ -0,0 +1,9 @@
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
</head>
<body>
◊(->html doc)
</body>
</html>
Loading…
Cancel
Save