Continuous Integration in NET Marcin Kawalerowicz
download pdf
https://ebookultra.com/download/continuous-integration-in-net-marcin-
kawalerowicz/
Visit ebookultra.com today to download the complete set of
ebook or textbook!
We have selected some products that you may be interested in
Click the link to download now or visit ebookultra.com
for more options!.
Learning Continuous Integration with Jenkins A beginner s
guide to implementing Continuous Integration and
Continuous Delivery using Jenkins 2 2nd Edition Nikhil
Pathania
https://ebookultra.com/download/learning-continuous-integration-with-
jenkins-a-beginner-s-guide-to-implementing-continuous-integration-and-
continuous-delivery-using-jenkins-2-2nd-edition-nikhil-pathania/
Deployment with Docker Apply continuous integration models
deploy applications quicker and scale at large by putting
Docker to work 1st Edition Srdjan Grubor
https://ebookultra.com/download/deployment-with-docker-apply-
continuous-integration-models-deploy-applications-quicker-and-scale-
at-large-by-putting-docker-to-work-1st-edition-srdjan-grubor/
Foundations of ASP NET AJAX Expert s Voice in Net 2nd
Edition Robin Pars
https://ebookultra.com/download/foundations-of-asp-net-ajax-expert-s-
voice-in-net-2nd-edition-robin-pars/
The Syringe Driver Continuous subcutaneous infusions in
palliative care Andrew Dickman
https://ebookultra.com/download/the-syringe-driver-continuous-
subcutaneous-infusions-in-palliative-care-andrew-dickman/
ASP NET 4 0 in Practice Daniele Bochicchio
https://ebookultra.com/download/asp-net-4-0-in-practice-daniele-
bochicchio/
Dependency Injection in NET 1st Edition Mark Seemann
https://ebookultra.com/download/dependency-injection-in-net-1st-
edition-mark-seemann/
NET in Action Second Edition MEAP V07 Dustin Metzgar
https://ebookultra.com/download/net-in-action-second-edition-
meap-v07-dustin-metzgar/
ASP NET AJAX programmer s reference with ASP NET 2 0 or
ASP NET 3 5 Dr. Shahram Khosravi
https://ebookultra.com/download/asp-net-ajax-programmer-s-reference-
with-asp-net-2-0-or-asp-net-3-5-dr-shahram-khosravi/
Linear continuous time systems 1st Edition Lyubomir T.
Gruyitch
https://ebookultra.com/download/linear-continuous-time-systems-1st-
edition-lyubomir-t-gruyitch/
Continuous Integration in NET Marcin Kawalerowicz
Digital Instant Download
Author(s): Marcin Kawalerowicz, Craig Berntson
ISBN(s): 1935182552
Edition: Pap/Psc
File Details: PDF, 16.20 MB
Year: 2011
Language: english
IN .NET
Marcin Kawalerowicz
Craig Berntson
MANNING
Continuous Integration in .NET
Continuous
Integration
in .NET
MARCIN KAWALEROWICZ
CRAIG BERNTSON
MANNING
Greenwich
(74° w. long.)
For online information and ordering of this and other Manning books, please visit
www.manning.com. The publisher offers discounts on this book when ordered in quantity.
For more information, please contact
Special Sales Department
Manning Publications Co.
180 Broad St.
Suite 1323
Stamford, CT 06901
Email: [email protected]
©2011 by Manning Publications Co. All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in
any form or by means electronic, mechanical, photocopying, or otherwise, without prior written
permission of the publisher.
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in the book, and Manning
Publications was aware of a trademark claim, the designations have been printed in initial caps
or all caps.
Recognizing the importance of preserving what has been written, it is Manning’s policy to have
the books we publish printed on acid-free paper, and we exert our best efforts to that end.
Recognizing also our responsibility to conserve the resources of our planet, Manning books
are printed on paper that is at least 15 percent recycled and processed without the use of
elemental chlorine.
Manning Publications Co. Development editor: Emily Macel
180 Broad St. Copyeditor: Tiffany Taylor
Suite 1323 Typesetter: Dennis Dalinnik
Stamford, CT 06901 Cover designer: Marija Tudor
ISBN: 9781935182559
Printed in the United States of America
1 2 3 4 5 6 7 8 9 10 – MAL – 17 16 15 14 13 12 11
To HSD and all the “bwk” people
—M.K.
To Bonnie and Sherwood, the best parents a son could have
—C.B.
brief contents
PART 1 MAKE IT HAPPEN ...........................................................1
1 ■ Understanding continuous integration 3
2 ■ Setting up a source control system 29
3 ■ Automating the build process 66
4 ■ Choosing the right CI server 89
5 ■ Continuous feedback 120
6 ■ Unit testing continuously integrated code 144
PART 2 EXTEND IT ................................................................165
7 ■ Performing integration, system, and
acceptance testing 167
8 ■ Analyzing the code 199
PART 3 SMOOTH AND POLISH IT ............................................225
9 ■ Generating documentation 227
10 ■ Deployment and delivery 240
11 ■ Continuous database integration 260
12 ■ Extending continuous integration 276
vii
contents
preface xv
acknowledgments xvii
about this book xix
about the authors xxii
about the cover illustration xxiii
PART 1 MAKE IT HAPPEN ...............................................1
1 Understanding continuous integration 3
1.1 What does it mean to integrate continuously?
Defining continuous integration 4 CI and your
■
4
development process 5 Do I need to build with every
■
change? 7 Overcoming team objections 8
■
It’s all■
about reducing risk 10
1.2 A simple Hello World–type CI example 12
1.3 CI tools 13
Essential tools 14 ■
Code-analysis tools 18
Testing tools 20 ■
Other tools 20
1.4 A project for CI: leasing/credit calculator 20
Calculation core 21 ■
Calculators 26
1.5 Summary
27
ix
x CONTENTS
2 Setting up a source control system 29
2.1 Choosing the right source control system for you
Benefits of source control systems 31 ■
Source control
30
aspects to consider 32
2.2 Setting up a Subversion source control server 35
Installing VisualSVN Server 35 Creating users■
and groups 37 ■
Creating the repository 37
Keeping a healthy repository 39
2.3 TortoiseSVN and working with the repository 42
Subversion client: TortoiseSVN 42 Creating a ■
working copy 43 Committing changes 45
■
Updating ■
and committing files 48 Referencing 50
■
2.4 Setting up Team Foundation Server 53
Installing TFS 2010 53 TFS collections 55
■
Using Visual Studio Team Explorer 58 Managing TFS ■
source control 61 Locking and shelving 63
■
2.5 Summary 64
3 Autom ating the build process 66
3.1 Build automation 67
Make and its children 67 ■
It’s not an Ant 68
3.2 The Microsoft worker: MSBuild 70
First encounters with MSBuild 71 Using predefined tasks to
■
extend an MSBuild script 73 ■
MSBuild Community Tasks 76
3.3 The happy couple: Visual Studio and MSBuild 78
Examining a project file 79 Examining the
■
solution file 81 ■
Starting an MSBuild script with
Visual Studio 82
3.4 Extending MSBuild by writing and using custom tasks 83
Implementing a custom task 84 ■
Putting it all together 86
3.5 Summary
88
4 Choosing the right CI server 89
4.1 A quick review of the CI process 90
4.2 Examining the CI server possibilities 92
Manual integration build or your own CI server? 92
CI servers for .NET 94
CONTENTS xi
4.3 Continuous integration with CruiseControl.NET 95
Starting with CCNet 96 ■
Configuring CCNet 97
Triggering builds 100
4.4 Continuous integration with TeamCity 102
Running TeamCity 102 ■
Configuring a project 104
Pre-tested commit 110
4.5 Continuous integration with Team Foundation
Server 2010 113
TFS and build controllers 113 Configuring TFS ■
build agents 115 TFS build configuration 116
■
4.6 Summary 119
5 Continuous feedback 120
5.1 Knowing the state of your CI process 121
5.2 Continuous feedback with CruiseControl.NET 122
The CCNet Web Dashboard 122 Getting feedback ■
with CCTray 126 Alternative feedback
■
mechanisms with CCNet 128
5.3 Continuous feedback with TeamCity 129
TeamCity web feedback 130 The TeamCity Windows Tray
■
Notifier 132 ■
Alternative notifications with TeamCity 134
5.4 Continuous feedback with Team Foundation Server 135
TFS tray notification 136 Getting build details from
■
the TFS website 137 ■
Alternative feedback mechanisms
with TFS 137
5.5 Extending build notifications 139
Providing feedback via an LED message board 139
Providing feedback via SMS notifications 142
5.6 Summary 142
6 Unit testing continuously integrated code 144
6.1 Unit testing from a bird’s-eye view 145
6.2 First encounters with unit testing 146
The search for perfect unit test material 147
Testing with NUnit 149 Marrying NUnit with
■
CruiseControl.NET 151 Examining test coverage 154
■
xii CONTENTS
6.3 Microsoft unit testing framework 157
Creating unit tests the Microsoft way 157 Testing on ■
TFS 2010 160 ■
MSTest in non-TFS environment 161
6.4 Summary 164
PART 2 EXTEND IT.....................................................165
7 P erform ing integration, system , and acceptance testing 167
7.1 Extending your CI test repertoire 168
Beyond unit tests in CI 169 Involving the customer or
■
domain expert in the CI testing process 171 Right timing, ■
right failing 172
7.2 Up close and personal with integration tests in CI 173
Performing integration testing 173 ■
From mocking
to integration testing 176
7.3 Testing the user interface 180
Testing Windows Forms with White 180 Silverlight ■
test automation 182 Testing a web application with
■
Selenium 185 Integrating UI tests into the CI process
■
189
7.4 Acceptance testing with FitNesse 192
Preparing the FitNesse framework 192 ■
FitNesse and CI 196
7.5 Summary
197
8 Analyzing the code 199
8.1 Analyzing object code with FxCop
Using Visual Studio Code Analysis 200
200
■
Setting up
continuous FxCop code analysis 203 ■
Integrating FxCop
with CI servers 206
8.2 Analyzing C# with StyleCop 209
Using StyleCop 209 ■
Continuous StyleCop analysis 210
8.3 Custom FxCop and StyleCop rules 213
Developing a custom FxCop rule 214 Developing a ■
custom StyleCop rule 216 Incorporating custom rules
■
into the CI process 217
8.4 Extending code analysis 218
Static analysis with NDepend 218 ■
Analyzing code
duplication with TeamCity 223
8.5 Summary 224
CONTENTS xiii
PART 3 SMOOTH AND POLISH IT ................................225
9 Generating docum entation 227
9.1 XML documentation 228
Common XML documentation tags 228 ■
Formatting text
in XML comments 231
9.2 Sandcastle 233
Building with Sandcastle 235 ■
Sandcastle in CI 237
9.3 Summary
239
10 Deploym ent and delivery 240
10.1 Creating an installer for your Windows application
Creating a Microsoft Installer package in Visual Studio 241
241
Continuously creating installation files 243
10.2
Windows Installer XML toolset 244
Creating an installer using WiX 245 ■
Automating WiX
with CI 247
10.3 ClickOnce deployment 248
Creating a ClickOnce deployment 248 ■
ClickOnce
in a CI scenario 251
10.4 Web Deployment Tool 253
Visual Studio 2010 and MS Deploy 254 ■
MS Deploy on
the build server 256
10.5 Summary 258
11 Continuous database integration 260
11.1 What is continuous database integration? 261
11.2 Rolling your own continuous database integration 262
11.3 Continuous database maintenance with
RoundhousE 264
11.4 Continuous database maintenance with
Visual Studio 266
Getting started with database projects 266 ■
Generating test
data 268 ■
Unit testing stored procedures 271 ■
Putting Visual
Studio database maintenance into CI 274
11.5 Summary 275
xiv CONTENTS
12 Extending continuous integration 276
12.1 Speeding up CI 277
12.2 Seven deadly sins of slow software builds 278
Making a build script drive your build 279 ■
Getting rid of
build-script targets’ side effects 279 ■
Multiplying updated
files 279 ■
Pass-based builds 280 ■
Output in the
source directory 281 Monoliths 281
■
Bad dependencies 282
12.3 Scaling CI 282
Build-agent theory 282 ■
Scaling TeamCity 283
12.4 Legal roadblocks 287
12.5 Maturity model for CI 288
Building 289 ■
Deploying 290 ■
Testing 291
Reporting 292
12.6 Summary 293
index
295
preface
After completing my master’s degree, I moved from Poland to Germany and began
working as a .NET developer for a company full of experts in … Clarion. The Clarion
folks were developing the company’s flagship—very successful leasing software—and I
was left to do “the rest”: a bit of interfacing with web services (no way to do it from
Clarion at that time), a rewrite of a Pocket PC leasing calculator, a piece of a website
for a customer in Switzerland, and so on.
Over time, I was given more and more small software gems to manage. “How about
introducing a source-control system?” I thought. I was uneasy about the “zip and store
on a share” method my old friends were using. Fortunately, my bosses were open-
minded, and I was given a free hand. I could do whatever I wanted to make my work
life easier. And believe me, there was a lot to change! I started with Visual SourceSafe
and a plug-in for Visual Studio. This made a difference, but I didn’t stop searching.
It was a time of Agile hype. The popularity of test-driven development was increas-
ing, and my adventure with unit testing began. We moved from Visual SourceSafe to
Subversion, and about that time I saw some information about CruiseControl.NET. It
was a build server. I thought that was cool: all I had to do was write a build script and
check the source into the version-control system, and CruiseControl.NET would
detect my changes, pull the source, and perform the build; it would include the tests
automatically, deploy the created bits to the test server, and tell me right away if some-
thing was wrong. I knew this continuous integration (CI) process would change the
way software was developed on my team. All the pains of late consolidation were allevi-
xv
xvi PREFACE
ated: we had a fairly ready, tested piece of software every time we checked in to the
source-control system.
I had to learn MSBuild to write my build scripts. The learning curve wasn’t too
steep; soon, I had a custom-built script for every project we worked on. I was lucky to
have virtually no hardware limits from my bosses. I got a fairly old server and created
my first build machine. Boy, was it cool to see all the “yet another successful build”
messages from the Windows tray-notification tool.
From day one, I was a fan of and a believer in the CI concept. I’m strongly con-
vinced that it was the sole attraction that kept me in the Chaos Developer Club in
those days. Now I’m running my own company, and one of the most important tools
in my repertoire is the CI server.
Back in 2007, I wrote an article about CI for a Polish computer magazine. It reso-
nated in the community and was generally well received. Sometime after that, a
friend suggested that the topic was worth more exploration—perhaps in a book. I
couldn’t have agreed more. I ran the idea by a few Polish publishers, but they all
said the topic was too specific for the Polish market. “Well,” I thought, “if the Polish
market is too narrow, how about the global market?” It was the first time I’d consid-
ered writing the book in English. I was concerned because English isn’t my mother
tongue. I knew the language well enough to read just about anything written in Eng-
lish, but would I be able to write in it? With the support of Manning, and Craig as
coauthor, I decided to give it a try. You are holding the result!
MARCIN KAWALEROWICZ
acknowledgments
Writing a book is a long and arduous process. Many people were involved and we’re
sure to forget someone here. Our sincere thanks to all of you.
We must acknowledge the entire staff at Manning, especially Emily Macel who
guided us through most of the writing process, and Michael Stephens for his support
and patience when things got tough. There were others, including Maureen Spencer,
Karen Tegtmeyer, Christina Rudloff, Tiffany Taylor, Katie Tennant, Mary Piergies, and
Dennis Dalinnik, who helped along the way, and of course, publisher Marjan Bace
who green-lighted the project.
Thanks to all the technical reviewers listed here and to Margriet Bruggeman and
Nikander Bruggeman who did a final technical proofread of the manuscript shortly
before it went to press. Your valuable feedback made this book better: Erik D. Lane,
Craig Smith, Rob Reynolds, Aleksey Nudelman, Darren Neimke, Dave Corun, Jonas
Bandi, Derik Whittaker, Sebastien Vaucouleur, Amos Bannister, Philippe Vialatte, Eric
C. A. Swanson, Marc Gravell, Anil Radhakrishna, and Lester Lobo.
Finally, we would like to thank all of the readers of Manning’s Early Access Pro-
gram (MEAP) who added comments and corrections to our manuscript via the Author
Online forum.
M arcin K aw alerow icz
I would like to thank the people who made me the developer I am today: Pawe?
Jackowski (without you, I wouldn’t have become a software developer and this
book wouldn’t have been written), Jacek Jarczak (my long-time friend and business
xvii
xviii ACKNOWLEDGMENTS
associate), Bernhard Korn (a man I’ve learned a lot from), and Harald Cich (my
first boss at C.I.C. Software GmbH; his brilliant mind was always open to innova-
tion). Thanks also to Michal Sodomka, Blaz˙ej Choros´, Mateusz Loskot, Aleksej Kir-
schner, Lukasz Stilger, Tomasz Rospond, and my fellows at CODEFUSION.
Thanks to the people who made me the person I am today: my parents, Bar-
bara and Krzysztof; my lovely wife, Sylwia; and my daughter (born between chap-
ters 8 and 9), Zosia.
Craig Berntson
First and foremost, I need to thank my coauthor. Marcin made the initial contact
with Manning and got the project started. Being almost half a world apart didn’t
help, but we were able to meet briefly in Germany. It’s mostly through his work that
we finally got to the end of this journey.
I had other help with my research and with answers to many questions about
different tools and how things work. David Starr and Richard Hundhausen were
great sounding boards.
Thanks to all the people on the C# and VB.NET Insiders lists for answering my sim-
plest of questions about the CI process in their environments. Also, thanks to the peo-
ple at Microsoft, JetBrains, and ThoughtWorks for making great products.
Finally, a personal thank you to the people close to me: my coworkers and manag-
ers for putting up with hearing me talk about this project; and most of all to Jason,
Johnathan, and especially Laurie for supporting me in this effort.
Random documents with unrelated
content Scribd suggests to you:
"Hyvä Jumala mitä te vielä puhutte! Jos tauti kerran on
kuolemaksi, niin kiittäkää Jumalaa siitä, että hän ottaa teidät pian
luoksensa eikä kiduta teitä pitkään."
"Miten te puhutte tuolla tavalla, Jörgen Siversen!" keskeytti Emma.
"Ei isä vielä kuolekkaan… Tunnethan jo itsesi paremmaksi isä?"
Hän istuutui vuoteen reunalle ja pyyhki hikeä sairaan otsalta.
"Jos Jumala tahtoo, voi hän minut parantaa, se ei hänelle paljoa
merkitse. Mutta rauhoitu toki, tyttöseni! Olisihan sen täytynyt kerran
tapahtua."
"Ehkäpä pääsette vielä jaloillenne", arveli Jörgen.
Näytti, kuin Lystrup olisi todellakin alkanut olla virkistymään päin.
Mutta halvautunut osa ruumista pysyi yhä jäykkänä, ja sitä Lystrup
pelkäsi. Hän kuvitteli, että halvaus vähitellen leviää hänen
sydämmeensä ja tuottaa silmänräpäyksessä kuoleman. Muutamain
tuntien kuluttua oli hänen tilansa kumminkin siinä määrin
parantunut, että hän alkoi toivoa pääsevänsä terveeksi.
"Tapahtukoon Herran tahto!" sanoi hän. "Mutta jos minun on
loppuiäkseni jouduttava saamattomaksi, avuttomaksi olennoksi, niin
mieluummin tahtoisin, että saisitte kantaa minut hautaan. Mikäpä
minua pidättäisi enää täällä… jos Emman toimeentulo vaan olisi
turvattu."
"Siitä ette tarvitse huolehtia, Lystrup, sillä luulen minullakin olevan
siinä sanansijaa. Sitäpaitsi on hän nuori ja terve ja kykenee
ansaitsemaan leipänsä, jos niikseen tulee. Mutta — kerran asia tuli
puheeksi, niin etteköhän vielä ennen eroanne miettisi sitä eräältä
toiselta kannalta, sillä itse sanoitte kerran, että asiaa on arvosteltava
asian mukaan."
Emma poistui keittiöön saadakseen raitista ilmaa. Hän ei voinut
kuunnella vanhusten keskustelua.
"Minä olen ajatellut sitä asiaa enemmän kuin luulisi", sanoi
Lystrup. "Olen surrut nähdessäni tytön laihtuvan… hän on paljon
muuttunut, raukka!"
"Niin, hän näyttää kuihtuneelta."
"Ja toiselta puolen on sekin minua vaivannut, että minun on aina
täytynyt olla Knuuttia vastaan. Siinä pojassa on terästä,
sanottakoonpa hänestä mitä hyvänsä. Mutta taivu minä en hänen
edessänsä! Silloinhan olisin uskoton koko menneisyydelleni ja
Herrani nimittäisi minua huonoksi ja kunnottomaksi palvelijaksi. Olen
sanonut Emmalle, että kun minä olen maanraossa, niin tehköön hän
Herran nimessä mitä tahtoo, mutta niin kauvan kuin minussa on elon
kipinääkään jäljellä, me emme tahdo olla missään tekemisessä
hänen ja hänen vapaushommiensa kanssa."
Emma seisoi keittiössä surun ja tuskan valtaamana. Hänen
rintaansa ahdisti, ikäänkuin joku olisi sitä rautakourin painellut. Hän
huokasi raskaasti ja painoi kuuman otsansa pesupöydän kosteita
lautoja vastaan. Oi, jospa Knuut olisi ollut hänen luonansa ja hellänä
ottanut osaa hänen suruunsa!
Samassa kuului askeleita pihalta. Emma kohosi ja katsoi oveen
joka hermo jännitettynä. Mutta se ei ollut Knuut. Viinipullo, lyhyt,
pyöreä käsivarsi ja sileäksi kammattu pää ilmestyi oven raosta.
"Iltaa, iltaa! Tässä olisi pisara virkistysjuomaa sairaalle… pieni
pisara vaan! Olen hyvin pahoillani, neiti…!"
"Kiitoksia, Besser, mutta ettekö tahdo käydä sisään?"
"Ei, ei, en tahdo olla häiriöksi. Kuinka hän voi? Ikävä juttu, ikävä
juttu! Hm, hm, mutta hyvä siitä vielä tulee… Hyvästi, pikku neiti!
Paratkoon terveeksi, paratkoon terveeksi!"
Tuo pieni myötätuntoisuuden osoitus teki Emmalle sanomattoman
hyvää. Eihän Lystrup ollut koskaan huomannut Besseriä, tuskin
katsahtanutkaan häneen… Emma tunsi oikein heltyvänsä. Mutta
sitten taas valtasi suru ja katkeruus hänet. Hän oli todellakin ollut
niin äärettömän lapsellinen, että oli luullut tulijaa Knuutiksi.
Suuttumus ja pettymys täytti hänen mielensä ja hänen sydämmensä
alkoi kapinoida. Knuut! Mitä huolisi hän asioista! Eikö hän
jalomielisyyttä uhkuvista sanoistaan huolimatta ollut kova ja armoton
hänelle ja melkein ilkeä hänen isällensä? Eikö voisi hän arvoansa ja
asiaansa loukkaamatta mukautua hiukan isän mielipiteisiin niinä
muutamina vuosina — muutamina vuosina, mitä tällä ehkä oli enää
jäljellä? Knuutko tulisi? Johan vaan hän sen tekisi! Mieluummin istuisi
hän kotona ja miettisi uusia keinoja hänen isänsä nöyryyttämiseksi!
Hän melkein vihasi Knuuttia. Hänestä tuntui, kuin pitäisi hänen
kokonaan lopettaa suhteensa häneen ja siirtyä täydellisesti isänsä
puolelle.
Taas kuului pikaisia, rientäviä askeleita ulkoa. Hyvä Jumala, olisiko
se hän! Se oli Knuut. Tukka märkänä ja tuskan ilme silmissään astui
hän Emman luo keittiöön.
"Minä näin tulta täältä… Kuinka…?"
Hän ei ehtinyt lopettaa, sillä Emma heittäysi hänen syliinsä ja
nyyhkytti:
"Jumalan kiitos, että tulit, Knuut! Sinä et siis ansaitsekaan… Oi,
Knuut, kuinka sydämmeni tuntuu keventyneeltä!"
"Onko hän… onko isäsi…?" Hän ei uskaltanut sanoa "kuollut",
tuntui kuin riistäisi hän silloin itseltänsä viimeisen toivon kipinän.
Vihdoinkin sai hän sanoneeksi: "onko isäsi hyvin sairas?"
"On, kyllä hän on hyvin sairas. Eikö ollut kauheaa, että kävi näin?"
"Kyllä; kuinka… kuinka se tapahtui? Eihän se ollut minun syyni,
Emma?"
"Sinunko syysi? Mutta Knuut, oletko sinä sairas? Sinä vapiset
kuin…"
"En ole sairas. Sano, kuinka se tapahtui?"
"Kuinkako tapahtui? Hän oli Siversissä kastamassa erästä lasta —
pappi ei ollut kotona — ja hän hengästyi kahlatessaan lumessa.
Yht'äkkiä kaatui hän keskelle tietä ruiskuhuoneen seuduilla. Sinun
syysi…? Miten se olisi ollut sinun syysi?"
Knuut puristi käsiään ristiin ja huudahti liikutuksesta väräjävällä
äänellä. "Jumala olkoon kiitetty!… Minä olin niin peloissani, Emma!"
Ja hän avasi hänelle sydämmensä rehellisesti ja peittelemättä, salli
hänen katsoa sen salaisimpiinkin sopukoihin, kertoi tuskasta, joka
häntä oli ahdistanut, tunnusti vikansa ja pyysi häneltä anteeksi.
"Kerran olit se sinä, joka rukoilit minulta anteeksi, nyt on minun
vuoroni olla anteeksipyytäjänä. Minä en ole menetellyt sinua ja isääsi
kohtaan niinkuin minun olisi pitänyt, mutta niin totta kuin Jumala
minua auttakoon, olen minä tästä lähtien koettava hallita
pikaisuuttani. Kaikki on muuttuva, Emma, kaikki!"
"Oi, Knuut, en voi sanoin lausua, miten puheesi tekee minulle
hyvää!" sanoi tyttö, laski kätensä hänen olkapäilleen ja katsoi
häneen kyynelten läpi. "Tiedän, että sinä olet aina toiminut hyvässä
tarkoituksessa, vasta viime aikoina… Mutta isässäkin oli kyllä vikaa…
Oi, et tiedä, mitä kaikkea tänä aikana olen kärsinyt! Pidin teistä
kummastakin niin paljon ja kumminkin te molemmat työnsitte minut
pois luotanne. Minusta tuntuu, kuin voisin nyt kestää vaikka mitä."
Kohta sen jälkeen astuivat nuoret sairashuoneesen, missä
parhaallaan puhuttiin Knuutista. Lystrup pysähtyi keskelle muutamaa
ankaraa tuomiotansa, varjosti kädellä silmiään ja tarkasti tulijoita.
"Mitä näen, siinähän tulee Knuut itse!" huudahti hän ja liikutus
valtasi hänet.
"Niin, teki mieleni… teki mieleni tulla katsomaan teitä." Kun hän
tarttui vanhuksen käteen, herahti hänen silmistänsä pari kyyneltä ja
vieri pitkin hänen poskiaan.
"Se oli kauniisti tehty, Knuut, se oli kauniisti tehty. Hm, hm, sinä
olet siis sittenkin pitänyt vanhasta opettajastasi, vai mitä, Knuut?"
"Olen", — nyyhkytys tukahutti hänen äänensä — "vaikka olen
joskus…" Hän ei voinut jatkaa.
"Niin, niin, ystävä hyvä! Kullakin meistä on omat vikamme. Sinä
olet taistellut omien mielipiteittesi, minä omieni puolesta. Ehkä olit
väliin oikeassa, en kiellä sitä. Mutta istu, Knuut, ja juttele enosi
kanssa, minun täytyy saada vähän levähtää."
Vanha, kunnon tilanomistaja oli vähän päästä pyyhkinyt takkinsa
hihalla silmiään, niistänyt nenäänsä ja siirtänyt harmaita, pitkiä
hiussuortuvia pois otsaltaan. "Sinä mahdoit olla katkera pala
Lystrupille", sanoi hän, "mutta hyvä oli, että päähäsi pisti tulla
lausumaan ystävällinen sana hänelle ennen hänen mahdollisesti
tapahtuvaa lähtöään."
Vuosien kuluessa karttunut uhma katosi sinä iltana jäljettömiin
Knuutin sydämmestä ja omantunnon soimaavat äänet vaikenivat. Se
ilta kysyi voimia, se nöyryytti ja masenti. Mutta miten vapaa ja kevyt
oli hänen mielensä, kun hän palasi kotiin! Kaikki, mitä hänessä oli
parhainta, tuntui pyrkivän ilmoille huokauksessa: "oi, kiitos, että
myrkky on verestäni poissa!"
Lystrup näytti päivä päivältä tulevan yhä paremmaksi, mutta sitten
sai hän uuden taudinkohtauksen, joka joudutti hänen loppuansa.
Knuut ja Emma valvoivat hänen vuoteensa ääressä viimeisen yön.
Samaa voimaa ja täysinäisyyttä, jota hän eläessään oli osoittanut,
ilmeni vielä niissä hourekuvissa, joita hänen sairaat aivonsa
synnyttivät. Väliin tuntui hän olevan täysin tajussaan, mutta kohta
sekaantui hän taas.
"Pappi oli oikeassa. Meidän harrastuksiamme yhdistää toisiinsa
tuhannet hienot juuret. Me tarvitsemme toisiamme. Mer—kil—lis—tä,
ettei Knuut, vaikka hän onkin viisas poika, sitä ymmärrä."
Hän pudisti päätänsä.
"Niin, niin, et tarvitse hävetä, Knuut, että taivutit niskasi. Minä
luotan sinuun paljoa enemmän nyt kuin silloin, kun sinä kokistelit ja
pöyhistelit kuin kukko. Knuut, en minä aio sinua köyttää enkä vaadi,
että sinä käärisit lippusi kokoon. Sitä sinä et tekisikään, ja jos sen
tekisit, niin silloin paljastaisit oman kunnottomuutesi. Mutta sinun
pitää pysyä alempana eikä kiipeillä joka seipääsen huutamaan: 'hei,
tässä olen! Näytäntö, alkaa!'… Ja mitä vapaakouluun tulee — kyllä
tiedän, mitä puuhaat, et petä minun silmiäni — niin sanon sinulle,
ystäväni, että jos sinä kuulutat kokouksen sitä asiaa varten, niin olen
siellä minäkin, poikaseni, ja — vaikka oletkin oma vävyni — näytän
nyrkkiä sinulle niin että muistat sitä vielä kauvan aikaa!"
Hänen oma koulutoimensa ja Emman tulevaisuus väikkyi myöskin
hänen mielikuvissaan.
"Muistakaa, lapset, että osaatte kuudennen pääkappaleen
tutkinnossa! Tiedättehän… sen, missä on velvollisuuksista Jumalaa ja
lähimaista kohtaan! Velvollisuuden pyhyys se on, joka pitää kansaa
pystyssä."
Silmänräpäyksen ajan hän mumisi käsittämättömiä sanoja. Sitten
huudahti hän suuttuneena: "no niin, kaksikymmentä poikanulikkaa
aikoo kaataa kouluni… paikoillenne, pojat!… Hoh, hoh", huokasi hän,
"en jaksa enää, toista oli ennen. Höm, höm, miten se mies
sanoikaan, jonka näin puutarhassa? 'Hakkaa puu! Mitä se siinä
hyödyttömänä seisoisi!'"
"Hyvä Jumala, Emma", sanoi hän kohta sen jälkeen, "täytyykö
meidän lähteä pois vanhalta koulultamme… Älä riipu takissani, rakas
lapsi, minun on mentävä kokoukseen tänään. Mutta pyyhi
kyyneleesi, tyttöseni, minulla on siellä hyvä olla, ja sinulla on
myöskin hyvä olla. Sydämmestäni tuntui niin kummalliselta, kun
pappi antoi minulle leipää ja viiniä. Muistatko sinä, miten virsi oli?…
'Jesuksen tähden syntini hän anteeks antakohon.' Se on n:o 330
uudessa virsikirjassa… Niin, Emma, minulla on siellä hyvä olla, ja
sinulla on myöskin hyvä, saat nähdä. Olemmehan saaneet voiton
kaikki kolme, etkö käsitä sitä, lapsi?"
Emma istui sängyn reunalla ja Knuut sen vieressä olevalla tuolilla.
Tytön itkusta ja valvonnasta pöhöttyneet silmät seurasivat tuskaisina
joka ainoaa väräystä isän väsähtäneissä kasvoissa. Välistä valtasi
hänet pöyristyttävä kauhun tunne ja hän puristi lujasti Knuutin kättä.
Knuut vastasi hänen puristukseensa samalla tavalla ikäänkuin
vakuuttaakseen: "meitä on kaksi."
"Oi, kuinka silmä kirkastuu täällä ylhäällä seesteisessä ilmassa!"
sanoi Lystrup kerran. "Miten toiselta näyttää kaikki kukkuloilta, missä
maa ja taivas yhtyvät toisiinsa! Katso, kuinka pikkulaiset tuolla
alhaalla häärivät vahvasti vakuutettuina siitä, että kukin heistä on
maan keskipiste ja että kaikki joutuisi epäkuntoon, elleivät he pitäisi
huolta! Kuinka ne ahertavat, hyörivät ja pyörivät, huutavat ja
tappelevat!… Hyvä Jumala, enkö seisokin itse tuolla puhujalavalla
ihka elävänä ja huido käsiäni kasvot punaisina! Lystrup, Lystrup,
miten kummalliselta näytät täältä! Kuulkaa, te siellä alhaalla, ei niin,
ei niin, hiljaa ja maltillisesti! Kas niin, lapset, se on minun mieleistäni!
Muistakaa lukea hyvin… velvollisuudet Jumalaa ja lähimaista
kohtaan!"
Myöhempään yöllä oli hän kerran täydellisesti tajussaan.
"Emma, lue minulle runo, jota näytin sinulle päivällä, 'Rajalla'
muistelen sen nimen olleen. Kirja on kaapissa."
Emma meni arkitupaan ja palasi hetkisen kuluttua takaisin
kädessään pieni runoteos, josta hän alkoi lukea:
"Niin usmaista…"
Ääni katkesi. Hän kumartui, painoi kätensä silmilleen ja nyyhkytti:
"en voi, isä, en voi!"
"No, mitä taas, pikku Emma! Knuut, lue sinä!"
Knuut otti kirjan ja luki matalalla, mutta sointuvalla äänellä:
"Niin usmaista! Verhoa nostaa jos vois, valo kirkastais
otsaani uurtaman huolen! Oi, luojani, synkkä niin kuolema ois
ja kauhea portti, mi vie täältä pois, jos valo ei välkkyis sen
toiselta puolen!
Mitä teimme ja tuumimme, toivoimmekaan, mihin kiintyivät
hetkien huolet ja kaipuu, se toiseksi muuttuvi kokonaan, sitä
silmin kun kirkkahin katsella saa, tuhatpirstoiksi särkyvi,
usmahan haipuu.
Mitä Kristus hän saarnasi aikoinaan, mitä kärsi hän
kyynelin, sielun tuskin, mitä maailma tunne ei konsanaan,
mille kylm' olin itsekin toisinaan, tuki mulla on nyt, mikä
kestävi yksin.
On elämä suurta ja vakavaa,
mut hetkelle tälle ei vertaa se vielä.
Hän, min käskystä hautakin aukeaa,
rajan toiselle puolen mua johdattaa
ja saattavi käyntini helpoksi siellä.
Jopa joudatkin tulla, sä viikatemies, elon siementä kätköstä
et sinä yllä! Sumun, varjojen yöstä nyt käypi mun tie, valon,
kirkkauden maahan se riemuiten vie — Sitä muistakaa, lapset,
kun syömmein on kylmä!"
Knuutin suupielet värähtelivät. Emma, joka oli polvistunut sängyn
viereen, painoi otsaansa isän kättä vastaan ja nyyhkytti.
"No, no, lapset!" sanoi Lystrup heikolla, katkonaisella, mutta
ihmeen rauhallisella äänellä. "Kaikki on hyvin. Nyt vaan hiljaa —
hiljaa!"
Aamun sarastaessa leimahti viimeisen kerran elonkipinä vanhassa,
voimakkaassa vartalossa. Kauhun ilme kasvoillaan kohosi Lystrup
istualleen sängyssä, tuiotti Emmaan ja Knuuttiin ja huudahti:
"Ettekö kuulleet, mitä Herramme sanoi? 'Riisu valjaasi, Lystrup!'
Hoh, hoh", huokasi hän ja vaipui takaisin patjoille, "niin on se siis
lopussa…! Tule, Herrani ja Vapahtajani, ja vie rajan toiselle puolen!"
Ne olivat hänen viimeiset sanansa. Vielä katse, syvä, siunaava
katse molempiin nuoriin, pitkä, raskas huokaus, ja silmät
ummistuivat.
Vanha jykevä pato oli sortunut. Kukapa enää asettaisi rintansa
suojaksi myrskyä ja aaltoja vastaan? Besser kyllä tarjoutui, mutta
Besserissä ei ollut miestä siihen. Pienen yhteiskunnan vanhoilliset
valtasi hämärä, lamauttava aavistus siitä, että uusi aika olisi
esteettömästi ja keskellä selvää päivää hyökkäävä pitäjään ja
anastava asemat, jotka vanha aika oli joko vapaaehtoisesti jättänyt
tai joista sen askel askeleelta täytyi peräytyä. Mutta olkoon sanottu
uuden ajan enemmässä tai vähemmässä määrässä tulisien
hyökkääjien kunniaksi, että heidät täytti jonkunmoinen ritarillinen
myötätuntoisuus tappion kärsineitä vastustajiansa kohtaan. Näytti,
ikäänkuin he olisivat tunnustaneet mielessään, että olisi väärin
käyttää ylivaltaa poistamaan viimeisetkin vanhan ajan jäännökset
muutamista syrjäisistä asemista.
Toistaiseksi ei tehty enemmän hyökkäys- kuin
puolustussuunnitelmiakaan. Sodan melske oli hetkeksi vaiennut, ja
kaikkien mielet valtasi äskettäin sattunut kuolemantapaus, joka,
aivan niinkuin Knuut oli arvellut, herätti vilkasta osanottoa pitäjän
kaukaisimmissakin sopissa. Silloin vasta oikein selvisi, kuinka pitäjän
kunnollinen, joskin viime aikoina vähän levoton väestö, oli
mielipiteiden eroavaisuudesta huolimatta kiintynyt vanhaan
opettajaansa, joka oli vaikuttanut sen keskuudessa lähes kahden
sukupolven ajan. Voimakas sielu, joka on elänyt täysinäistä elämää,
elämää, josta ei ole puuttunut enemmän rehellisyyttä ja totuutta,
kuin tahdonlujuutta ja kunnollisia pyrkimysperiäkään, on aina jättävä
tuntuvan jäljen jälkeenjäävien, niinhyvin ystävien kuin
vastustajienkin, sydämmiin. Lystrup oli tosin ollut itsevaltainen ja
taipumaton kuin vanha tammi, mutta hän oli samalla ollut kaikessa
tunnollinen ja oikeudentuntoinen ja omalla tavallaan rehellisesti
puolustanut viimeiseen asti pientä yhteiskuntaansa; siksi hänen
muistoansa kunnioitettiin. Koko pitäjä sitoi seppeleitä, kaikki kilpaa
auttoivat surevaa tytärtä. Niin lukuisaa surusaattoa kuin se, joka
hautajaispäivänä kokoutui kirkkomaalle, ei Rörby ollut vielä koskaan
nähnyt. Ja kellojen kaiun kieriellessä puhtaassa, kirkkaassa talvi-
ilmassa yli valkeain, välkkyväin metsien, seisoivat miehet, vaimot ja
koululapset totisina ja äänettöminä ja katsoivat, kuinka heidän vanha
opettajansa laskettiin maan poveen. Se oli valtava hetki; juhlallinen
rauha oli koittanut kauvan raivonneen myrskyn jälkeen. Tuntui kuin
vanha ja uusi aika olisivat ojentaneet kättä toisilleen haudan ylitse.
Vielä muutama sana lopuksi.
Vanha Jörgen Siversen muutti kohta sen jälkeen kirkkomaahan
lähelle monivuotista ystäväänsä, mutta Jörgenin Kaaren, tosin
heikkona ja kivuloisena, kolistelee vielä puukenkiään vanhassa
kodissaan. Ikäänkuin lempeä suojelushenki seisoo Ellen hänen
sivullaan. Hän on oppinut tyytymään kohtaloonsa ja näkee siinä
jumalallista johdatusta. Kuin vieno, hiljainen sävel on hänen
elämänsä katoava.
Entäs Besser? Niin, mitä auttaisi salata sitä, jonka koko maailma
tietää: Besseriä ei ole enää — ei, siitä voisi syntyä väärinkäsitystä —
Besseriä ei ole enää Rörbyssä. Matkustanut! kadonnut! Valtiollisessa
suhteessa vainosi häntä rakas, tosin ei niinkään harvinainen kohtalo,
että toimeliaan, jopa joka taholle toimeliaan elämän lopulla — niin,
mitä siitä kaunistelisimme — kaikki kääntävät selkänsä ja heittävät
syrjään kuin mitättömän olennon, jolla ei ole mitään menneisyyttä, ei
mitään ansioita. Mutta nämä rivit todistakoot, että se arvokkaisuus ja
sielunrauha, jonka tieto ansiorikkaasta elämästä herättää suurissa
henkilöissä, pysyi hänessä järkkymättä viimeiseen asti. Entäs hänen
yhteiskunnallinen asemansa, miten sen kävi? Niin, miksi hän
paremmin olisi säilynyt haaksirikosta yhteiskunnallisessa asemassaan
kuin muissakaan. Mutta se myöskin tässä todistettakoon, että ajan
aineelliset vaikeudet eivät järkyttäneet Besserin mielenrauhaa
enempää kuin valtiollisetkaan vastoinkäymiset.
"Te muutatte siis pois, Besser?" sanoi vanha eläinlääkäri
muutamana päivänä.
"Niin, liike ei tahdo oikein kannattaa, Peddersen. Vuokrat ovat
kalliit, ei jaksa maksaa."
"Sepä ikävää, Besser!"
"Hm — tjaa—ah! Kunakin aikana on omat vaikeutensa, sille ei
mahda mitään. Mutta ei saa silti menettää rohkeuttaan, eivätkä ne
säännöllisesti olekkaan niin pahoja, kuin miltä ne näyttävät. Ei tämä
ole ensimäinen pulma elämässäni, Peddersen, mutta mainiosti minä
olen aina selviytynyt. Koettelemuksetkin ovat väliin hyväksi,
Peddersen, ne terästävät luonnetta… höm, höm" — kurkkua kangerti
— "terästävät luonnetta!"
"Hyvä on, että on terästä, mutta hopeaakin elämässä tarvitaan."
"Ah, ystäväni, kun vaan on yritteliäisyyttä ja intelligensiä, niin ei
ole hätää, ei mitään hätää. Niks forbluffen lassen! [Ei pidä
hämmästyä. Suom.] se on aina ollut minun tunnussanani."
Ja kun lähtöhetki koitti, vaelsi Besser Rörbystä paita ja tohvelipari
kainalossa, aivokoppa täynnä kultaisia sääntöjä ja tunnussanoja ja
pahkulainen tammikeppi kädessä ulos avaraan maailmaan etsimään
"uutta liikettä".
Emmasta on täydellisesti kadonnut kovien myrskyjen synnyttämä
hervakkuus, ja hän nostaa taas päätänsä Lystrupien tapaan.
Nuoruuden ruusut heloittavat hänen poskillaan ja voimaa uhkuaa
koko hänen olennostaan. Hänen miehensä, nuori, lahjakas,
edistyshaluinen maanviljelijä, on saavuttanut onnen ja rauhan, jota
hän niin monta vuotta kärsimättömänä ajoi takaa. Hänen
valistustyönsäkö? Luopunutko siitä? Ei, sitä hän ei ole tehnyt,
paljastaisihan hän, Lystrupin sanaan, oman kunnottomuutensa, jos
hän käärisi kokoon lipun, jota hän kerran oli kantanut niin korkealla.
Mutta hän ei enää rynnistä vanhan ajan varustuksia vastaan, sillä
hän tietää, että niiden kanssa otellessa on leikki kaukana. Tyynesti ja
tasaisesti, mutta samalla voimakkaasti, koettaa hän niitä kukistaa
sitä mukaa kuin niiden aika on tullut. Hän näet myöntää, että on
sellaisiakin varustuksia, joiden tulee antaa seisoa aikansa, jos kerran
naapurien ja kanssaihmisten omistusoikeudelle annetaan jotain
arvoa.
Kiinalainen muuri on kaatunut, Rörby on yhdistynyt muuhun
yhteiskuntaan. Maine maailman tapahtumista ei kulje enää Rörbyn
sivuitse niinkuin entisaikaan. Elonilmaukset metsien toisella puolen
ovat hienojen lähteensuonien tavoin uurtautuneet muinoin kuivaan
ketoon ja saaneet siinä aikaan rehevän kasvullisuuden. Niinkuin jo
edeltäpäin saattoi arvata, on kylä saanut nuoren, etevän opettajan,
johon on syytä olla tyytyväinen ja josta innokas pappi näyttää
saavan tukevan liittolaisen. Ampuma- ja puhujaseurat menestyvät
niin hyvin, että aiotaan parin naapuriseuran kanssa rakentaa
yhteinen voimistelu- ja kokoushuone Besserin vanhan, ajan
hampaan nakerteleman "salongin" sijaan, jossa kylän nuoret jo
kauvan aikaa ovat saaneet näyttää voimiaan ja notkeuttaan.
Taloudellinen toiminta on edistymään päin, kirjat ja sanomalehdet
ovat muuttuneet välttämättömiksi monessa kodissa. Osan vanhoista
säästöistään, jotka Knuuttia kerran niin kiusasivat, on todellakin
moni tilanomistaja käyttänyt parannuspuuhiin karjanhoidon ja
meijeriliikkeen aloilla, elämää ja virkeyttä huomaa kaikkialla. Totta
on, että väliin vielä taistelunvihuri ryöpsähtää kylään ja joku
valtiollinen pommi räjähtää keskellä keskustelevaa ihmisjoukkoa.
Mutta pommit eivät putoa enää niin korkealta kuin entisaikaan,
jolloin kauvan kestäneen toimettomuuden jälkeen tuntui hyvältä
saada oikein "paukuttaa". Mielten kiihkeys on kadonnut, tuntuu kuin
alkaisi Rörby jo jättää lapsuuden huimuuden ja siirtyä kypsyneesen
ikäkauteen.
Ja Laulupuro laulaa, laulaa yöt päivät herkeämättä. Emma
kuuntelee sen laulua väliin, mutta siinä on toinen sointu nyt kuin
silloin, kun hän kuunteli sitä koulun puutarhassa. Kokonainen joukko
erilaatuisia ääniä kohoaa hiljaisina kesä-iltoina kukkaismetsikön
syvyydestä. Tuolla syreenipehkojen siimeksessä heläjää kuin iloinen
laululinnunliritys. Tuolta kivien välistä ohdakekatoksen alta kuuluu
taas korkea, sointuva ääni, jota kauvempana säestää putouksen
kohina kuin urkujen mahtava pauhu. Kirkkaina, ikäänkuin
puhdistuneina kaikuvat sävelet. Niissä soi rauhaa, soi hiljaista onnea,
mutta samalla velvollisuudentuntoa ja vastuunalaisuutta. Ja Emma
kiittää Jumalaa siitä, että hän pääsi puron toiselle rannalle. Kaikki
eivät pääse Laulupuron ylitse — Ellen ei sitä koskaan tehnyt.
*** END OF THE PROJECT GUTENBERG EBOOK MURROSAIKANA
***
Updated editions will replace the previous one—the old editions will
be renamed.
Creating the works from print editions not protected by U.S.
copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.
START: FULL LICENSE
THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
To protect the Project Gutenberg™ mission of promoting the free
distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.
Section 1. General Terms of Use and
Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.
1.B. “Project Gutenberg” is a registered trademark. It may only be
used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.
1.E. Unless you have removed all references to Project Gutenberg:
1.E.1. The following sentence, with active links to, or other
immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.
1.E.2. If an individual Project Gutenberg™ electronic work is derived
from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.
1.E.3. If an individual Project Gutenberg™ electronic work is posted
with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.
1.E.4. Do not unlink or detach or remove the full Project
Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.
1.E.5. Do not copy, display, perform, distribute or redistribute this
electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.
1.E.7. Do not charge a fee for access to, viewing, displaying,
performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.
1.E.8. You may charge a reasonable fee for copies of or providing
access to or distributing Project Gutenberg™ electronic works
provided that:
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”
• You provide a full refund of any money paid by a user who
notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.
• You provide, in accordance with paragraph 1.F.3, a full refund of
any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.
• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.
1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™
electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.
1.F.
1.F.1. Project Gutenberg volunteers and employees expend
considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.
1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for
the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.
1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you
discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.
1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.
1.F.5. Some states do not allow disclaimers of certain implied
warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.
1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation,
the trademark owner, any agent or employee of the Foundation,
anyone providing copies of Project Gutenberg™ electronic works in
accordance with this agreement, and any volunteers associated with
the production, promotion and distribution of Project Gutenberg™
electronic works, harmless from all liability, costs and expenses,
including legal fees, that arise directly or indirectly from any of the
following which you do or cause to occur: (a) distribution of this or
any Project Gutenberg™ work, (b) alteration, modification, or
additions or deletions to any Project Gutenberg™ work, and (c) any
Defect you cause.
Section 2. Information about the Mission
of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.
Volunteers and financial support to provide volunteers with the
assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.
Section 3. Information about the Project
Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.
The Foundation’s business office is located at 809 North 1500 West,
Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact
Section 4. Information about Donations to
the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many
small donations ($1 to $5,000) are particularly important to
maintaining tax exempt status with the IRS.
The Foundation is committed to complying with the laws regulating
charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.
While we cannot and do not solicit contributions from states where
we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.
International donations are gratefully accepted, but we cannot make
any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.
Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.
Section 5. General Information About
Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.
Project Gutenberg™ eBooks are often created from several printed
editions, all of which are confirmed as not protected by copyright in
the U.S. unless a copyright notice is included. Thus, we do not
necessarily keep eBooks in compliance with any particular paper
edition.
Most people start at our website which has the main PG search
facility: www.gutenberg.org.
This website includes information about Project Gutenberg™,
including how to make donations to the Project Gutenberg Literary
Archive Foundation, how to help produce our new eBooks, and how
to subscribe to our email newsletter to hear about new eBooks.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!
ebookultra.com