100% found this document useful (7 votes)
74 views62 pages

Instant Download Thoughtful Machine Learning With Python A Test Driven Approach 1st Edition Matthew Kirk PDF All Chapter

Approach

Uploaded by

sfsfcatian
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (7 votes)
74 views62 pages

Instant Download Thoughtful Machine Learning With Python A Test Driven Approach 1st Edition Matthew Kirk PDF All Chapter

Approach

Uploaded by

sfsfcatian
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the full version of the textbook now at textbookfull.

com

Thoughtful Machine Learning with Python A


Test Driven Approach 1st Edition Matthew Kirk

https://textbookfull.com/product/thoughtful-
machine-learning-with-python-a-test-driven-
approach-1st-edition-matthew-kirk/

Explore and download more textbook at https://textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Thoughtful machine learning with Python a test driven


approach First Edition Kirk

https://textbookfull.com/product/thoughtful-machine-learning-with-
python-a-test-driven-approach-first-edition-kirk/

textbookfull.com

Python Debugging for AI, Machine Learning, and Cloud


Computing: A Pattern-Oriented Approach 1st Edition
Vostokov
https://textbookfull.com/product/python-debugging-for-ai-machine-
learning-and-cloud-computing-a-pattern-oriented-approach-1st-edition-
vostokov/
textbookfull.com

Python Real World Machine Learning: Real World Machine


Learning: Take your Python Machine learning skills to the
next level 1st Edition Joshi
https://textbookfull.com/product/python-real-world-machine-learning-
real-world-machine-learning-take-your-python-machine-learning-skills-
to-the-next-level-1st-edition-joshi/
textbookfull.com

Labour Law Reforms in India All in the Name of Jobs 1st


Edition Anamitra Roychowdhury

https://textbookfull.com/product/labour-law-reforms-in-india-all-in-
the-name-of-jobs-1st-edition-anamitra-roychowdhury/

textbookfull.com
What is Fundamental Anthony Aguirre

https://textbookfull.com/product/what-is-fundamental-anthony-aguirre/

textbookfull.com

THE PROBLEM OF THE RUPEE ITS ORIGIN AND ITS SOLUTION


History of Indian Currency Banking B.R. Ambedkar

https://textbookfull.com/product/the-problem-of-the-rupee-its-origin-
and-its-solution-history-of-indian-currency-banking-b-r-ambedkar/

textbookfull.com

Psychology VCE UNITS 3 4 7th Edition John Grivas

https://textbookfull.com/product/psychology-vce-units-3-4-7th-edition-
john-grivas/

textbookfull.com

Fashionopolis: The Price of Fast Fashion and the Future of


Clothes Dana Thomas

https://textbookfull.com/product/fashionopolis-the-price-of-fast-
fashion-and-the-future-of-clothes-dana-thomas/

textbookfull.com

DevOps for Azure Applications: Deploy Web Applications on


Azure Suren Machiraju

https://textbookfull.com/product/devops-for-azure-applications-deploy-
web-applications-on-azure-suren-machiraju/

textbookfull.com
Industrial Engineering and Operations Management II XXIV
IJCIEOM Lisbon Portugal July 18 20 João Reis

https://textbookfull.com/product/industrial-engineering-and-
operations-management-ii-xxiv-ijcieom-lisbon-portugal-july-18-20-joao-
reis/
textbookfull.com
Thoughtful Machine Learning with
Python
A Test-Driven Approach

Matthew Kirk
Thoughtful Machine Learning with Python
by Matthew Kirk
Copyright © 2017 Matthew Kirk. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North,
Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales
promotional use. Online editions are also available for most titles
(http://oreilly.com/safari). For more information, contact our
corporate/institutional sales department: 800-998-9938 or
[email protected].

Editors: Mike Loukides and Shannon Cutt

Production Editor: Nicholas Adams

Copyeditor: James Fraleigh

Proofreader: Charles Roumeliotis

Indexer: Wendy Catalano

Interior Designer: David Futato

Cover Designer: Randy Comer

Illustrator: Rebecca Demarest

January 2017: First Edition


Revision History for the First Edition

2017-01-10: First Release

See http://oreilly.com/catalog/errata.csp?isbn=9781491924136 for release


details.
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Thoughtful
Machine Learning with Python, the cover image, and related trade dress are
trademarks of O’Reilly Media, Inc.
While the publisher and the author have used good faith efforts to ensure that
the information and instructions contained in this work are accurate, the
publisher and the author disclaim all responsibility for errors or omissions,
including without limitation responsibility for damages resulting from the use
of or reliance on this work. Use of the information and instructions contained
in this work is at your own risk. If any code samples or other technology this
work contains or describes is subject to open source licenses or the intellectual
property rights of others, it is your responsibility to ensure that your use
thereof complies with such licenses and/or rights.
978-1-491-92413-6
[LSI]
Preface

I wrote the first edition of Thoughtful Machine Learning out of frustration over
my coworkers’ lack of discipline. Back in 2009 I was working on lots of
machine learning projects and found that as soon as we introduced support
vector machines, neural nets, or anything else, all of a sudden common coding
practice just went out the window.
Thoughtful Machine Learning was my response. At the time I was writing
100% of my code in Ruby and wrote this book for that language. Well, as you
can imagine, that was a tough challenge, and I’m excited to present a new
edition of this book rewritten for Python. I have gone through most of the
chapters, changed the examples, and made it much more up to date and
useful for people who will write machine learning code. I hope you enjoy it.
As I stated in the first edition, my door is always open. If you want to talk to
me for any reason, feel free to drop me a line at [email protected]. And
if you ever make it to Seattle, I would love to meet you over coffee.
Conventions Used in This Book
The following typographical conventions are used in this book:
Italic
Indicates new terms, URLs, email addresses, filenames, and file
extensions.
Constant width
Used for program listings, as well as within paragraphs to refer to
program elements such as variable or function names, databases,
data types, environment variables, statements, and keywords.
Constant width bold
Shows commands or other text that should be typed literally by the
user.
Constant width italic
Shows text that should be replaced with user-supplied values or by
values determined by context.

NOTE
This element signifies a general note.
Using Code Examples
Supplemental material (code examples, exercises, etc.) is available for
download at http://github.com/thoughtfulml/examples-in-python.
This book is here to help you get your job done. In general, if example code is
offered with this book, you may use it in your programs and documentation.
You do not need to contact us for permission unless you’re reproducing a
significant portion of the code. For example, writing a program that uses
several chunks of code from this book does not require permission. Selling or
distributing a CD-ROM of examples from O’Reilly books does require
permission. Answering a question by citing this book and quoting example
code does not require permission. Incorporating a significant amount of
example code from this book into your product’s documentation does require
permission.
We appreciate, but do not require, attribution. An attribution usually includes
the title, author, publisher, and ISBN. For example: “Thoughtful Machine
Learning with Python by Matthew Kirk (O’Reilly). Copyright 2017 Matthew Kirk,
978-1-491-92413-6.”
If you feel your use of code examples falls outside fair use or the permission
given above, feel free to contact us at [email protected].
O’Reilly Safari
NOTE
Safari (formerly Safari Books Online) is a membership-based training and
reference platform for enterprise, government, educators, and individuals.
Members have access to thousands of books, training videos, Learning Paths,
interactive tutorials, and curated playlists from over 250 publishers, including
O’Reilly Media, Harvard Business Review, Prentice Hall Professional, Addison-
Wesley Professional, Microsoft Press, Sams, Que, Peachpit Press, Adobe, Focal
Press, Cisco Press, John Wiley & Sons, Syngress, Morgan Kaufmann, IBM
Redbooks, Packt, Adobe Press, FT Press, Apress, Manning, New Riders,
McGraw-Hill, Jones & Bartlett, and Course Technology, among others.
For more information, please visit http://oreilly.com/safari.
How to Contact Us
Please address comments and questions concerning this book to the publisher:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

800-998-9938 (in the United States or Canada)

707-829-0515 (international or local)

707-829-0104 (fax)

We have a web page for this book, where we list errata, examples, and any
additional information. You can access this page at http://bit.ly/thoughtful-
machine-learning-with-python.
To comment or ask technical questions about this book, send email to
[email protected].
For more information about our books, courses, conferences, and news, see
our website at http://www.oreilly.com.
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Acknowledgments
I’ve waited over a year to finish this book. My diagnosis of testicular cancer
and the sudden death of my dad forced me take a step back and reflect before
I could come to grips with writing again. Even though it took longer than I
estimated, I’m quite pleased with the result.
I am grateful for the support I received in writing this book: everybody who
helped me at O’Reilly and with writing the book. Shannon Cutt, my editor, who
was a rock and consistently uplifting. Liz Rush, the sole technical reviewer who
was able to make it through the process with me. Stephen Elston, who gave
helpful feedback. Mike Loukides, for humoring my idea and letting it grow into
two published books.
I’m grateful for friends, most especially Curtis Fanta. We’ve known each other
since we were five. Thank you for always making time for me (and never
being deterred by my busy schedule).
To my family. For my nieces Zoe and Darby, for their curiosity and awe. To my
brother Jake, for entertaining me with new music and movies. To my mom
Carol, for letting me discover the answers, and advising me to take physics
(even though I never have). You all mean so much to me.
To the Le family, for treating me like one of their own. Thanks to Liliana for
the Lego dates, and Sayone and Alyssa for being bright spirits in my life. For
Martin and Han for their continual support and love. To Thanh (Dad) and Kim
(Mom) for feeding me more food than I probably should have, and for giving
me multimeters and books on opamps. Thanks for being a part of my life.
To my grandma, who kept asking when she was going to see the cover. You’re
always pushing me to achieve, be it through Boy Scouts or owning a business.
Thank you for always being there.
To Sophia, my wife. A year ago, we were in a hospital room while I was
pumped full of painkillers…and we survived. You’ve been the most constant
pillar of my adult life. Whenever I take on a big hairy audacious goal (like
writing a book), you always put your needs aside and make sure I’m well
taken care of. You mean the world to me.
Last, to my dad. I miss your visits and our camping trips to the woods. I wish
you were here to share this with me, but I cherish the time we did have
together. This book is for you.
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Chapter 1. Probably Approximately
Correct Software

If you’ve ever flown on an airplane, you have participated in one of the safest
forms of travel in the world. The odds of being killed in an airplane are 1 in
29.4 million, meaning that you could decide to become an airline pilot, and
throughout a 40-year career, never once be in a crash. Those odds are
staggering considering just how complex airplanes really are. But it wasn’t
always that way.
The year 2014 was bad for aviation; there were 824 aviation-related deaths,
including the Malaysia Air plane that went missing. In 1929 there were 257
casualties. This makes it seem like we’ve become worse at aviation until you
realize that in the US alone there are over 10 million flights per year, whereas
in 1929 there were substantially fewer — about 50,000 to 100,000. This
means that the overall probability of being killed in a plane wreck from 1929 to
2014 has plummeted from 0.25% to 0.00824%.
Plane travel changed over the years and so has software development. While
in 1929 software development as we know it didn’t exist, over the course of
85 years we have built and failed many software projects.
Recent examples include software projects like the launch of healthcare.gov,
which was a fiscal disaster, costing around $634 million dollars. Even worse
are software projects that have other disastrous bugs. In 2013 NASDAQ shut
down due to a software glitch and was fined $10 million USD. The year 2014
saw the Heartbleed bug infection, which made many sites using SSL
vulnerable. As a result, CloudFlare revoked more than 100,000 SSL
certificates, which they have said will cost them millions.
Software and airplanes share one common thread: they’re both complex and
when they fail, they fail catastrophically and publically. Airlines have been able
to ensure safe travel and decrease the probability of airline disasters by over
96%. Unfortunately we cannot say the same about software, which grows
ever more complex. Catastrophic bugs strike with regularity, wasting billions of
dollars.
Why is it that airlines have become so safe and software so buggy?
Writing Software Right
Between 1929 and 2014 airplanes have become more complex, bigger, and
faster. But with that growth also came more regulation from the FAA and
international bodies as well as a culture of checklists among pilots.
While computer technology and hardware have rapidly changed, the software
that runs it hasn’t. We still use mostly procedural and object-oriented code
that doesn’t take full advantage of parallel computation. But programmers
have made good strides toward coming up with guidelines for writing software
and creating a culture of testing. These have led to the adoption of SOLID and
TDD. SOLID is a set of principles that guide us to write better code, and TDD
is either test-driven design or test-driven development. We will talk about
these two mental models as they relate to writing the right software and talk
about software-centric refactoring.
SOLID
SOLID is a framework that helps design better object-oriented code. In the
same ways that the FAA defines what an airline or airplane should do, SOLID
tells us how software should be created. Violations of FAA regulations
occasionally happen and can range from disastrous to minute. The same is
true with SOLID. These principles sometimes make a huge difference but most
of the time are just guidelines. SOLID was introduced by Robert Martin as the
Five Principles. The impetus was to write better code that is maintainable,
understandable, and stable. Michael Feathers came up with the mnemonic
device SOLID to remember them.
SOLID stands for:

Single Responsibility Principle (SRP)

Open/Closed Principle (OCP)

Liskov Substitution Principle (LSP)

Interface Segregation Principle (ISP)

Dependency Inversion Principle (DIP)

Single Responsibility Principle


The SRP has become one of the most prevalent parts of writing good object-
oriented code. The reason is that single responsibility defines simple classes or
objects. The same mentality can be applied to functional programming with
pure functions. But the idea is all about simplicity. Have a piece of software do
one thing and only one thing. A good example of an SRP violation is a multi-
tool (Figure 1-1). They do just about everything but unfortunately are only
useful in a pinch.
Figure 1-1. A multi-tool like this has too many responsibilities

Open/Closed Principle
The OCP, sometimes also called encapsulation, is the principle that objects
should be open for extending but not for modification. This can be shown in
the case of a counter object that has an internal count associated with it. The
object has the methods increment and decrement. This object should not allow
anybody to change the internal count unless it follows the defined API, but it
can be extended (e.g., to notify someone of a count change by an object like
Notifier).

Liskov Substitution Principle


The LSP states that any subtype should be easily substituted out from
underneath a object tree without side effect. For instance, a model car could
be substituted for a real car.

Interface Segregation Principle


The ISP is the principle that having many client-specific interfaces is better
than a general interface for all clients. This principle is about simplifying the
interchange of data between entities. A good example would be separating
garbage, compost, and recycling. Instead of having one big garbage can it has
three, specific to the garbage type.

Dependency Inversion Principle


The DIP is a principle that guides us to depend on abstractions, not
concretions. What this is saying is that we should build a layer or inheritance
tree of objects. The example Robert Martin explains in his original paper1 is
that we should have a KeyboardReader inherit from a general Reader object
instead of being everything in one class. This also aligns well with what Arthur
Riel said in Object Oriented Design Heuristics about avoiding god classes.
While you could solder a wire directly from a guitar to an amplifier, it most
likely would be inefficient and not sound very good.

NOTE
The SOLID framework has stood the test of time and has shown up in many books by Martin
and Feathers, as well as appearing in Sandi Metz’s book Practical Object-Oriented Design in
Ruby. This framework is meant to be a guideline but also to remind us of the simple things
so that when we’re writing code we write the best we can. These guidelines help write
architectually correct software.
Testing or TDD
In the early days of aviation, pilots didn’t use checklists to test whether their
airplane was ready for takeoff. In the book The Right Stuff by Tom Wolfe,
most of the original test pilots like Chuck Yeager would go by feel and their
own ability to manage the complexities of the craft. This also led to a quarter
of test pilots being killed in action.2
Today, things are different. Before taking off, pilots go through a set of checks.
Some of these checks can seem arduous, like introducing yourself by name to
the other crewmembers. But imagine if you find yourself in a tailspin and need
to notify someone of a problem immediately. If you didn’t know their name it’d
be hard to communicate.
The same is true for good software. Having a set of systematic checks,
running regularly, to test whether our software is working properly or not is
what makes software operate consistently.
In the early days of software, most tests were done after writing the original
software (see also the waterfall model, used by NASA and other organizations
to design software and test it for production). This worked well with the style
of project management common then. Similar to how airplanes are still built,
software used to be designed first, written according to specs, and then tested
before delivery to the customer. But because technology has a short shelf life,
this method of testing could take months or even years. This led to the Agile
Manifesto as well as the culture of testing and TDD, spearheaded by Kent
Beck, Ward Cunningham, and many others.
The idea of test-driven development is simple: write a test to record what you
want to achieve, test to make sure the test fails first, write the code to fix the
test, and then, after it passes, fix your code to fit in with the SOLID guidelines.
While many people argue that this adds time to the development cycle, it
drastically reduces bug deficiencies in code and improves its stability as it
operates in production.3
Airplanes, with their low tolerance for failure, mostly operate the same way.
Before a pilot flies the Boeing 787 they have spent X amount of hours in a
flight simulator understanding and testing their knowledge of the plane.
Before planes take off they are tested, and during the flight they are tested
again. Modern software development is very much the same way. We test our
knowledge by writing tests before deploying it, as well as when something is
deployed (by monitoring).
But this still leaves one problem: the reality that since not everything stays the
same, writing a test doesn’t make good code. David Heinemer Hanson, in his
viral presentation about test-driven damage, has made some very good points
about how following TDD and SOLID blindly will yield complicated code. Most
of his points have to do with needless complication due to extracting out every
piece of code into different classes, or writing code to be testable and not
readable. But I would argue that this is where the last factor in writing
software right comes in: refactoring.
Refactoring
Refactoring is one of the hardest programming practices to explain to
nonprogrammers, who don’t get to see what is underneath the surface. When
you fly on a plane you are seeing only 20% of what makes the plane fly.
Underneath all of the pieces of aluminum and titanium are intricate electrical
systems that power emergency lighting in case anything fails during flight,
plumbing, trusses engineered to be light and also sturdy — too much to list
here. In many ways explaining what goes into an airplane is like explaining to
someone that there’s pipes under the sink below that beautiful faucet.
Refactoring takes the existing structure and makes it better. It’s taking a
messy circuit breaker and cleaning it up so that when you look at it, you know
exactly what is going on. While airplanes are rigidly designed, software is not.
Things change rapidly in software. Many companies are continuously
deploying software to a production environment. All of that feature
development can sometimes cause a certain amount of technical debt.
Technical debt, also known as design debt or code debt, is a metaphor for
poor system design that happens over time with software projects. The
debilitating problem of technical debt is that it accrues interest and eventually
blocks future feature development.
If you’ve been on a project long enough, you will know the feeling of having
fast releases in the beginning only to come to a standstill toward the end.
Technical debt in many cases arises through not writing tests or not following
the SOLID principles.
Having technical debt isn’t a bad thing — sometimes projects need to be
pushed out earlier so business can expand — but not paying down debt will
eventually accrue enough interest to destroy a project. The way we get over
this is by refactoring our code.
By refactoring, we move our code closer to the SOLID guidelines and a TDD
codebase. It’s cleaning up the existing code and making it easy for new
developers to come in and work on the code that exists like so:

1. Follow the SOLID guidelines


1. Single Responsibility Principle

2. Open/Closed Principle
3. Liskov Substitution Principle

4. Interface Segregation Principle

5. Dependency Inversion Principle

2. Implement TDD (test-driven development/design)

3. Refactor your code to avoid a buildup of technical debt

The real question now is what makes the software right?


Writing the Right Software
Writing the right software is much trickier than writing software right. In his
book Specification by Example, Gojko Adzic determines the best approach to
writing software is to craft specifications first, then to work with consumers
directly. Only after the specification is complete does one write the code to fit
that spec. But this suffers from the problem of practice — sometimes the
world isn’t what we think it is. Our initial model of what we think is true many
times isn’t.
Webvan, for instance, failed miserably at building an online grocery business.
They had almost $400 million in investment capital and rapidly built
infrastructure to support what they thought would be a booming business.
Unfortunately they were a flop because of the cost of shipping food and the
overestimated market for online grocery buying. By many measures they were
a success at writing software and building a business, but the market just
wasn’t ready for them and they quickly went bankrupt. Today a lot of the
infrastructure they built is used by Amazon.com for AmazonFresh.
In theory, theory and practice are the same. In practice they are not.
Albert Einstein
We are now at the point where theoretically we can write software correctly
and it’ll work, but writing the right software is a much fuzzier problem. This is
where machine learning really comes in.
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Writing the Right Software with Machine Learning
In The Knowledge-Creating Company, Nonaka and Takeuchi outlined what
made Japanese companies so successful in the 1980s. Instead of a top-down
approach of solving the problem, they would learn over time. Their example of
kneading bread and turning that into a breadmaker is a perfect example of
iteration and is easily applied to software development.
But we can go further with machine learning.
What Exactly Is Machine Learning?
According to most definitions, machine learning is a collection of algorithms,
techniques, and tricks of the trade that allow machines to learn from data —
that is, something represented in numerical format (matrices, vectors, etc.).
To understand machine learning better, though, let’s look at how it came into
existence. In the 1950s extensive research was done on playing checkers. A
lot of these models focused on playing the game better and coming up with
optimal strategies. You could probably come up with a simple enough program
to play checkers today just by working backward from a win, mapping out a
decision tree, and optimizing that way.
Yet this was a very narrow and deductive way of reasoning. Effectively the
agent had to be programmed. In most of these early programs there was no
context or irrational behavior programmed in.
About 30 years later, machine learning started to take off. Many of the same
minds started working on problems involving spam filtering, classification, and
general data analysis.
The important shift here is a move away from computerized deduction to
computerized induction. Much as Sherlock Holmes did, deduction involves
using complex logic models to come to a conclusion. By contrast, induction
involves taking data as being true and trying to fit a model to that data. This
shift has created many great advances in finding good-enough solutions to
common problems.
The issue with inductive reasoning, though, is that you can only feed the
algorithm data that you know about. Quantifying some things is exceptionally
difficult. For instance, how could you quantify how cuddly a kitten looks in an
image?
In the last 10 years we have been witnessing a renaissance around deep
learning, which alleviates that problem. Instead of relying on data coded by
humans, algorithms like autoencoders have been able to find data points we
couldn’t quantify before.
This all sounds amazing, but with all this power comes an exceptionally high
cost and responsibility.
The High Interest Credit Card Debt of Machine
Learning
Recently, in a paper published by Google titled “Machine Learning: The High
Interest Credit Card of Technical Debt”, Sculley et al. explained that machine
learning projects suffer from the same technical debt issues outlined plus more
(Table 1-1).
They noted that machine learning projects are inherently complex, have vague
boundaries, rely heavily on data dependencies, suffer from system-level
spaghetti code, and can radically change due to changes in the outside world.
Their argument is that these are specifically related to machine learning
projects and for the most part they are.
Instead of going through these issues one by one, I thought it would be more
interesting to tie back to our original discussion of SOLID and TDD as well as
refactoring and see how it relates to machine learning code.

Table 1-1. The high interest credit card debt of machine learning
Machine learning problem Manifests as SOLID violation

Entanglement Changing one factor changes everything SRP

Hidden feedback loops Having built-in hidden features in model OCP

Undeclared consumers/visibility debt ISP

Unstable data dependencies Volatile data ISP

Underutilized data dependencies Unused dimensions LSP

Correction cascade *

Glue code Writing code that does everything SRP

Pipeline jungles Sending data through complex workflow DIP


Experimental paths Dead paths that go nowhere DIP

Configuration debt Using old configurations for new data *

Fixed thresholds in a dynamic world Not being flexible to changes in correlations *

Correlations change Modeling correlation over causation ML Specific


SOLID Applied to Machine Learning
SOLID, as you remember, is just a guideline reminding us to follow certain
goals when writing object-oriented code. Many machine learning algorithms
are inherently not object oriented. They are functional, mathematical, and use
lots of statistics, but that doesn’t have to be the case. Instead of thinking of
things in purely functional terms, we can strive to use objects around each
row vector and matrix of data.

SRP
In machine learning code, one of the biggest challenges for people to realize is
that the code and the data are dependent on each other. Without the data the
machine learning algorithm is worthless, and without the machine learning
algorithm we wouldn’t know what to do with the data. So by definition they
are tightly intertwined and coupled. This tightly coupled dependency is
probably one of the biggest reasons that machine learning projects fail.
This dependency manifests as two problems in machine learning code:
entanglement and glue code. Entanglement is sometimes called the principle
of Changing Anything Changes Everything or CACE. The simplest example is
probabilities. If you remove one probability from a distribution, then all the
rest have to adjust. This is a violation of SRP.
Possible mitigation strategies include isolating models, analyzing dimensional
dependencies,4 and regularization techniques.5 We will return to this problem
when we review Bayesian models and probability models.
Glue code is the code that accumulates over time in a coding project. Its
purpose is usually to glue two separate pieces together inelegantly. It also
tends to be the type of code that tries to solve all problems instead of just
one.
Whether machine learning researchers want to admit it or not, many times the
actual machine learning algorithms themselves are quite simple. The
surrounding code is what makes up the bulk of the project. Depending on
what library you use, whether it be GraphLab, MATLAB, scikit-learn, or R, they
all have their own implementation of vectors and matrices, which is what
machine learning mostly comes down to.

OCP
Random documents with unrelated
content Scribd suggests to you:
myöhemmin seurasi samanlainen kolahdus takaa. Mitään muuta ei
tarvittu ilmaisemaan apinamiehelle, että hän jälleen oli vankina Lu-
donin temppelissä.

Hän seisoi aivan alallaan siinä, mihin oli pysähtynyt kuullessaan


ensimmäisen kivioven putoamisen. Ei häntä enää helposti syöstäisi
gryfin kuoppaan tai muuhun samanlaiseen vaaraan, kuten oli
tapahtunut Lu-donin saadessa hänet loukkuun Gryf-temppelissä.
Hänen silmänsä alkoivat vähitellen tottua pimeyteen, ja hän huomasi
himmeätä valoa tunkeutuvan huoneeseen jostakin reiästä, vaikkei
muutamaan minuuttiin kyennyt päättelemään missä se oli. Vihdoin
hän keksi katonlaessa pienen aukon, kolmisen jalkaa läpimitaltaan,
ja siitä tunkeusi hänen vankilaansa jotakin, mikä oli pikemmin vain
kuulakkaampaa pimeyttä kuin valoa.

Senjälkeen kun ovet olivat loksahtaneet kiinni, ei hän ollut kuullut


mitään ääntä, vaikka alati pinnisti herkkiä korviansa saadakseen
jotakin vihiä suunnasta, jonne ryöstäjä oli vienyt hänen puolisonsa.
Nyt hän saattoi erottaa vankityrmänsä ääriiviivat. Se oli pieni huone,
ei viittätoista jalkaa avarampi seinästä seinään. Käsien ja polvien
varassa mitä varovaisimmin ryömien hän tarkasti koko
permantopinnan. Ihan keskellä, kattoaukon alla, oli luukku, mutta
muutoin oli permanto kiinteä. Tämän tietäen hänen tarvitsi vain
välttää sitä kohtaa, mikäli permannosta oli kysymys. Sitten Tarzan
kiinnitti huomionsa seiniin. Niissä oli vain kaksi aukkoa: ovi, josta
hän oli astunut sisälle, ja sitä vastapäätä ovi, josta soturi oli kantanut
Jane Claytonin. Kumpikin oli suljettu kivipatsaalla, jotka pakeneva
soturi oli lähtiessään päästänyt alas.

*****
Ylimmäinen pappi Lu-don lipaisi ohuita huuliaan ja hieroi luisevia
valkoisia käsiään tyydytyksestä, kun Pan-sat kantoi Jane Claytonin
hänen luokseen ja laski uhrin hänen eteensä permannolle.

"Hyvin tehty, Pan-sat!" huudahti hän. "Sinä saat hyvän palkan


tästä palveluksesta. Kunhan meillä nyt vain olisi väärä Dor-ul-Otho
vallassamme, niin koko, Pal-ul-don pian viruisi jalkojemme juuressa."

"Mestari, hän on minulla!" sanoi Pan-sat.

"Mitä!" huudahti Lu-don. "Sinulla on Tarzan-jad-guru? Olet hänet


ehkä tappanut. Kerro minulle, ihmeellinen Pan-satini, kerro nopeasti!
Sydämeni pakahtuu halusta tietää."

"Olen pyydystänyt hänet elävältä, mestari", vastasi Pan-sat. "Hän


on siinä pienessä kammiossa, jonka esi-isämme rakensivat niiden
kaappaamiseksi, jotka olivat liian väkeviä miesvoimin nujertaa."

"Olet menetellyt hyvin, Pan-sat; minä…"

Säikähtynyt pappi syöksyi huoneeseen. "Joutuin, mestari, joutuin",


huusi hän, "käytävät ovat täynnä Ja-donin sotureita!"

"Sinä olet hullu", ärjäisi ylimmäinen pappi. "Minun soturini pitävät


hallussaan palatsia ja temppeliä."

"Puhun totta, mestari", vakuutti pappi; "käytävässä on sotilaita,


jotka lähestyvät juuri tätä huonetta, ja ne tulevat kaupunkiin
johtavalta salakäytävältä päin."

"Asia saattaa olla niinkuin hän sanoo", selitti Pan-sat. "Siltä


suunnalta oli Tarzan-jad-guru tulossa, kun minä hänet huomasin ja
saatoin satimeen. Hän johti paraikaa sotureitansa kaikkein
pyhimpään."

Lu-don juoksi nopeasti ovelle ja vilkaisi käytävään. Ensi


silmäyksellä hän näki, että pappi ei ollut aiheettomasti säikähtynyt.
Kaksitoista sotilasta marssi käytävää pitkin häntä kohden, mutta he
näyttivät hämmentyneiltä eivätkä suinkaan varmoilta asiastaan.
Ylimmäinen pappi arvasi, että he menetettyään johtajansa, Tarzanin,
olivat jotensakin eksyksissä temppelin maanalaisten holvien
tuntemattomissa sokkeloissa.

Astuen takaisin huoneeseen Lu-don tarttui katosta riippuvaan


nahkahihnaan. Hän nyki sitä voimakkaasti ja kautta temppelin
kumahtelivat metallisen gongongin syvät soinnahdukset. Viisi kertaa
sen lyönnit kiirivät käytävissä, ja sitten Lu-don kääntyi pappien
puoleen. "Tuokaa nainen tänne ja seuratkaa minua", käski hän.

Hän meni ulos pienestä ovesta, ja toiset nostivat Jane Claytonin


ylös ja seurasivat häntä. He etenivät kapean käytävän läpi ja portaita
ylöspäin kääntyen milloin oikealle, milloin vasemmalle ja mutkitellen
taaksepäin sokkeloverkossa, kunnes päätyivät kierukkaportaille,
jotka nousivat maanpinnalle isoimmassa alttaripihassa itäisen alttarin
lähellä.

Kaikilta suunnilta kuului nyt sekä alhaalta käytävistä että ylhäältä


maanpinnalta kiireisiä askelia. Hälytyssoittimen viisi kajahdusta oli
kutsunut uskolliset puoluelaiset Lu-donin avuksi hänen
yksityishuoneisiinsa. Papit, jotka tunsivat tien, opastivat vähemmän
perehtyneet soturit paikalle, ja nyt eivät Tarzania seuranneet olleet
ainoastaan johtajatta, vaan heitä vastassa oli aivan ylivoimainen
joukko. He olivat rohkeita miehiä, mutta näissä olosuhteissa he olivat
avuttomia, ja niin he peräytyivät samaa tietä kuin olivat tulleetkin.
Ehdittyään pienemmän holvitien ahtaaseen alaan he tunsivat
olevansa turvassa, koska ainoastaan yksi vihollinen kerrallaan saattoi
täällä hyökätä heidän kimppuunsa. Mutta heidän suunnitelmansa oli
mennyt myttyyn, ja ehkä koko asiakin menetetty, koska Ja-don oli
niin paljon rakentanut heidän yrityksensä menestykseen.

Kuullessaan temppelien gongongien kaiun Ja-don otaksui, että


Tarzan oli miehineen alottanut taistelun, ja niin hän ryhtyi
hyökkäykseensä palatsin porttia vastaan. Temppelin sisäpihaan kuuli
Lu-don hurjia sotahuutoja, jotka antoivat tiedon todellisesta voimien
mittelystä. Jättäen Pan-satin ja toisen papin vartioimaan naista, hän
kiirehti palatsia kohti johtaakseen itse joukkojaan, ja astuessaan
temppelialueen läpi hän toimitti lähetin ottamaan selvää alhaalla
sokkeloissa käydyn nujakan tuloksista ja toisia airueita levittämään
hänen puoluelaistensa kesken sanomaa, että väärä Dor-ul-Otho oli
vankina temppelissä.

Kun taistelun melske kohosi A-lurin yli, kääntyi luutnantti Erich


Obergatz pehmeällä taljavuoteellaan. Hän hieroi silmiään ja katsahti
ympärilleen. Ulkona oli vielä pimeä.

"Minä olen Jad-ben-Otho", virkkoi hän. "Kuka rohkenee häiritä


minun untani?"

Permannolla hänen makuusijansa jalkopäässä kyyröttävää


orjatarta puistatti ja hän kosketti otsallaan permantoa. "Varmaankin
on vihollinen hyökännyt, oi Jad-ben-Otho." Tyttö puhui lepytellen,
sillä hän tiesi kokemuksesta, mihin hirvittävään ja hulluun raivoon
vähäpätöisetkin seikat saattoivat suuren jumalan kiihoittaa.

Muuan pappi syöksyi äkkiä oviuutimen välitse, painui rähmälleen


ja hieroi otsaansa permantokivitykseen. "Oi Jad-ben-Otho", huusi
hän, "Ja-donin sotilaat ovat hyökänneet palatsiin ja temppeliin.
Paraikaa he taistelevat käytävissä Lu-donin suojien lähettyvillä, ja
ylimmäinen pappi pyytää sinua tulemaan palatsiin rohkaistaksesi
uskollisia sotilaitasi."

Obergatz hypähti pystyyn.. "Minä olen Jad-ben-Otho", kiljasi hän.


"Salamoillani tuhoan jumalanpilkkaajat, jotka rohkenevat hyökätä
A-lurin pyhään kaupunkiin!"

Hetkisen hän reuhtoi juosten päämäärättä pitkin huonetta, papin


ja orjattaren pysyessä rähmällään ja otsa maassa.

"Ylös", huudahti Obergatz potkaisten vihaisesti orjatyttöä kylkeen,


"ylös! Jäisitkö sinä tänne odottamaan koko päiväksi, sillävälin kun
pimeyden voimat saartavat valon kaupunkia?"

Suunniltaan säikähtyneinä, kuten kaikki, joiden täytyi olla suurta


jumalaa palvelemassa, nousivat molemmat ja seurasivat Obergatzia
palatsiin päin.

Sotilaiden huutojen yli kohosi yhä temppelinpappien kirkuna: "Jad-


ben-Otho on täällä, ja väärä Dor-ul-Otho on temppeliin vangittuna!"
Yhäti toistellut huudot kuuluivat vihollistenkin korviin, niinkuin oli
tarkoitettukin.
NELJÄSKOLMATTA LUKU

Tuomion hetki

Auringon noustessa olivat Ja-donin joukot vielä pidäteltyinä


palatsin portilla. Vanha urho oli viereltä valloittanut korkean
rakennuksen ja piti harjalla aina sotilasta tähystämässä palatsin
pohjoismuuria kohti, siltä kun oli Ta-denin tehtävä hyökkäyksensä.
Mutta minuutit venyivät tunneiksi, eikä toisesta sotajoukosta näkynyt
merkkiäkään; ja sitten ilmestyi auringon loisteessa
palatsirakennuksen katolle ylimmäinen pappi Lu-don,
vallantavoittelija Mo-sar ja kummallinen alaston miehenhahmo, jonka
pitkään tukkaan ja partaan oli punottu vereksiä saniaisia ja kukkia.
Heidän takanaan seisoi parvi alempia pappeja, jotka veisasivat
yhteen ääneen: "Tämä on Jad-ben-Otho. Laskekaa aseenne ja
antautukaa!" Tätä he toistivat toistamistaan ja sen kanssa
vuorotellen huutoa: "Väärä Dor-ul-Otho on vankina!"

Kun taistellaan suuria ruumiillisia ponnistuksia vaativilla aseilla,


syntyy tavallisesti hiljaisuudenkin toveja sotajoukkojen kesken, ja
sellaisena aikana kohosi äkkiä ääni Ja-donin seuralaisten riveistä:
"Näyttäkää meille Dor-ul-Otho! Me emme usko teitä!"
"Odottakaa!" huusi Lu-don. "Jollen minä tuo häntä esille
ennenkuin aurinko on liikkunut oman leveytensä verran, niin palatsin
portit avataan teille ja minun sotilaani laskevat aseensa."

Hän kääntyi erään pappinsa puoleen, antaen lyhyitä määräyksiä.

*****

Apinamies astuskeli ahtaan koppinsa permannolla. Katkerasti hän


soimasi itseään typeryydestä, joka oli vienyt hänet tähän uuteen
ansaan. Mutta oliko se typeryyttä? Mitäpä muuta hän olisi saattanut
tehdä kuin rientää puolisonsa avuksi? Hän yritti arvailla, kuinka he
olivat saaneet hänet Ja-lurista siepatuksi, ja sitten hänen mieleensä
äkkiä muistuivat sen soturin piirteet, jonka vallassa hän oli nähnyt
Janen. Ne tuntuivat omituisen tutuilta. Hän vaivasi aivojaan yrittäen
muistella, missä oli miehen ennen nähnyt, ja sitten asia hänelle
valkenikin. Mies oli sama vieras soturi, joka oli liittynyt Ja-donin
joukkoihin Ja-lurin ulkopuolella sinä päivänä, jona Tarzan oli
ratsastanut isolla gryfillä Kor-ul-jan viereisestä asumattomasta
rotkosta alas pohjoisen päällikön pääkaupunkiin. Mutta kuka hän
muuten oli? Tarzan tiesi, että hän ei sitä ennen ollut häntä koskaan
nähnyt.

Nyt hän kuuli gongongin kumahtelun ulkoa käytävästä ja hyvin


heikkoa jytyä kiireisistä askelista, joita huudot säestivät. Hän arvasi,
että hänen sotilaansa oli huomattu ja kahakka alkanut. Tuskaksi
kävi, että hänen ei ollut sallittu ottaa siihen osaa.

Yhä uudelleen hän koetteli vankilansa ovia ja permannon


keskiluukkua, mutta ne olivat hänen vimmatuimmastakin
rytyytyksestään hievahtamattomia. Hän yritti kurkistella ylhäällä
olevaan aukkoon, mutta ei erottanut mitään, ja sitten hän jatkoi
turhaa kävelyään edestakaisin kuin häkkiin suljettu leijona
ristikkonsa takana.

Tunnit kuluivat vitkallisesti. Hänen korvansa erottivat heikkoja


ääniä, ikäänkuin huikkauksia pitkän matkan päästä. Taistelu oli
käynnissä. Hän ihmetteli, pääsisikö Ja-don voittajaksi, ja jos niin
tapahtuisi, voisivatko hänen ystävänsä mitenkään löytää hänet tästä
kallionsisuksen salakammiosta. Hän epäili sitä.

Mutta kun hän taas vilkaisi kattoaukkoon, näkyi keskikohdalla


riippuvan jotakin. Hän meni lähemmäksi ja tähysi tiukemmin. Niin,
siellä oli jotakin. Se näkyi olevan köysi. Tarzan mietti, oliko se ollut
siinä kaiken aikaa. Kaiketikin, koska hän ei ollut kuullut mitään
rasahdusta ylhäältä — ja olihan huoneessa niin pimeä, että köysi
helposti oli saattanut jäädä häneltä huomaamatta.

Hän kurotti kätensä sitä kohti. Pää oli juuri hänen ulottuvillaan.
Hän painausi sen varaan nähdäkseen, kestäisikö se hänet. Sitten hän
laski sen irti ja peräytyi, yhä katsellen sitä, niinkuin olette nähnyt
eläimen tekevän tutkiakseen jotakin outoa esinettä — sellaiset pikku
piirteet erottivat Tarzanin muista ihmisistä, tehostaen hänen
yhtäläisyyttään kotiviidakkonsa petojen kanssa. Yhä uudelleen ja
uudelleen hän kosketti ja koetteli punottua nahkaköyttä, aina
kuunnellen, erottaisiko mitään varottavaa rasahdusta ylhäältä.

Hän varoi astumasta milloinkaan luukulle, ja kun hän vihdoin


laskeutui koko painollaan köyden varaan ja kohotti jalkansa
permannosta, levitti hän ne hyvin haralleen, jotta mahdollisesti
pudotessaan jäisi kahareisin luukun yli. Köysi kesti hänen painonsa.
Ei kuulunut mitään ääntä ylhäältä eikä permantoluukultakaan päin.
Hiljaa ja varovasti hän ote otteelta käsiänsä siirrellen kiskoutui
ylöspäin. Yhä lähemmäksi lakea hän nousi. Tuokion perästä hänen
silmänsä olisivat välikaton yläpuolella. Hänen molemmat kätensä
ulottuivat jo ylempään huoneeseen, kun äkkiä jokin puristui hänen
kyynärvarsiinsa, kytkien ne tiukasti ja jättäen hänet riippumaan
ilmaan kykenemättömänä etenemään tai peräytymään.

Heti ilmestyi valoa ylempään huoneeseen, ja hän näki kamalan


papinnaamion tuijottavan vastaansa. Papin käsissä oli nahkainen
hihna, ja sillä hän köytti Tarzanin käsivarret, kunnes ne olivat
kiedotut kireästi toisiinsa kyynärpäistä melkein sormiin asti. Tämän
papin takana Tarzan näki kohta toisia, ja sitten muutamat tarttuivat
häneen ja vetivät hänet aukosta sisälle.

Melkein heti, kun sai silmänsä permannon tasolle, käsitti hän


kuinka he olivat hänet pyydystäneet. Kaksi silmukkaa oli ollut aukon
kehyksenä. Pappi oli odottanut kummankin köyden päässä eri
puolilla huonetta. Kun vanki oli kiivennyt kyllin korkealle koppiinsa
solutettua köyttä pitkin, jotta käsivarret olivat kohonneet paulojen
sisäpuolelle, olivat papit nopeasti nykäisseet köysistä ja uhri oli
helposti kytketty, jättämättä hänelle mitään tilaisuutta puolustautua
tai iskeä vangitsijoitaan.

Ja nyt he sitoivat hänen säärensä nilkoista polviin asti, nostivat


hänet ylös ja kantoivat ulos huoneesta. He eivät virkkaneet hänelle
sanaakaan, raahatessaan häntä ylöspäin temppelin pihaan.

Taistelun pauhu oli taas yltynyt, kun Ja-don oli kehoittanut


joukkojaan uusiin ponnistuksiin. Ta-den ei ollut saapunut, ja vanhan
päällikön väen lisääntyvä kurittomuus ilmeni vähentyneissä
ponnistuksissa. Juuri silloin kantoivat papit temppelin katolle Tarzan-
jad-gurun, näyttäen hänet kummankin puolueen sotilaille.
"Tässä on väärä Dor-ul-Otho!" kirkaisi Lu-don.

Obergatz, jonka hämmentynyt järki ei koskaan ollut täysin


tajunnut kaikkea, mitä hänen ympärillään tapahtui, sattui
vilkaisemaan köytettyyn ja avuttomaan vankiin, ja kun hänen
silmänsä osuivat apinamiehen yleviin piirteisiin, remahtivat ne
suuriksi kummastuksesta ja pelosta, ja hänen vaaleanharmaat
kasvonsa saivat sairaloisen sinerryksen. Kerran ennen hän oli
todellisuudessa nähnyt Apinain Tarzanin, mutta monet kerrat unessa,
ja aina oli jättiläiskokoinen apinamies kostamassa sodan
kommelluksia kolmelle saksalaiselle upseerille, jotka johtivat
alkuasukasjoukkojaan Tarzanin rauhallisen kodin hävityksessä.

Kapteeni Fritz Schneider oli siten joutunut yksityisen koston


tavoittamaksi, luutnantti von Goss samaten; ja nyt seisoi Obergatz
katsellen kasvoista kasvoihin Nemesistä, joka oli ollut hänen untensa
painajaisena pitkät, ilottomat kuukaudet. Että Tarzan oli köytetty ja
avuton, se ei vähentänyt riutuneen saksalaisen kauhua — hän ei
näkynyt tajuavankaan, että mies ei kyennyt tekemään hänelle
pahaa. Hän vain kyyristeli äännähdellen jotakin, ja sen
huomatessaan Lu-don pelkäsi muidenkin voivan oivaltaa, että tämä
poskiltaan parroittunut idiootti ei ollut jumala ja että noista kahdesta
Tarzan-jad-guru oli jumalallisempi ilmestys. Ylimmäinen pappi
näkikin jo muutamien lähellä seisovien sotilaiden kuiskailevan ja
viittovan toisilleen. Hän astui lähemmäksi Obergatzia.

"Sinä olet Jad-ben-Otho", kuiskasi hän, "kiellä hänet!"

Saksalainen pudistausi. Hänen aivonsa selkenivät hiukan,


ylimmäisen papin sanat tarjosivat hänelle ohjausta pelastukseen.

"Minä olen Jad-ben-Otho!" kirkaisi hän.


Tarzan katsoi häntä suoraan silmiin.

"Te olette luutnantti Obergatz Preussin armeijasta", sanoi hän


sujuvalla saksankielellä. "Te olette viimeinen niistä kolmesta, joita
olen kauan etsinyt; Jumala ei ole meitä suotta osuttanut yhteen nyt
lopultakin."

Luutnantti Obergatzin aivot toimivat melkoisesti selinneinä. Hänkin


huomasi kysyvän ilmeen muutamien lähelläolijain katseissa. Hän
näki molempien kaupunkien toisilleen vihamieliset sotilaat
toimettomina portilla ja jokaisen silmän kääntyneenä häneen ja
köytettyyn apinamieheen. Hän käsitti, että epäröiminen nyt tietäisi
häviötä ja häviö kuolemaa. Hän korotti äänensä ja puhui
preussilaisen upseerin terävästi korostettuun tapaan, joka kuulosti
niin erilaiselta kuin hänen aikaisempi mielipuolinen kirkunansa, että
se sai jokaisen korvan tarkkaavaiseksi ja tuotti hämmennyksen
ilmeen Lu-donin viekkaille kasvoille.

"Minä olen Jad-ben-Otho", lausui Obergatz jämerästi. "Tuo olento


ei ole minun poikani. Varoituksena kaikille herjaajille hän saa
palkkansa alttarilla sen jumalan kädestä, jota hän on häväissyt.
Viekää hänet pois näkyvistäni, mutta kun aurinko kohoaa
korkeimmilleen, kokoontukoot uskolliset temppelipihaan tämän
jumalallisen käden vihan todistajiksi." Ja hän kohotti oikean
kämmenensä.

Ne, jotka olivat tuoneet Tarzanin, veivät hänet siis pois, kuten
Obergatz oli käskenyt. Ja saksalainen kääntyi vielä kerran portilla
seisovien sotilaiden puoleen: "Laskekaa aseenne, Ja-donin soturit,
jotta minä en kutsu alas salamaa tuhoamaan teitä paikkaan, missä
seisotte. Ne, jotka tottelevat minua, saavat anteeksiannon. No,
heittäkää pois aseenne!"
Ja-donin sotilaat liikehtivät levottomasti, luoden vetoavia
silmäyksiä johtajaansa ja pelokkaita katseita katolla seisoviin
pappeihin. Ja-don riensi miestensä luo. "Heittäkööt pelkurit ja
lurjukset aseensa ja astukoot palatsiin", huusi hän, "mutta Ja-don ja
Ja-lurin sotilaat eivät milloinkaan kosketa otsallaan Lu-donin ja
hänen epäjumalansa jalkoja. Tehkää nyt päätöksenne!" huudahti hän
seuraajilleen.

Muutamat heittivät pois aseensa ja hiipivät häpeissään


porttikäytävän läpi palatsiin; ja heidän esimerkkinsä vaikutuksesta
luikki toisiakin tiehensä pohjoisen päällikön riveistä; mutta
enemmistö pysyi vankkana ja uskollisena hänen ympärillään, ja kun
viimeinen arkalainen oli poistunut, kajahdutti Ja-don hurjan
sotahuudon, johtaen seuralaisensa hyökkäykseen, ja jälleen riehui
taistelu palatsin portilla.

Ajoittain Ja-donin joukot työnsivät vastustajansa temppelialueelle,


ja sitten tyrskähti taistelun aalto kaupunkiin jälleen. Eikä Ta-denia
apujoukkoineen vieläkään kuulunut. Puolipäivä läheni. Lu-don oli
kutsunut jokaisen käytettävissä olevan miehen, jota ei ehdottomasti
tarvittu temppelinportin puolustukseen, ja nämä hän lähetti Pan-
satin johdolla salakäytävän läpi kaupunkiin, mistä he hyökkäisivät
takaapäin Ja-donin joukkojen kimppuun, portille jääneiden nuijiessa
näitä edestä.

Suuren ylivoiman ahdistaessa kahdelta puolen oli seuraus


välttämätön, ja vihdoin Ja-donin pienen armeijan jäännökset
antautuivat. Vanha päällikkö raahattiin Lu-donin eteen.

"Viekää hänet temppelipihaan", huusi ylimmäinen pappi. "Hän saa


olla rikostoverinsa kuoleman todistajana, ja kenties Jad-ben-Otho
langettaa samanlaisen tuomion hänelle itselleen."
Sisempi temppelipiha oli sulloutunut täyteen kansaa. Läntisen
alttarin eri puolilla seisovat Tarzan ja hänen puolisonsa sidottuina ja
avuttomina. Taistelun melu oli tauonnut, ja nyt apinamies näki Ja-
donia tuotavan sisäpihaan, ranteet tiukasti sidottuina yhteen rinnan
eteen. Tarzan käänsi silmänsä Janeen ja nyökkäsi Ja-doniin päin.

"Tämä näyttää lopulta", sanoi hän tyynesti. "Hänessä oli meidän


viimeinen ja ainoa toivomme."

"Olemme vihdoinkin löytäneet toisemme, John", vastasi puoliso.


"Ja viimeiset päivämme olemme viettäneet yhdessä. Ainoa
rukoukseni on, että he, jos ottavat sinut, eivät jättäisi minuakaan."

Tarzan ei vastannut, sillä hänen sydämessään oli sama katkera


ajatus kuin toisellakin — hän ei pelännyt kuolemaansa, vaan pelkäsi
Janen jäävän eloon. Apinamies riuhtaisi siteitään, mutta ne olivat
liian monet ja liian vahvat. Lähellä seisova pappi näki sen ja läimäytti
pilkallisesti nauraen avutonta vankia kasvoihin.

"Heittiö", huudahti Jane Clayton.

Tarzan hymyili. "On minua ennenkin näin lyöty, Jane", sanoi hän,
"eikä lyöjä ole koskaan jäänyt henkiin."

"Onko sinulla siis yhä toivoa?" kysyi vaimo.

"Olen vielä elossa", virkkoi apinamies, ikäänkuin se olisi ollut


riittävä vastaus. Jane oli nainen, eikä hänellä ollut miehensä
täydellistä lujamielisyyttä. Sisimmässään hän tiesi, että Tarzan kuolisi
alttarilla keskipäivän aikaan, sillä tämä oli sisäpihaan tuotuna hänelle
maininnut Obergatzin langettaman tuomion; ja hän tiesi Tarzaninkin
tietävän kohtalonsa ehdottomuuden, vaikka viidakkomies oli liian
uljas sitä edes itselleen myöntämään.

Katsellessaan häntä seisomassa siinä niin suorana, ihmeellisenä ja


rohkeana villien vangitsijain keskellä, valitti Jane katkeroituneessa
sydämessään kohtalon julmuutta.

Ja nyt tulivat Lu-don ja alaston Obergatz, ja ylimmäinen pappi vei


saksalaisen paikalleen alttarin taakse, asettuen itse hänen
vasemmalle puolelleen. Lu-don kuiskasi sanan Obergatzin korvaan,
samalla nyökäten Ja-doniin päin. Sairasmielinen mies loi synkän
silmäyksen vanhaan soturiin.

"Ja valejumalan jälkeen väärä profeetta", huudahti hän, osoittaen


syyttävällä sormellaan Ja-donia. Sitten hänen katseensa kääntyi Jane
Claytoniin.

"Entä nainen?" kysyi Lu-don.

"Naisesta minä päätän myöhemmin", vastasi Obergatz. "Minä


puhun hänen kanssaan illalla, sitten kun hän on ehtinyt miettiä,
mitkä ovat seuraukset Jad-ben-Othon vihan herättämisestä."

Hän kohotti silmänsä aurinkoa kohti. "Aika lähenee", sanoi hän


Lu-donille. "Valmista uhri."

Lu-don nyökkäsi Tarzanin ympärille kerääntyneille papeille. Nämä


tarttuivat apinamieheen; miesvoimin he nostivat hänet yhdestä
kivimöhkäleestä hakatulle alttarille selälleen, pää eteläiseen
suuntaan käännettynä, vain muutaman askeleen verran Jane
Claytonista. Vaistomaisesti ja ennenkuin he ehtivät häntä siitä
ehkäistä syöksyi nainen eteenpäin ja kumartui suutelemaan nopeasti
puolisonsa otsaa. "Hyvästi, John!" kuiskasi hän.

"Hyvästi", vastasi toinen hymyillen.

Papit tarttuivat häneen ja laahasivat hänet pois. Lu-don ojensi


uhriveitsen Obergatzille. "Minä olen voimallinen jumala", huusi
saksalainen; "näin lankee jumalallinen viha kaikkien vihollisteni
päälle!" Hän silmäsi aurinkoa ja kohotti veitsen korkealle päänsä yli.

"Näin kuolevat jumalan herjaajat!" hän kiljaisi. Ja samassa kajahti


äänettömän, hiiskumattoman väkijoukon yli lyhyt räiskähtävä sävel.
Samassa viuhahti viheltävä ääni, ja Jad-ben-Otho lysähti aikomansa
uhrin yli. Taas sama pelottava ääni, Lu-don kaatui. Jälleen kuului
räiskähdys, hervottomana Mo-sar tuupertui tantereelle. Ja nyt
kääntyivät soturit ja kansa — tämän uuden tuntemattoman äänen
suuntaa etsien — pihan länsipäätä kohti.

Temppelin ympärysmuurin harjalla he näkivät kaksi olentoa — ho-


donilaisen soturin ja hänen vieressään melkein alastoman olennon,
joka ilmeisesti kuului Tarzan-jad-gurun rotuun. Hänen hartioillaan ja
lanteillaan oli kummallisia leveitä, kauneilla keskipäivän auringossa
välkkyvillä taajaan rivitetyillä lieriöillä koristettuja vöitä, ja hänen
käsissään kiiltävä, puusta ja metallista tehty esine, jonka päästä
nousi siniharmaa savukiemura.

Sitten kajahti ho-donilaissoturin ääni kirkkaana mykän


kansanjoukon korviin. "Näin puhuu oikea Jad-ben-Otho tämän
kuolonairuensa välityksellä!" huusi hän. "Katkaiskaa vankien siteet.
Katkaiskaa siteet Dor-ul-Otholta ja Ja-donilta, Pal-ul-donin
kuninkaalta, ja siltä naiselta, joka on jumalan pojan puoliso."
Kiihkomielisyyden raivon täyttämä Pan-sat näki tähän asti
palvelemansa järjestelmän voiman ja kunnian murtuneen ja
hävinneen. Yhtä ja ainoastaan yhtä hän syytti onnettomuudesta,
joka nyt oli hänet yllättänyt. Uhrialttarilla viruva olento oli tuottanut
Lu-donille kuoleman ja tehnyt tyhjiksi alipapin aivoissa heränneet ja
päivä päivältä kehittyneet vallanhaaveet.

Uhriveitsi oli pudonnut alttarille Obergatzin hervonneista sormista.


Pan-sat hiipi lähemmäksi, ja sitten hän yhtäkkiä syöksähti eteenpäin
tarttuakseen veitsen kahvaan. Mutta juuri kun hänen sormensa
puristuivat sen ympärille, räiskäytti temppelipihan muurilla seisovan
kummallisen olennon käsittelemä outo kapine murskaavan
tuomionsanan, ja alipappi Pan-sat horjahti kiljahtaen mestarinsa
ruumiin päälle. "Vangitkaa papit", huusi Ta-den sotureille, "älköönkä
kukaan empikö, jottei Jad-ben-Othon airut lähetä vielä toisia
ukkosenvaajoja."

Soturit ja kansa olivat nyt nähneet sellaisen todistuksen


jumalallisesta voimasta, että se olisi saanut vähemmänkin
taikauskoiset ja valistuneemmat ihmiset vakuutetuiksi; ja kun monet
heistä olivat vielä vast'ikään horjuneet Lu-donin, Jad-ben-Othon ja
Ja-donin Dor-ul-Othon välillä, ei heidän ollut vaikea nopeasti
keikahtaa takaisin jälkimmäisen puolelle, varsinkin sen
eittämättömän todisteen lumoissa, joka oli käsissään suuren jumalan
airueella, kuten Ta-den oli häntä nimittänyt.

Ja niin riensivät sotilaat reippaasti esille, saartaen papit; ja


vilkaistessaan sitten temppelipihan läntiselle muurille he näkivät
suuren sotilasjoukon parveilevan sen yli. Ja heitä hämmästytti ja
säikähdytti erityisesti se huomio, että monet näistä olivat mustia ja
karvaisia waz-doneja.
Etunenässä saapui välkkyväaseinen muukalainen, oikealla
puolellaan ho-donilainen Ta-den ja vasemmallaan Om-at, Kor-ul-jan
musta gund.

Muuan alttarin lähellä seissyt soturi oli tarttunut uhriveitseen ja


sillä katkaissut Tarzanin, Ja-donin ja Jane Claytonin siteet, ja nyt
seisoivat kaikki kolme vieretysten alttarin ääressä. Kun tulokkaat
tunkeutuivat temppelin länsipäästä väkijoukon läpi heitä kohti,
laajenivat Janen silmät kummastuksesta ja toivosta, vaikka hänen oli
vaikea uskoa silmiään. Ja heilauttaen aseen nahkahihnassa
selkäänsä syöksyi muukalainen eteenpäin ja otti hänet syliinsä.

"Jack!" huudahti Jane, nyyhkyttäen hänen olkaansa vasten. "Jack,


poikani!"

Ja sitten tuli Apinain Tarzan, kietoen käsivartensa heidän


molempain ympäri; ja Pal-ul-donin soturit ja kansa polvistuivat
temppelipihassa, koskettaen otsallaan maata alttarin juurella, missä
nuo kolme seisoivat.
VIIDESKOLMATTA LUKU

Kotia kohti

Oli tuskin kulunut tuntia Lu-donin ja Mo-sarin kukistumisesta, kun


Pal-ul-donin päälliköt ja arvokkaimmat soturit keräytyivät A-lurin
palatsin suureen valtaistuinsaliin korkean pyramiidin askelmille,
asettivat Ja-donin sen laelle ja julistivat hänet kuninkaaksi. Vanhan
päällikön toisella puolella seisoi Apinain Tarzan ja toisella Korak,
Tappaja, mahtavan apinamiehen kunnokas poika.

Kun lyhyt juhlallisuus oli ohi ja sotilaat kohotetuin nuijin vannoneet


uskollisuutta uudelle hallitsijalleen, lähetti Ja-don luotettavan joukon
noutamaan O-lo-aa, Pan-sat-lia ja oman huonekuntansa naisia Ja-
lurista.

Ja sitten soturit pohtivat Pal-ul-donin tulevaisuutta. Tuli kysymys


temppelin johdosta ja pappien kohtalosta, jotka jokseenkin
poikkeuksetta olivat olleet uskottomia kuninkaan hallitukselle, aina
koettaen vahvistaa omaa valtaansa ja huolehtia omasta
mukavuudestaan ja vaurastumisestaan. Silloin kääntyi Ja-don
Tarzanin puoleen. "Julistakoon Dor-ul-Otho kansalleen isänsä
toivomukset", sanoi hän.
"Asia on hyvin yksinkertainen", vastasi apinamies, "kunhan vain
haluatte tehdä, mikä on Jumalan silmissä otollista. Pappinne ovat
valtaansa lisätäkseen opettaneet teille, että Jad-ben-Otho on julma
jumala, että hänen silmiään viehättää veri ja kärsimykset. Mutta
papiston perinpohjainen tappio on osoittanut teille, että sellaiset opit
ovat vääriä.

"— Ottakaa siis temppelit miesten hoivasta ja antakaa ne


sensijaan naisille, jotta niissä hallittaisiin lempeydellä ja
ihmisrakkaudella. Huuhdelkaa veri itäisestä alttaristanne ja kuivatkaa
iäksi läntinen vesiallas.

"— Kerran annoin Lu-donille tilaisuuden tähän, mutta hän ei


totellut käskyjäni, ja taaskin ovat uhrikopit täytetyt onnettomilla.
Päästäkää ne vapaiksi kaikista Pal-ul-donin temppeleistä., Uhratkaa
sellaisia lahjoja, jotka ovat kansallenne mieluisia, ja laskekaa ne
jumalanne alttarille. Siellä hän ne siunaa, ja Jad-ben-Othon
papittaret jakelevat ne niille, jotka niitä enimmin tarvitsevat."

Kun hän lakkasi puhumasta, kuului väkijoukosta ilmeisen


hyväksymisen sorinaa. Jo kauan sitten olivat asukkaat kyllästyneet
pappien ahneuteen ja julmuuteen, ja nyt, kun valtuutus saapui
korkeuksista ja tarjosi käytännöllisen keinon vapautua vanhasta
uskonnollisesta järjestelmästä, silti vaatimatta mitään muutosta
kansan vakaumukseen, tervehtivät he sitä ilomielin.

"Entä papit?" kysyi eräs. "Me surmaamme heidät omalla


alttarillaan, jos
Dor-ul-Otho suvaitsee niin käskeä."

"Ei", sanoi Tarzan. "Älkää vuodattako enempää verta. Antakaa


heille vapautensa ja oikeus valita itselleen joku sopiva toimi."
Sinä iltana katettiin upea pitopöytä pal-e-don-sossa, ja ensi kertaa
vanhan Pal-ul-donin historiassa istuivat mustat soturit rauhassa ja
ystävyydessä valkoihoisten seurassa. Ja-donin ja Om-atin kesken
vahvistettiin sopimus, että hänen heimonsa ja ho-donit olisivat iäti
liittolaisia ja ystäviä.

Täällä kuuli Tarzan myöskin syyn; miksi Ta-den ei ollut hyökännyt


määräaikana. Ja-donilta oli lähetti tuonut määräyksen siirtää
hyökkäyksen puolipäivään. Vasta miltei liian myöhään olivat he
saaneet selville, että hän olikin Lu-donin valepukuinen pappi. Sitten
he olivat hänet surmanneet, kiivenneet muureille ja rynnänneet
temppelin sisäpihaan aivan viimeisessä silmänräpäyksessä.

Seuraavana päivänä saapuivat O-lo-a, Pan-at-li ja Ja-donin


huonekunnan naiset A-lurin palatsiin, jonka suuressa
valtaistuinsalissa O-lo-a naitettiin Ta-denille ja Pan-at-li Om-atille.

Viikon viipyivät Tarzan, Jane ja Korak Ja-donin vieraina, samoin


kuin Om-at mustine sotureineen. Ja sitten apinamies ilmoitti
lähtevänsä Pal-ul-donista. Hämärät olivat heidän isäntäinsä
käsitykset siitä, missä taivas sijaitsi, kuten keinoistakin, joilla jumalat
matkustaisivat taivaallisten kotiensa ja ihmisten asumusten väliä,
eikä siis tehty mitään kysymyksiä, kun saatiin kuulla, että Dor-ul-
Otho puolisonsa ja poikansa kanssa vaeltaisi maitse vuorten yli Pal-
ul-donista pohjoiseen päin.

He samosivat Kor-ul-jan kautta sen heimon soturien ja Ta-denin


johtaman suuren ho-donilaisen sotaväenosaston saattamana. Joukko
kansaa seurasi heitä A-lurin ulkopuolelle, ja kun he olivat sanoneet
hyvästi ja Tarzan rukoillut heille Jumalan siunausta, näkivät nuo
kolme eurooppalaista yksinkertaisten, uskollisten ystäviensä
lankeavan maahan heidän jälkeensä, kunnes matkue oli ehtinyt
loitos kaupungin lähistöltä ja hävinnyt metsään.

He levähtivät päivän Kor-ul-jassa, jolloin Jane tarkasteli näiden


omituisten ihmisten vanhoja luolia, ja sitten he liikkuivat eteenpäin,
välttäen Pastar-ul-vedin ryhmyistä hartiaa ja kaartaen vastapäistä
rinnettä pitkin suurta rämettä kohden. He matkasivat mukavasti ja
turvallisesti ho-donilais- ja waz-donilaissaattueen ympäröiminä,

Monet miettivät epäilemättä kysymystä, kuinka nämä kolme


pääsisivät suuren rämeen poikki, mutta kaikkein vähimmin se asia
vaivasi Tarzania. Hän oli elämässään kohdannut monia esteitä vain
havaitakseen, että lujalla tahdolla saattoi niistä aina selviytyä. Hänen
mielessään väikkyi helppo ratkaisu, mutta se oli kokonaan
sattumasta riippuvainen.

Oli viimeisen päivän aamu, kun heidän purkaessaan leiriään kohosi


kumea mylvähdys läheisestä lehdosta. Apinamies hymyili. Sattuma
oli tullut. Arvolleen sopivalla tavalla lähtisi siis Dor-ul-Otho puolisonsa
ja poikansa kanssa kartoittamattomasta Pal-ul-donista.

Hän kantoi yhä kädessään keihästä, jonka Jane oli tehnyt ja jota
hän juuri siksi oli pitänyt niin suuressa arvossa, että oli vapaaksi
päästyään etsittänyt sitä kautta A-lurin temppelin. Se olikin löydetty
ja tuotu hänelle.

Mylvähdyksen kuullessaan ho-donilaiset soturit, joista oli osa


seurannut Tarzanin mukana Ja-donin leiristä Ja-luriin, katsahtivat
kysyvästi apinamieheen, kun taas Om-atin waz-donit etsivät puita;
sillä gryf oli Pal-ul-donissa ainoa eläin, jota ei suuren
sotilasjoukonkaan ollut hyvä kohdata. Sen sitkeätä, panssaroitua
nahkaa eivät heidän heittopuukkonsa voineet lävistää, ja nuijat
poukkosivat siitä tehottomina kuin Pastar-ul-vedin kalliohartiasta.

"Odottakaa", sanoi apinamies ja astui keihäs kädessä gryfiä kohti,


hihkaisten tor-o-donien kaamean huudon. Mylvinä taukosi, muuttuen
matalaksi mörinäksi, ja pian tuli jättiläiselukka näkyviin. Nyt seurasi
vain toisintaa apinamiehen aikaisemmasta kokemuksesta näiden
isojen ja hurjien eläinten parissa.

Niin ratsastivat Jane, Korak ja Tarzan Pal-ul-donia reunustavan


rämeen yli esihistoriallisen triceratopsin selässä, suon pienempien
matelijain paetessa kauhusta sihisten. Vastapäisellä rannalla he
kääntyivät huutamaan hyvästinsä Ta-denille, Om-atille ja niille uljaille
sotureille, joita olivat oppineet ihailemaan ja kunnioittamaan. Ja
sitten Tarzan kannusti jättiläisratsuaan eteenpäin pohjoista kohti,
jättäen sen vasta kun oli varma, että waz-donit ja ho-donit olivat
ehtineet jokseenkin hyvään turvaan etuvuorten rosoisiin rotkoihin.

Käännettyään eläimen pään jälleen Pal-ul-donia kohti laskeutuivat


nuo kolme maahan, ja navakka läimäys sen paksuun nahkaan lähetti
sen majesteetillisesti löntystämään takaisin syntymäseutuaan kohti.
Hetkiseksi he pysähtyivät katselemaan maata, josta olivat juuri
poistuneet — tor-o-donien ja gryfien, jan ja jaton, waz-donien ja ho-
donien maata, alkuperäistä tienoota, kauhun ja äkkikuoleman,
rauhan ja kauneuden maata, jota he kaikin olivat joutuneet
rakastamaan.

Ja sitten he vielä kerran kääntyivät pohjoiseen ja lähtivät kevein ja


uljain sydämin pitkälle matkalleen maiden parasta — kotiseutua —
kohti.
*** END OF THE PROJECT GUTENBERG EBOOK KAUHEA TARZAN:
SEIKKAILUROMAANI AFRIKAN AARNIOMETSISTÄ ***

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,

You might also like