100% found this document useful (3 votes)
11 views

JavaScript for impatient programmers 1st Edition by Axel Rauschmayer ISBN 1091210098 9781091210097pdf download

The document provides information about the book 'JavaScript for Impatient Programmers' by Axel Rauschmayer, including its content structure, key topics covered, and supplementary materials. It also lists various other programming-related books with their respective authors and ISBNs. The document serves as a resource for accessing and downloading these educational texts in multiple formats.

Uploaded by

kennietizie
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 (3 votes)
11 views

JavaScript for impatient programmers 1st Edition by Axel Rauschmayer ISBN 1091210098 9781091210097pdf download

The document provides information about the book 'JavaScript for Impatient Programmers' by Axel Rauschmayer, including its content structure, key topics covered, and supplementary materials. It also lists various other programming-related books with their respective authors and ISBNs. The document serves as a resource for accessing and downloading these educational texts in multiple formats.

Uploaded by

kennietizie
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/ 81

JavaScript for impatient programmers 1st Edition

by Axel Rauschmayer ISBN 1091210098


9781091210097 download

https://ebookball.com/product/javascript-for-impatient-
programmers-1st-edition-by-axel-rauschmayer-
isbn-1091210098-9781091210097-20226/

Instantly Access and Download Textbook at https://ebookball.com


Get Your Digital Files Instantly: PDF, ePub, MOBI and More
Quick Digital Downloads: PDF, ePub, MOBI and Other Formats

Java SE 8 for the Really Impatient 1st Edition by Cay S Horstmann ISBN
0321927761 978-0321927767

https://ebookball.com/product/java-se-8-for-the-really-
impatient-1st-edition-by-cay-s-horstmann-
isbn-0321927761-978-0321927767-12112/

Visual Studio Code for Python Programmers 1st Edition by April Speight
1119773369 9781119773368

https://ebookball.com/product/visual-studio-code-for-python-
programmers-1st-edition-by-april-
speight-1119773369-9781119773368-18520/

TORMCA Tool for Regular Model Checking 1st edition by Axel Legay ISBN
3540705437 9783540705437

https://ebookball.com/product/tormca-tool-for-regular-model-
checking-1st-edition-by-axel-legay-
isbn-3540705437-9783540705437-13428/

JavaScript and Ajax for Dummies 1st Edition by Andy Harris ISBN
0470417994 9780470417997

https://ebookball.com/product/javascript-and-ajax-for-
dummies-1st-edition-by-andy-harris-
isbn-0470417994-9780470417997-13728/
Professional JavaScript for Web Developers 1st Edition by Nicholas C
Zakas ISBN 1118026691 9781118026694

https://ebookball.com/product/professional-javascript-for-web-
developers-1st-edition-by-nicholas-c-zakas-
isbn-1118026691-9781118026694-16162/

(Ebook PDF) Shaders for Game Programmers & Artists 1st edition by
Sebastien St Laurent ‎1592000924 978-1592000920

https://ebookball.com/product/ebook-pdf-shaders-for-game-
programmers-artists-1st-edition-by-sebastien-st-laurent-
aeurz1592000924-978-1592000920-22716/

Intel Galileo and Intel Galileo Gen 2 API Features and Arduino
Projects for Linux Programmers 1st edition by Manoel Ramon ISBN
1430268395 978-1430268390

https://ebookball.com/product/intel-galileo-and-intel-galileo-
gen-2-api-features-and-arduino-projects-for-linux-
programmers-1st-edition-by-manoel-ramon-
isbn-1430268395-978-1430268390-20336/

An Approach for Model Based Risk Assessment 1st Edition by Bjorn Axel
Gran, Rune Fredriksen, Atoosa PJ Thunem ISBN 9783540301387

https://ebookball.com/product/an-approach-for-model-based-risk-
assessment-1st-edition-by-bjorn-axel-gran-rune-fredriksen-atoosa-
pj-thunem-isbn-9783540301387-12986/

JavaScript Mini FAQ 1st Edition by Danny Goodman ISBN

https://ebookball.com/product/javascript-mini-faq-1st-edition-by-
danny-goodman-isbn-11420/
JavaScript for impatient
programmers
Dr. Axel Rauschmayer

2019
JavaScript for impatient
programmers
JavaScript for impatient programmers
1 About this book (ES2019 edition)
1.1 About the content
1.2 Previewing and buying this book
1.3 About the author
1.4 Acknowledgements
2 FAQ: Book and supplementary material
2.1 How to read this book
2.2 I own a digital edition
2.3 I own the print edition
2.4 Notations and conventions

3 Why JavaScript? (bonus)


3.1 The cons of JavaScript
3.2 The pros of JavaScript
3.3 Pro and con of JavaScript: innovation

4 The nature of JavaScript (bonus)


4.1 JavaScript’s influences
4.2 The nature of JavaScript
4.3 Tips for getting started with JavaScript

5 History and evolution of JavaScript


5.1 How JavaScript was created
5.2 Standardizing JavaScript
5.3 Timeline of ECMAScript versions
5.4 Ecma Technical Committee 39 (TC39)
5.5 The TC39 process
5.6 FAQ: TC39 process
5.7 Evolving JavaScript: Don’t break the web

6 FAQ: JavaScript
6.1 What are good references for JavaScript?
6.2 How do I find out what JavaScript features are supported
where?
6.3 Where can I look up what features are planned for
JavaScript?
6.4 Why does JavaScript fail silently so often?
6.5 Why can’t we clean up JavaScript, by removing quirks and
outdated features?
6.6 How can I quickly try out a piece of JavaScript code?
7 The big picture
7.1 What are you learning in this book?
7.2 The structure of browsers and Node.js
7.3 JavaScript references
7.4 Further reading

8 Syntax
8.1 An overview of JavaScript’s syntax
8.2 (Advanced)
8.3 Identifiers
8.4 Statement vs. expression
8.5 Ambiguous syntax
8.6 Semicolons
8.7 Automatic semicolon insertion (ASI)
8.8 Semicolons: best practices
8.9 Strict mode vs. sloppy mode

9 Consoles: interactive JavaScript command lines


9.1 Trying out JavaScript code
9.2 The console.* API: printing data and more

10 Assertion API
10.1 Assertions in software development
10.2 How assertions are used in this book
10.3 Normal comparison vs. deep comparison
10.4 Quick reference: module assert

11 Getting started with quizzes and exercises


11.1 Quizzes
11.2 Exercises
11.3 Unit tests in JavaScript

12 Variables and assignment


12.1 let
12.2 const
12.3 Deciding between const and let
12.4 The scope of a variable
12.5 (Advanced)
12.6 Terminology: static vs. dynamic
12.7 Global variables and the global object
12.8 Declarations: scope and activation
12.9 Closures
12.10 Further reading

13 Values
13.1 What’s a type?
13.2 JavaScript’s type hierarchy
13.3 The types of the language specification
13.4 Primitive values vs. objects
13.5 The operators typeof and instanceof: what’s the type of a
value?
13.6 Classes and constructor functions
13.7 Converting between types

14 Operators
14.1 Making sense of operators
14.2 The plus operator (+)
14.3 Assignment operators
14.4 Equality: == vs. ===
14.5 Ordering operators
14.6 Various other operators

15 The non-values undefined and null


15.1 undefined vs. null
15.2 Occurrences of undefined and null
15.3 Checking for undefined or null
15.4 undefined and null don’t have properties
15.5 The history of undefined and null

16 Booleans
16.1 Converting to boolean
16.2 Falsy and truthy values
16.3 Truthiness-based existence checks
16.4 Conditional operator (? :)
16.5 Binary logical operators: And (x && y), Or (x || y)
16.6 Logical Not (!)

17 Numbers
17.1 JavaScript only has floating point numbers
17.2 Number literals
17.3 Arithmetic operators
17.4 Converting to number
17.5 Error values
17.6 Error value: NaN
17.7 Error value: Infinity
17.8 The precision of numbers: careful with decimal fractions
17.9 (Advanced)
17.10 Background: floating point precision
17.11 Integers in JavaScript
17.12 Bitwise operators
17.13 Quick reference: numbers
18 Math
18.1 Data properties
18.2 Exponents, roots, logarithms
18.3 Rounding
18.4 Trigonometric Functions
18.5 Various other functions
18.6 Sources

19 Unicode – a brief introduction (advanced)


19.1 Code points vs. code units
19.2 Encodings used in web development: UTF-16 and UTF-8
19.3 Grapheme clusters – the real characters

20 Strings
20.1 Plain string literals
20.2 Accessing characters and code points
20.3 String concatenation via +
20.4 Converting to string
20.5 Comparing strings
20.6 Atoms of text: Unicode characters, JavaScript characters,
grapheme clusters
20.7 Quick reference: Strings

21 Using template literals and tagged templates


21.1 Disambiguation: “template”
21.2 Template literals
21.3 Tagged templates
21.4 Raw string literals
21.5 (Advanced)
21.6 Multiline template literals and indentation
21.7 Simple templating via template literals

22 Symbols
22.1 Use cases for symbols
22.2 Publicly known symbols
22.3 Converting symbols

23 Control flow statements


23.1 Conditions of control flow statements
23.2 Controlling loops: break and continue
23.3 if statements
23.4 switch statements
23.5 while loops
23.6 do-while loops
23.7 for loops
23.8 for-of loops
23.9 for-await-of loops
23.10 for-in loops (avoid)

24 Exception handling
24.1 Motivation: throwing and catching exceptions
24.2 throw
24.3 The try statement
24.4 Error classes

25 Callable values
25.1 Kinds of functions
25.2 Ordinary functions
25.3 Specialized functions
25.4 More kinds of functions and methods
25.5 Returning values from functions and methods
25.6 Parameter handling
25.7 Dynamically evaluating code: eval(), new Function()
(advanced)
26 Environments: under the hood of variables (bonus)
26.1 Environment: data structure for managing variables
26.2 Recursion via environments
26.3 Nested scopes via environments
26.4 Closures and environments
27 Modules
27.1 Overview: syntax of ECMAScript modules
27.2 JavaScript source code formats
27.3 Before we had modules, we had scripts
27.4 Module systems created prior to ES6
27.5 ECMAScript modules
27.6 Named exports and imports
27.7 Default exports and imports
27.8 More details on exporting and importing
27.9 npm packages
27.10 Naming modules
27.11 Module specifiers
27.12 Loading modules dynamically via import()
27.13 Preview: import.meta.url
27.14 Polyfills: emulating native web platform features
(advanced)
28 Single objects
28.1 What is an object?
28.2 Objects as records
28.3 Spreading into object literals (...)
28.4 Methods
28.5 Objects as dictionaries (advanced)
28.6 Standard methods (advanced)
28.7 Advanced topics

29 Prototype chains and classes


29.1 Prototype chains
29.2 Classes
29.3 Private data for classes
29.4 Subclassing
29.5 FAQ: objects
30 Synchronous iteration
30.1 What is synchronous iteration about?
30.2 Core iteration constructs: iterables and iterators
30.3 Iterating manually
30.4 Iteration in practice
30.5 Quick reference: synchronous iteration
31 Arrays (Array)
31.1 The two roles of Arrays in JavaScript
31.2 Basic Array operations
31.3 for-of and Arrays
31.4 Array-like objects
31.5 Converting iterable and Array-like values to Arrays
31.6 Creating and filling Arrays with arbitrary lengths
31.7 Multidimensional Arrays
31.8 More Array features (advanced)
31.9 Adding and removing elements (destructively and non-
destructively)
31.10 Methods: iteration and transformation (.find(), .map(),
.filter(), etc.)
31.11 .sort(): sorting Arrays
31.12 Quick reference: Array<T>

32 Typed Arrays: handling binary data (Advanced)


32.1 The basics of the API
32.2 Element types
32.3 More information on Typed Arrays
32.4 Quick references: indices vs. offsets
32.5 Quick reference: ArrayBuffers
32.6 Quick reference: Typed Arrays
32.7 Quick reference: DataViews
33 Maps (Map)
33.1 Using Maps
33.2 Example: Counting characters
33.3 A few more details about the keys of Maps (advanced)
33.4 Missing Map operations
33.5 Quick reference: Map<K,V>
33.6 FAQ: Maps
34 WeakMaps (WeakMap)
34.1 WeakMaps are black boxes
34.2 The keys of a WeakMap are weakly held
34.3 Examples
34.4 WeakMap API
35 Sets (Set)
35.1 Using Sets
35.2 Examples of using Sets
35.3 What Set elements are considered equal?
35.4 Missing Set operations
35.5 Quick reference: Set<T>
35.6 FAQ: Sets

36 WeakSets (WeakSet)
36.1 Example: Marking objects as safe to use with a method
36.2 WeakSet API
37 Destructuring
37.1 A first taste of destructuring
37.2 Constructing vs. extracting
37.3 Where can we destructure?
37.4 Object-destructuring
37.5 Array-destructuring
37.6 Examples of destructuring
37.7 What happens if a pattern part does not match anything?
37.8 What values can’t be destructured?
37.9 (Advanced)
37.10 Default values
37.11 Parameter definitions are similar to destructuring
37.12 Nested destructuring

38 Synchronous generators (advanced)


38.1 What are synchronous generators?
38.2 Calling generators from generators (advanced)
38.3 Background: external iteration vs. internal iteration
38.4 Use case for generators: reusing traversals
38.5 Advanced features of generators
39 Asynchronous programming in JavaScript
39.1 A roadmap for asynchronous programming in JavaScript
39.2 The call stack
39.3 The event loop
39.4 How to avoid blocking the JavaScript process
39.5 Patterns for delivering asynchronous results
39.6 Asynchronous code: the downsides
39.7 Resources

40 Promises for asynchronous programming


40.1 The basics of using Promises
40.2 Examples
40.3 Error handling: don’t mix rejections and exceptions
40.4 Promise-based functions start synchronously, settle
asynchronously
40.5 Promise.all(): concurrency and Arrays of Promises
40.6 Tips for chaining Promises
40.7 Advanced topics
41 Async functions
41.1 Async functions: the basics
41.2 Returning from async functions
41.3 await: working with Promises
41.4 (Advanced)
41.5 Immediately invoked async arrow functions
41.6 Concurrency and await
41.7 Tips for using async functions

42 Asynchronous iteration
42.1 Basic asynchronous iteration
42.2 Asynchronous generators
42.3 Async iteration over Node.js streams

43 Regular expressions (RegExp)


43.1 Creating regular expressions
43.2 Syntax
43.3 Flags
43.4 Properties of regular expression objects
43.5 Methods for working with regular expressions
43.6 Flag /g and its pitfalls
43.7 Techniques for working with regular expressions
44 Dates (Date)
44.1 Best practice: avoid the built-in Date
44.2 Time standards
44.3 Background: date time formats (ISO)
44.4 Time values
44.5 Creating Dates
44.6 Getters and setters
44.7 Converting Dates to strings
45 Creating and parsing JSON (JSON)
45.1 The discovery and standardization of JSON
45.2 JSON syntax
45.3 Using the JSON API
45.4 Customizing stringification and parsing (advanced)
45.5 FAQ
46 Next steps: overview of web development (bonus)
46.1 Tips against feeling overwhelmed
46.2 Things worth learning for web development
46.3 Example: tool-based JavaScript workflow
46.4 An overview of JavaScript tools
46.5 Tools not related to JavaScript

47 Index
JavaScript for impatient
programmers
1 About this book (ES2019
edition)

1.1 About the content


1.1.1 What’s in this book?
1.1.2 What is not covered by this book?
1.1.3 Isn’t this book too long for impatient people?
1.2 Previewing and buying this book
1.2.1 How can I preview the book, the exercises, and the
quizzes?
1.2.2 How can I buy a digital edition of this book?
1.2.3 How can I buy the print edition of this book?
1.3 About the author
1.4 Acknowledgements
1.1 About the content
1.1.1 What’s in this book?

This book makes JavaScript less challenging to learn for newcomers


by offering a modern view that is as consistent as possible.

Highlights:

Get started quickly by initially focusing on modern features.


Test-driven exercises and quizzes available for most chapters.
Covers all essential features of JavaScript, up to and including
ES2019.
Optional advanced sections let you dig deeper.

No prior knowledge of JavaScript is required, but you should know


how to program.

1.1.2 What is not covered by this book?

Some advanced language features are not explained, but


references to appropriate material are provided – for example,
to my other JavaScript books at ExploringJS.com, which are free
to read online.
This book deliberately focuses on the language. Browser-only
features, etc. are not described.
1.1.3 Isn’t this book too long for
impatient people?

There are several ways in which you can read this book. One of them
involves skipping much of the content in order to get started quickly.
For details, see §2.1.1 “In which order should I read the content in
this book?”.
1.2 Previewing and buying this
book
1.2.1 How can I preview the book, the
exercises, and the quizzes?

Go to the homepage of this book:

All essential chapters of this book can be read online.


The first half of the test-driven exercises can be downloaded.
The first half of the quizzes can be tried online.

1.2.2 How can I buy a digital edition of


this book?

There are two digital editions of JavaScript for impatient


programmers:

Ebooks: PDF, EPUB, MOBI, HTML (all without DRM)


Ebooks plus exercises and quizzes

The home page of this book describes how you can buy them.

1.2.3 How can I buy the print edition of


this book?

The print edition of JavaScript for impatient programmers is


available on Amazon.
1.3 About the author
Dr. Axel Rauschmayer specializes in JavaScript and web
development. He has been developing web applications since 1995.
In 1999, he was technical manager at a German internet startup that
later expanded internationally. In 2006, he held his first talk on
Ajax. In 2010, he received a PhD in Informatics from the University
of Munich.

Since 2011, he has been blogging about web development at


2ality.com and has written several books on JavaScript. He has held
trainings and talks for companies such as eBay, Bank of America,
and O’Reilly Media.

He lives in Munich, Germany.


1.4 Acknowledgements
Cover by Fran Caye
Parts of this book were edited by Adaobi Obi Tulton.
Thanks for answering questions, discussing language topics,
etc.:
Allen Wirfs-Brock (@awbjs)
Benedikt Meurer (@bmeurer)
Brian Terlson (@bterlson)
Daniel Ehrenberg (@littledan)
Jordan Harband (@ljharb)
Mathias Bynens (@mathias)
Myles Borins (@MylesBorins)
Rob Palmer (@robpalmer2)
Šime Vidas (@simevidas)
And many others
Thanks for reviewing:
Johannes Weber (@jowe)

[Generated: 2019-08-31 17:39]


2 FAQ: Book and
supplementary material

2.1 How to read this book


2.1.1 In which order should I read the content in this book?
2.1.2 Why are some chapters and sections marked with
“(advanced)”?
2.1.3 Why are some chapters marked with “(bonus)”?
2.2 I own a digital edition
2.2.1 How do I submit feedback and corrections?
2.2.2 How do I get updates for the downloads I bought at
Payhip?
2.2.3 Can I upgrade from package “Ebooks” to package
“Ebooks + exercises + quizzes”?
2.3 I own the print edition
2.3.1 Can I get a discount for a digital edition?
2.3.2 Can I submit an error or see submitted errors?
2.3.3 Is there an online list with the URLs in this book?
2.4 Notations and conventions
2.4.1 What is a type signature? Why am I seeing static types
in this book?
2.4.2 What do the notes with icons mean?

This chapter answers questions you may have and gives tips for
reading this book.
2.1 How to read this book
2.1.1 In which order should I read the
content in this book?

This book is three books in one:

You can use it to get started with JavaScript as quickly as


possible. This “mode” is for impatient people:
Start reading with §7 “The big picture”.
Skip all chapters and sections marked as “advanced”, and
all quick references.
It gives you a comprehensive look at current JavaScript. In this
“mode”, you read everything and don’t skip advanced content
and quick references.
It serves as a reference. If there is a topic that you are interested
in, you can find information on it via the table of contents or via
the index. Due to basic and advanced content being mixed,
everything you need is usually in a single location.

The quizzes and exercises play an important part in helping you


practice and retain what you have learned.

2.1.2 Why are some chapters and


sections marked with “(advanced)”?

Several chapters and sections are marked with “(advanced)”. The


idea is that you can initially skip them. That is, you can get a quick
working knowledge of JavaScript by only reading the basic (non-
advanced) content.

As your knowledge evolves, you can later come back to some or all of
the advanced content.

2.1.3 Why are some chapters marked


with “(bonus)”?

The bonus chapters are only available in the paid versions of this
book (print and ebook). They are listed in the full table of contents.
2.2 I own a digital edition
2.2.1 How do I submit feedback and
corrections?

The HTML version of this book (online, or ad-free archive in the paid
version) has a link at the end of each chapter that enables you to give
feedback.

2.2.2 How do I get updates for the


downloads I bought at Payhip?

The receipt email for the purchase includes a link. You’ll always
be able to download the latest version of the files at that
location.

If you opted into emails while buying, you’ll get an email


whenever there is new content. To opt in later, you must contact
Payhip (see bottom of payhip.com).

2.2.3 Can I upgrade from package


“Ebooks” to package “Ebooks + exercises
+ quizzes”?

Yes. The instructions for doing so are on the homepage of this book.
2.3 I own the print edition
2.3.1 Can I get a discount for a digital
edition?

If you bought the print edition, you can get a discount for a digital
edition. The homepage of the print edition explains how.

Alas, the reverse is not possible: you cannot get a discount for the
print edition if you bought a digital edition.

2.3.2 Can I submit an error or see


submitted errors?

On the homepage of the print edition, you can submit errors and see
submitted errors.

2.3.3 Is there an online list with the URLs


in this book?

The homepage of the print edition has a list with all the URLs that
you see in the footnotes of the print edition.
2.4 Notations and conventions
2.4.1 What is a type signature? Why am I
seeing static types in this book?

For example, you may see:

Number.isFinite(num: number): boolean

That is called the type signature of Number.isFinite(). This notation,


especially the static types number of num and boolean of the result, are
not real JavaScript. The notation is borrowed from the compile-to-
JavaScript language TypeScript (which is mostly just JavaScript plus
static typing).

Why is this notation being used? It helps give you a quick idea of how
a function works. The notation is explained in detail in a 2ality blog
post, but is usually relatively intuitive.

2.4.2 What do the notes with icons


mean?

Reading instructions

Explains how to best read the content.

External content

Points to additional, external, content.


Tip

Gives a tip related to the current content.

Question

Asks and answers a question pertinent to the current content


(think FAQ).

Warning

Warns about pitfalls, etc.

Details

Provides additional details, complementing the current content. It


is similar to a footnote.

Exercise

Mentions the path of a test-driven exercise that you can do at that


point.

Quiz

Indicates that there is a quiz for the current (part of a) chapter.


3 Why JavaScript? (bonus)

3.1 The cons of JavaScript


3.2 The pros of JavaScript
3.2.1 Community
3.2.2 Practically useful
3.2.3 Language
3.3 Pro and con of JavaScript: innovation

In this chapter, we examine the pros and cons of JavaScript.

“ECMAScript 6” and “ES6” refer to versions of


JavaScript

ECMAScript is the name of the language standard; the number


refers to the version of that standard. For more information,
consult §5.2 “Standardizing JavaScript”.
3.1 The cons of JavaScript
Among programmers, JavaScript isn’t always well liked. One reason
is that it has a fair amount of quirks. Some of them are just unusual
ways of doing something. Others are considered bugs. Either way,
learning why JavaScript does something the way it does, helps with
dealing with the quirks and with accepting JavaScript (maybe even
liking it). Hopefully, this book can be of assistance here.

Additionally, many traditional quirks have been eliminated now. For


example:

Traditionally, JavaScript variables weren’t block-scoped. ES6


introduced let and const, which let you declare block-scoped
variables.
Prior to ES6, implementing object factories and inheritance via
function and .prototype was clumsy. ES6 introduced classes,
which provide more convenient syntax for these mechanisms.
Traditionally, JavaScript did not have built-in modules. ES6
added them to the language.

Lastly, JavaScript’s standard library is limited, but:

There are plans for adding more functionality.


Many libraries are easily available via the npm software registry.
3.2 The pros of JavaScript
On the plus side, JavaScript offers many benefits.

3.2.1 Community

JavaScript’s popularity means that it’s well supported and well


documented. Whenever you create something in JavaScript, you can
rely on many people being (potentially) interested. And there is a
large pool of JavaScript programmers from which you can hire, if
you need to.

No single party controls JavaScript – it is evolved by TC39, a


committee comprising many organizations. The language is evolved
via an open process that encourages feedback from the public.

3.2.2 Practically useful

With JavaScript, you can write apps for many client platforms. These
are a few example technologies:

Progressive Web Apps can be installed natively on Android and


many desktop operating systems.
Electron lets you build cross-platform desktop apps.
React Native lets you write apps for iOS and Android that have
native user interfaces.
Node.js provides extensive support for writing shell scripts (in
addition to being a platform for web servers).
JavaScript is supported by many server platforms and services – for
example:

Node.js (many of the following services are based on Node.js or


support its APIs)
ZEIT Now
Microsoft Azure Functions
AWS Lambda
Google Cloud Functions

There are many data technologies available for JavaScript: many


databases support it and intermediate layers (such as GraphQL)
exist. Additionally, the standard data format JSON (JavaScript
Object Notation) is based on JavaScript and supported by its
standard library.

Lastly, many, if not most, tools for JavaScript are written in


JavaScript. That includes IDEs, build tools, and more. As a
consequence, you install them the same way you install your libraries
and you can customize them in JavaScript.

3.2.3 Language

Many libraries are available, via the de-facto standard in the


JavaScript universe, the npm software registry.
If you are unhappy with “plain” JavaScript, it is relatively easy to
add more features:
You can compile future and modern language features to
current and past versions of JavaScript, via Babel.
You can add static typing, via TypeScript and Flow.
You can work with ReasonML, which is, roughly, OCaml
with JavaScript syntax. It can be compiled to JavaScript or
native code.
The language is flexible: it is dynamic and supports both object-
oriented programming and functional programming.
JavaScript has become suprisingly fast for such a dynamic
language.
Whenever it isn’t fast enough, you can switch to
WebAssembly, a universal virtual machine built into most
JavaScript engines. It can run static code at nearly native
speeds.
3.3 Pro and con of JavaScript:
innovation
There is much innovation in the JavaScript ecosystem: new
approaches to implementing user interfaces, new ways of optimizing
the delivery of software, and more. The upside is that you will
constantly learn new things. The downside is that the constant
change can be exhausting at times. Thankfully, things have
somewhat slowed down, recently: all of ES6 (which was a
considerable modernization of the language) is becoming
established, as are certain tools and workflows.

Quiz

See quiz app.


4 The nature of JavaScript
(bonus)

4.1 JavaScript’s influences


4.2 The nature of JavaScript
4.2.1 JavaScript often fails silently
4.3 Tips for getting started with JavaScript
4.1 JavaScript’s influences
When JavaScript was created in 1995, it was influenced by several
programming languages:

JavaScript’s syntax is largely based on Java.


Self inspired JavaScript’s prototypal inheritance.
Closures and environments were borrowed from Scheme.
AWK influenced JavaScript’s functions (including the keyword
function).
JavaScript’s strings, Arrays, and regular expressions take cues
from Perl.
HyperTalk inspired event handling via onclick in web browsers.

With ECMAScript 6, new influences came to JavaScript:

Generators were borrowed from Python.


The syntax of arrow functions came from CoffeeScript.
C++ contributed the keyword const.
Destructuring was inspired by Lisp’s destructuring bind.
Template literals came from the E language (where they are
called quasi literals).
4.2 The nature of JavaScript
These are a few traits of the language:

Its syntax is part of the C family of languages (curly braces, etc.).

It is a dynamic language: most objects can be changed in various


ways at runtime, objects can be created directly, etc.

It is a dynamically typed language: variables don’t have fixed


static types and you can assign any value to a given (mutable)
variable.

It has functional programming features: first-class functions,


closures, partial application via bind(), etc.

It has object-oriented features: mutable state, objects,


inheritance, classes, etc.

It often fails silently: see the next subsection for details.

It is deployed as source code. But that source code is often


minified (rewritten to require less storage). And there are plans
for a binary source code format.

JavaScript is part of the web platform – it is the language built


into web browsers. But it is also used elsewhere – for example,
in Node.js, for server things, and shell scripting.
JavaScript engines often optimize less-efficient language
mechanisms under the hood. For example, in principle,
JavaScript Arrays are dictionaries. But under the hood, engines
store Arrays contiguously if they have contiguous indices.

4.2.1 JavaScript often fails silently

JavaScript often fails silently. Let’s look at two examples.

First example: If the operands of an operator don’t have the


appropriate types, they are converted as necessary.

> '3' * '5'


15

Second example: If an arithmetic computation fails, you get an error


value, not an exception.

> 1 / 0
Infinity

The reason for the silent failures is historical: JavaScript did not have
exceptions until ECMAScript 3. Since then, its designers have tried
to avoid silent failures.
4.3 Tips for getting started with
JavaScript
These are a few tips to help you get started with JavaScript:

Take your time to really get to know this language. The


conventional C-style syntax hides that this is a very
unconventional language. Learn especially the quirks and the
rationales behind them. Then you will understand and
appreciate the language better.
In addition to details, this book also teaches simple rules of
thumb to be safe – for example, “Always use === to
determine if two values are equal, never ==.”
Language tools make it easier to work with JavaScript. For
example:
You can statically type JavaScript via TypeScript or Flow.
You can check for problems and anti-patterns via linters
such as ESLint.
You can format your code automatically via code formatters
such as Prettier.
Get in contact with the community:
Twitter is popular among JavaScript programmers. As a
mode of communication that sits between the spoken and
the written word, it is well suited for exchanging knowledge.
Many cities have regular free meetups where people come
together to learn topics related to JavaScript.
JavaScript conferences are another convenient way of
meeting other JavaScript programmers.
Read books and blogs. Much material is free online!
5 History and evolution of
JavaScript

5.1 How JavaScript was created


5.2 Standardizing JavaScript
5.3 Timeline of ECMAScript versions
5.4 Ecma Technical Committee 39 (TC39)
5.5 The TC39 process
5.5.1 Tip: Think in individual features and stages, not
ECMAScript versions
5.6 FAQ: TC39 process
5.6.1 How is [my favorite proposed feature] doing?
5.6.2 Is there an official list of ECMAScript features?
5.7 Evolving JavaScript: Don’t break the web
5.1 How JavaScript was created
JavaScript was created in May 1995 in 10 days, by Brendan Eich.
Eich worked at Netscape and implemented JavaScript for their web
browser, Netscape Navigator.

The idea was that major interactive parts of the client-side web were
to be implemented in Java. JavaScript was supposed to be a glue
language for those parts and to also make HTML slightly more
interactive. Given its role of assisting Java, JavaScript had to look
like Java. That ruled out existing solutions such as Perl, Python, TCL,
and others.

Initially, JavaScript’s name changed several times:

Its code name was Mocha.


In the Netscape Navigator 2.0 betas (September 1995), it was
called LiveScript.
In Netscape Navigator 2.0 beta 3 (December 1995), it got its
final name, JavaScript.
5.2 Standardizing JavaScript
There are two standards for JavaScript:

ECMA-262 is hosted by Ecma International. It is the primary


standard.
ISO/IEC 16262 is hosted by the International Organization for
Standardization (ISO) and the International Electrotechnical
Commission (IEC). This is a secondary standard.

The language described by these standards is called ECMAScript, not


JavaScript. A different name was chosen because Sun (now Oracle)
had a trademark for the latter name. The “ECMA” in “ECMAScript”
comes from the organization that hosts the primary standard.

The original name of that organization was ECMA, an acronym for


European Computer Manufacturers Association. It was later
changed to Ecma International (with “Ecma” being a proper name,
not an acronym) because the organization’s activities had expanded
beyond Europe. The initial all-caps acronym explains the spelling of
ECMAScript.

In principle, JavaScript and ECMAScript mean the same thing.


Sometimes the following distinction is made:

The term JavaScript refers to the language and its


implementations.
The term ECMAScript refers to the language standard and
language versions.
Therefore, ECMAScript 6 is a version of the language (its 6th
edition).
5.3 Timeline of ECMAScript
versions
This is a brief timeline of ECMAScript versions:

ECMAScript 1 (June 1997): First version of the standard.


ECMAScript 2 (June 1998): Small update to keep ECMA-262 in
sync with the ISO standard.
ECMAScript 3 (December 1999): Adds many core features –
“[…] regular expressions, better string handling, new control
statements [do-while, switch], try/catch exception handling,
[…]”
ECMAScript 4 (abandoned in July 2008): Would have been a
massive upgrade (with static typing, modules, namespaces, and
more), but ended up being too ambitious and dividing the
language’s stewards.
ECMAScript 5 (December 2009): Brought minor improvements
– a few standard library features and strict mode.
ECMAScript 5.1 (June 2011): Another small update to keep
Ecma and ISO standards in sync.
ECMAScript 6 (June 2015): A large update that fulfilled many of
the promises of ECMAScript 4. This version is the first one
whose official name – ECMAScript 2015 – is based on the year
of publication.
ECMAScript 2016 (June 2016): First yearly release. The shorter
release life cycle resulted in fewer new features compared to the
large ES6.
ECMAScript 2017 (June 2017). Second yearly release.
Subsequent ECMAScript versions (ES2018, etc.) are always
ratified in June.
5.4 Ecma Technical Committee 39
(TC39)
TC39 is the committee that evolves JavaScript. Its member are,
strictly speaking, companies: Adobe, Apple, Facebook, Google,
Microsoft, Mozilla, Opera, Twitter, and others. That is, companies
that are usually fierce competitors are working together for the good
of the language.

Every two months, TC39 has meetings that member-appointed


delegates and invited experts attend. The minutes of those meetings
are public in a GitHub repository.
5.5 The TC39 process
With ECMAScript 6, two issues with the release process used at that
time became obvious:

If too much time passes between releases then features that are
ready early, have to wait a long time until they can be released.
And features that are ready late, risk being rushed to make the
deadline.

Features were often designed long before they were


implemented and used. Design deficiencies related to
implementation and use were therefore discovered too late.

In response to these issues, TC39 instituted the new TC39 process:

ECMAScript features are designed independently and go


through stages, starting at 0 (“strawman”), ending at 4
(“finished”).
Especially the later stages require prototype implementations
and real-world testing, leading to feedback loops between
designs and implementations.
ECMAScript versions are released once per year and include all
features that have reached stage 4 prior to a release deadline.

The result: smaller, incremental releases, whose features have


already been field-tested. Fig. 1 illustrates the TC39 process.
Review at TC39 meeting

Stage 0: strawman Sketch

Pick champions

Stage 1: proposal TC39 helps

First spec text, 2 implementations

Stage 2: draft Likely to be standardized

Spec complete

Stage 3: candidate Done, needs feedback from implementations

Test 262 acceptance tests

Stage 4: finished Ready for standardization

Figure 1: Each ECMAScript feature proposal goes through stages that


are numbered from 0 to 4. Champions are TC39 members that
support the authors of a feature. Test 262 is a suite of tests that
checks JavaScript engines for compliance with the language
specification.

ES2016 was the first ECMAScript version that was designed


according to the TC39 process.

5.5.1 Tip: Think in individual features


and stages, not ECMAScript versions

Up to and including ES6, it was most common to think about


JavaScript in terms of ECMAScript versions – for example, “Does
this browser support ES6 yet?”

Starting with ES2016, it’s better to think in individual features: once


a feature reaches stage 4, you can safely use it (if it’s supported by the
Other documents randomly have
different content
Sinä iltana istui Janne Sakarinpoika kauan poikansa luona, joka
kalpeana käveli edestakaisin lattialla. Isän huulilta ei tullut yhtään
moitteen sanaa, vaan lohdutuksen tuon tuostakin. Vihdoin hän keksi
sen neuvon, että Martti lähtisi Jackmannin luo, jolla oli kiinnitys
Lapinniemeen, hankkimaan ajanpitennystä, joten ehkä vielä kaikki
saataisiin autetuksi.

Kun poika synkästi sanoi, ettei Jackmann ollutkaan enää


velkojana, vaan Stuwitz, pimenivät Jannenkin kasvot, mutta hän
lausui kuitenkin:

"Luoja keksinee keinon siihenkin."

Kun hän tuli kotia Marinan luo, surivat tosin molemmat vanhukset;
mutta Janne oli silloinkin tavattoman lempeä, — "kullakin on oma
karinsa vältettävänä", sanoi hän ja lisäsi, että "Martin
onnettomuutena on ollut tuo hieno neitonen".

Martin täytyi antaa määräpäivän mennä ohi, ja hän hoiti nyt


raskain mielin jokapäiväisiä tehtäviään Lapinniemellä. Kesän
kuluessa hänen onnistui kuitenkin koota niin paljon rahaa, että hän
voi suorittaa langenneen osuuden, jonka hän lähettikin Stuwitzille;
mutta tämäpä vaati koko summaa. Stuwitz oli jo ryhtynyt ensimäisiin
laillisiin toimenpiteisiin ja huhu Lapinniemen myynnistä
huutokaupalla levisi kulovalkeana. Helppo oli huomata, että Stuwitz
aikoi saada kauppapaikan itselleen.

Martin täytyi ryhtyä viimeiseen, sangen nöyryyttävään keinoon, se


on, hänen täytyi matkustaa Stuwitzin luo saadakseen hänet
taivutetuksi odottamaan hiukan, vaikkapa vain ensi kevääseen. Se oli
raskas tehtävä, mutta koettaa sitä täytyi, sillä muuten tapahtuisi
vieläkin hullumpaa: kun tulisi siihen tilaan, ettei voisikaan tehdä joka
miehelle oikeutta. Usein hän oli menettämäisillään kaiken toivon.
Häntä vaivasi sekin, että Heggelundin väki, joka nyt tiesi, kuten
muutkin, hänen asemansa, saattaisi arvata hänen asiansa Stuwitzin
luona.

Heggelundilaiset osoittivat suurta myötätuntoa hänen suruansa


kohtaan. Antti oli unohtanut suuttumuksensa. Edel oli kerran
vastannut jokseenkin ankarasti, kun joku lausui, että Martti Jansen
oli osaksi itse syypää onnettomuuteensa, ja Heggelund sanoi
olevansa kovin pahoillaan siitä, että tuo kelpo nuorukainen oli
kavalan juonen kautta joutunut "halpamaisen Stuwitzin kynsiin".
Myöskin Topias-setä näytti alakuloiselta, ja koko talo oli ikäänkuin
täynnä sääliä Martti Jansenia kohtaan. Kun joku puhui vararikosta,
väittivät Heggelundilaiset kiivaasti, että koko pula on varmaan
ohimenevää laatua.

Kauan aikaa lykkäilty matka Stuwitzin luo tapahtui vihdoin. Martti


ei tahtonut jättää käyttämättä mitään mahdollista keinoa asemansa
parantamiseksi, vaikka hänen lopullinen päätöksensä olikin muuten
valmis. Jollei hän voisi saada Stuwitzia taipumaan — mikä näyttikin
luultavalta — aikoi hän, niinpian kuin asiat tulivat järjestykseen,
matkustaa Amerikkaan. Sillä olihan täällä mennyt kumoon se, jota
hän piti pyrintöjensä ainoana päämääränä, ja hän tunsi mielensä
katkeraksi ajatellessaan uhkaavaa perikatoa.

Heggelundilla oli Antti tähän aikaan poissa kotoa; mutta


Heggelund itse, joka oli nähnyt Martti Jansenin tulevan, meni häntä
vastaan tielle ja kutsui häntä hyvin ystävällisesti luoksensa. Martti,
joka tiesi, että Heggelund kyllä arvaa hänen asiansa, katsoi
parhaaksi puhua siitä hänelle suoraan.
"Minä aion mennä", sanoi hän hieman pidätetyllä äänellä,
"Stuwitzin luo, voidakseni, jos mahdollista, pelastaa Lapinniemen."

Heggelund silmäsi vihaisesti Stuwitzin taloon päin ja sanoi sitten


totisena, samalla pudistaen Martin kättä:

"Luvatkaa minulle, Jansen, että tulette jälleen taloomme,


käyköönpä tuon veijarin luona kuinka hyvänsä — täällähän on teidän
vanha kotinne."

Heggelundin sanat osoittivat suurta ystävällisyyttä, jota Martti ei


ollut odottanutkaan.

Stuwitz istui ahtaassa puotikamarissaan kirjoitellen erääseen


konttorikirjaansa, kun Martti Jansen astui sisään. Hän mutisi hiukan
nähtyään tulijan, mutta jatkoi sitten työtään antamatta keskeyttää
itseään ja käskemättä vierasta istumaan; — eikä huoneessa ollut
paljon sijaakaan, paitsi isännän vieressä olevalla tuolilla. Martti tunsi
vanhastaan nuo kasvonjuonteet; ne eivät ennustaneet hyvää.

Viimein nosti Stuwitz silmänsä kirjasta ja sanoi jäyhästi:

"Tulette varmaankin maksamaan velkaanne?"

"En", vastasi Martti, "minä tulen pyytämään maksuajan


pitennystä."

"Vai niin!" sanoi Stuwitz pitkäveteisesti ja silminnähtävästi


keventynein mielin, samalla kuin hän ryhtyi taas työhönsä. "Onhan
teillä ajanpitennystä huutokauppapäivään asti."

Stuwitzin vastauksessa oli jotakin sanomattoman loukkaavaa, eikä


hän koettanutkaan salata toivoansa päästä piakkoin Lapinniemen
omistajaksi.

Siitä huolimatta esitteli Martti hyvin levollisesti syytä pyyntöönsä;


olihan maksettavaksi langennut summa jo suoritettu, ja hän sanoi
olevansa valmis suorittamaan seuraavat erät kahdesti tai koko
summan ainakin kevääksi.

Olkapäiden kohautus ja vihaisesti kieltävä mutina oli ainoana


vastauksena; Stuwitz jatkoi vain kirjoittamistaan.

Martti huomautti silloin, että hänen entinen saamamiehensä


Jackmann yleisen tavan mukaan ei olisi vaatinut koko summaa
yhtaikaa.

"Ei", sanoi Stuwitz lyöden kämmenensä jotenkin kiivaasti pöytään


saadakseen keskustelun loppumaan, "saamamiehen nimenä on nyt
Stuwitz, eikä Jackmann, ja toivoakseni te huomaatte erotuksen".
Hän näytti kovalta ja ilkeältä — varmaankin hän aikoi ajaa
velkamiehensä ulos ovesta.

Martti huomasi, ettei mieheen voinut mikään puhe vaikuttaa, ja


hän näki viimeisen toiveensa raukeavan tyhjiin. Stuwitzin edessä
kärsimällään nöyryytyksellä hän oli täyttänyt velvollisuutensa
asiassaan ja tunsi nyt mielensä miltei kevennetyksi. Sillä hän halusi
kiihkeästi sanoa tälle miehelle, joka nyt polki häntä alas, säälimättä
koko totuuden. Sen sijaan, että olisi lähtenyt pois tämän loukkaavan
kohtelun jälkeen, hän istahti Stuwitzin hämmästykseksi aivan
rauhallisena vuoteen laidalle.

Mitä nyt tapahtui näiden kahden miehen välillä, sitä ei voi aivan
tarkoin esittää.
Martti niin sanoaksemme paloitteli Stuwitzin nuoruudenelämän
pieniin kappaleisiin. Hän ei jättänyt mainitsematta mitään, mitä vain
tiesi, ja alkoi sitten katkeralla ivalla selvitellä hänen suhteitaan
Heggelundiin. Stuwitzin kasvoilla ilmeni sanomattoman arkaa hätää;
hänen nolo, mateleva katseensa muistutti petoeläintä, joka
hädissään kiertää edestakaisin kuopassa, johon se äkkiä on
pudonnut. Tämän arkamaisuuden jälkeen hänet valtasi hetkiseksi
raivonpuuska, ja näytti siltä kuin hän olisi tahtonut ryhtyä
väkivaltaan. Mutta Martin katse sai hänet taas asettumaan.

Peilissä, joka Stuwitzille näytettiin, näkyi kuva, jota hän lopulta


itsekin rupesi pitämään väärennettynä, turmeltuna. Ja nyt hän taas
tuli omaksi itsekseen; sillä hän oli alussa siveellisesti vaipunut sen
painon alle, joka niin äkkiä valtasi hänen omantuntonsa; sitäpaitsi
hän oli alussa säikähtänyt. Martti Jansen oli kiivas syytöksissään,
mutta samalla hän meni myös liikoihin ja ilmaisi sen ohessa, kuinka
hajanaiset ja lain edessä vaarattomat hänen tietonsa olivat.

Stuwitzin samea silmä värähti, ja hän sanoi samalla kiusallisen


leppeästi hymyillen:

"Enhän minä, Herran nimessä, tahdo muuta kuin lainmukaisen


omistusoikeuteni Lapinniemeen, ja senhän minä kyllä saan. — Mutta
missä teidän äitinne on maailmaan ilmestynyt, sitä minä en
mitenkään osaa sanoa — jollei hän ole kirkonkirjoissa niinkuin
muutkin ihmiset."

Martin kasvot kalpenivat kokonaan; hän katsoi Stuwitzia jäykästi


silmiin, saamatta sanaakaan suustaan. "Konna!" huudahti hän
vihdoin ja poistui huoneesta.

Stuwitz saattoi häntä ovelle ja sanoi:


"Voittehan te hakea oikeutta! — Näyttäkää vain toteen nuo
lorunne oikeuden edessä, Martti Jansen! Mutta hankkikaa hyviä
vieraitamiehiä, muuten voi teidät saada tuomituksi väärästä
ilmiannosta."

Martti kuuli vielä ivallisen "hyvästin" jälkeensä.

Kun hän pitkän ja yksinäisen kävelyretken jälkeen tuli lupauksensa


mukaan Heggelundin luo, näkyi hänen kasvoillaan vielä
mielenliikutuksen jälkiä. Hän kertoi lyhyesti, ettei Lapinnientä enää
voi pelastaa; hän sanoi jo ennakolta arvanneensa asian niin
päättyvän ja aikoi senvuoksi matkustaa Amerikkaan.

Hänen ylpeytensä se sai hänet puhumaan niin suoraan; — sillä


Edel oli samassa huoneessa. Mutta helppo oli nähdä, että asia painoi
raskaasti hänen mieltänsä — hän pysyi melkein äänetönnä koko
illan.

Edel tarjosi itse hänelle teetä, ja kun hän mainitsi Amerikan tärisi
kuppi tytön kädessä. Martti huomasi Edelin kalpeuden sekä salaisen
myötätuntoisuuden ja tunsi jonkunlaisella surulla, ettei tyttö ollut
koskaan häntä niin lähellä kuin nyt — olihan tytön käytöksessä
jotain, joka melkein näytti tunnustavan, että syy oli hänen.

Syynä siihen, että Martti istui vaiteliaana, ei ollut ajatus


Lapinniemen, vaan Edelin kadottamisesta ikipäiviksi.

Heggelund ja Topias-setä menivät tavallisuuden mukaan aikaisin


levolle, ja Martti oli hetkisen yksinään huoneessa; hän istui ja
leikitteli rintaneulalla, jota hän piteli kädessään. Kohta senjälkeen tuli
Edel sisään; hän oli kalpea ja totisen näköinen.
Ikäänkuin myönnytykseksi tytön arvaamiin ajatuksiin sanoi Martti
huoaten:

"Niin, minä matkustan Amerikkaan — täällä ei minulla ole enää


mitään päämäärää."

"Lapinniemi ei kuitenkaan liene koko elämä", vastasi tyttö


matalalla äänellä, katsomatta Marttiin.

"Ei, neiti Edel", sanoi Martti mielenliikutuksen valtaamana, "mutta


te olette minulle koko elämä! — Teitä varten minä olen työskennellyt
ja teitä minä olen ajatellut." —

Martti oli noussut ylös ja seisoi nyt tytön vieressä. — "Ja nyt" —
hän lisäsi surullisella äänellä, "nyt, kun minä en ehkä koskaan enää
saa nähdä teitä tässä elämässä, tahdon minä pyytää teitä
säilyttämään erään esineen, joka on minulle erittäin kallis, äitini
rintaneulan; minua ilahduttaisi suuresti, jos tietäisin teidän kantavan
sitä."

Hän aikoi ojentaa tytölle neulan, mutta käsi, joka otti sen vastaan,
vapisi, ja hän luki Edelin kasvoista ja hänen kyyneltyneistä
silmistään, että tyttökin rakasti häntä. Martti unohti kaiken ja veti
tytön luoksensa; mutta kohta sen jälkeen hän malttoi mielensä ja
sanoi vitkaan: "Mitenkäs tulevaisuus?"

"Sen rakennamme me yhdessä", kuiskasi Edel ja tarjosi kätensä


luottavasti Martille.

Kun neitsyt Dyring katsahti sitten ovesta, istuivat molemmat


onnelliset ikkunan edessä kuunvalossa.
Aamulla oli Edel tavallista aikaisemmin isänsä luona; hänellä oli
tavattoman paljon asioita toimitettavana ja järjestettävänä. Mutta
sitten tyttö tarttui isäänsä kaulaan, niin että tämän täytyi kysyä syytä
siihen, ja silloin Edel selitti, kuinka hänen laitansa oikeastaan oli. Isä
oli asiasta hyvin iloissaan, ikäänkuin Martti Jansen olisi voittanut
Lapinniemen eikä kadottanut; sitten tehtiin sopimus kihlauksen
julkaisemisesta, kun Martti ensi kerran tulisi Heggelundille. Edel luuli
kuitenkin, että neitsyt Dyring arvaisi asian jo sitä ennen.

*****

Oli juuri se aika kesää, jolloin lappalaiset oleskelivat Skorpöllä, ja


sanoma siitä, että Stuwitz aikoi myydä Lapinniemen huutokaupalla,
oli saapunut sinnekin. Se saattoi Matti Nuton kovin levottomaksi, sillä
hän näki uuden vaaran uhkaavan etujansa.

Kun Martti Jansen tuli kotia, oli häntä vastassa useita henkilöitä,
jotka koettivat hänen kasvoistaan arvata, miten matkalla oli käynyt,
ja niiden joukossa myöskin Matti Nutto. Mutta hänpä ei voinut tehdä
muuta päätöstä kuin että matka oli onnistunut hyvin. Marinalta hän
sai seuraavana päivänä kuulla, kuinka asian oli käynyt.

Lappalainen kävi talossa useita kertoja ja Marina huomasi, että


hän tarkoilleen kyseli asiaa monta monituista kertaa. Viimeksi hän
tuli lainaamaan heidän kolmihankaansa pariksi päiväksi matkaa
varten; mihinkä hän aikoi, sen hän jätti kuitenkin sanomatta. Kotona
teltassaan hän oli siihen aikaan ollut sangen miettiväinen.

Eräänä aamuna, kun Stuwitz meni tavallisuuden mukaan


avaamaan kauppapuotiaan, seisoi vanha lappalainen ulkona
odottamassa. Hän aavisti, että jotakin ikävää oli odotettavana ja
lähetti senvuoksi kauppapalvelijansa alas rantapuotiin, päästäksensä
vieraistamiehistä. Hän koetti salata iloansa, kun lappalainen sanoi
tulleensa vaihtamaan jäljelläolevia vanhoja seteleitä, ja hän tarttui
kuumeentapaisesti setelipakkaan, jonka hän oli tuonut mukanaan
konttorista. Vihdoinkin hän siis sai käsiinsä nuo setelit, jotka niin
monta vuotta olivat vaivanneet hänen sieluansa.

Matti ei kuitenkaan vetänyt lompakkoansa esille, vaan ilmoitti nyt


oikean asiansa. Hän tahtoi kirjallista vakuutusta siitä, ettei
Lapinnientä myytäisi huutokaupalla velasta; — lappalainen arveli,
että vanhan sopimuksen mukaan pitäisi Lapinniemen saada olla
rauhassa.

Stuwitz ei vastannut pitkään aikaan; hänen kasvonsa punoittivat,


ne ilmaisivat raivoa ja pelkoa. Hätäytyneenä näki hän, että nuo
setelit olivat aseena Martti Jansenin kädessä ja että hänen täytyi ne
lunastaa mistä hinnasta hyvänsä.

Stuwitz kiusasi häntä kauan aikaa turhaan kaikenlaisilla


tarjouksilla; mutta Matti oli taipumaton, ja Stuwitzin täytyi, kuten
hän sanoi, suostua kirjoittamaan vaadittu vakuutus, jonka hän teki
kirjeen muodossa Martti Jansenille. Mutta lappalainen ei näyttänyt
vieläkään tyytyväiseltä — hän tahtoi että joku toinen lukisi hänelle
varmuuden vuoksi kirjeen.

Ihmeellisen taipuisana rupesi Stuwitz kirjoittamaan uutta kirjettä;


hänen kätensä vapisivat ja hän keskeytti kirjoituksensa useita
kertoja, ikäänkuin olisi miettinyt pelastuskeinoja. Mutta lappalainen
katseli häntä rypistellen kulmiansa ja nähtävästi nautti voitostansa.

Jonkun hetken kuluttua tuli Matti taas kauppapuotiin, jossa Stuwitz


odotti häntä peläten, ettei lappalainen pitäisi sanaansa. Hän toi
kuitenkin uskollisesti setelit, mutta väitti vaihtaessa, että kukin taaleri
vastaa tietysti taaleria uusissa seteleissä, ja Stuwitzin täytyi suostua
hänen vaatimukseensa.

Tänä päivänä istui Antti salissa ja puheli serkkunsa kanssa. Edel oli
hyvin iloinen ja näköjään samaa mieltä Antin kanssa, kun jälleen tuli
puheeksi se, että sivistyksen yksinomaiset kannattajat maassa olivat
ylioppilaat. Hän oli tosin vastannut jotain, josta Antti ei tiennyt, oliko
se pistopuhetta vai ei, ja tämä siveli senvuoksi mustaa
leukapartaansa; mutta Edelin viaton katse rauhoitti hänet. Tyttö oli
sanonut:

"Niin, minä muistan hyvin hyvästi, kuinka iloiseksi me tulimme sinä


päivänä, jolloin sinä tulit sivistyneeksi", mutta oikaisi sitten kohta:
"jolloin sinä suoritit ylioppilastutkinnon."

Silloin astui sisään palvelija ilmoittaen, että eteisessä odotti eräs


lappalainen, joka tahtoi puhua Antin kanssa. Se oli vanha Matti
Nutto, jonka hän entisistä ajoista tunsi ulkomuodolta. Lappalaisella
oli kädessä paperi, jonka hän pyysi lukemaan — hän tahtoi tietää,
oliko se oikein kirjoitettu.

Tuskin oli Antti lukenut paperin, kun hän riensi saliin ilmoittamaan,
että Martti Jansen oli nyt pelastettu; — hänellä oli kädessä kirjallinen
todistus siitä, ja hän aikoi juuri hyökätä samaa vauhtia ilmoittamaan
asiata enollensa, kun Edel kalpeana ojensi kätensä saadaksensa
paperin. Kun tyttö oli lukenut kirjoituksen pari kertaa ja sitten vielä
kolmannen kerran, katsoi hän loistavin silmin Anttiin ja sanoi äkillisen
kiitollisuuden-tunteen valtaamana:

"Koska sinä, Antti, olet tuonut minulle tämän sanoman, niin saat
myös olla ensimäinen, jolle minä ilmoitan kihlaukseni Martti Jansenin
kanssa — vaikkei hän olekaan mikään 'sivistynyt mies'" — lisäsi hän
hiukan veitikkamaisesti; mutta tytön silmät olivat täyttyneet
kyynelillä ja hän meni itse näyttämään paperia isälleen.

Lappalaisella ei ollut aikaa nauttia tarjottuja virvoituksia, sillä


hänen piti rientää takaisin Stuwitzin puotiin; — hän oli vain tahtonut
näyttää tuota paperia.

Matti matkusti hyvin tyytyväisenä kotiansa. Hän nousi rantaan


Janne Sakarinpojan laiturilla ja jätti Marinalle kirjeen, samalla
kertoen sen sisällön.

Rientäen matkaan sanoi Matti, että "siinä on palkka siitä, että


Marina oli kerran pelastanut minun tyttäreni ja tämän lapsen
kareilta. Mutta", huusi hän lopuksi, "jos hukkaat kirjeen, menettää
poikasi Lapinniemen!"

Marina kiiruhti kirjeineen kotia ja saapui sinne hengästyksissään.


XVII.

VANHOJA ASIOITA.

Menettelynsä vuoksi Heggelundia kohtaan oli Stuwitz joutunut


huonoon maineeseen paikkakunnalla. Parantaakseen asemaansa
yleisön silmissä tai rauhoittaakseen omaatuntoansa hyvillä töillä, hän
matkusti tänä syksynä käräjille tekemään testamenttiaan, jonka
mukaan useita rahaeriä hänen kuolemansa jälkeen tulisi määrätyksi
kunnalle.

Käräjäpaikassa juteltiin illalla eräästä tapauksesta, joka koski


Heggelundin luona asuvaa "vanhaa neuvosta". Kun tämän nuorena
ollessa eräs laiva joutui haaksirikkoon Ruijan pohjoisrannalla, oli
hänen veljensä, joka sitä kuljetti, menettänyt henkensä yhdessä
vaimonsa ja lapsiensa kanssa. Neuvos oli aikanaan pannut toimeen
useita tiedusteluja, koska tämän tapauksen johdosta oli levinnyt
kaikenlaisia huhuja. Sen rintaneulan, jonka Martti Jansen lahjoitti
morsiamelleen, neiti Heggelundille, sanoi vanhus olevan saman
neulan, jonka hän aikanaan oli antanut kälylleen. Omituista asiassa
oli se, että tämä neula sanottiin löydetyn haaksirikkoisesta laivasta
pelastetun lapsen vaatteista, ja tämä lapsi oli ollut Martti Jansenin
äiti.
Ihmiset olivat tiettyjä, ja tuntuipa omituiselta ajatella niitä
henkilöiksi romaanissa, johon ainekset olivat kootut välittömästä
ympäristöstä. Eräs läsnäolijoista kertoi pari samanlaista juttua monta
vuotta sitten tapahtuneista asioista ja keskustelu muuttui kohta
kaikenlaisiksi arveluiksi ja luuloiksi tästä asiasta.

Rovasti Müller oli koko ajan kuunnellut juttelua, äänettömänä


pyyhkien tuon tuostakin kasvojansa nenäliinalla. Yhtäkkiä hän lausui
kummallisen juhlallisesti kääntyen Stuwitziin, joka ei ottanut osaa
keskusteluun: "Minä rukoilen aina niiden edestä, jotka eivät uskalla
tunnustaa, mitä heillä on sydämellä; sillä heidän tilansa on sangen
tukala, siitä olen vakuutettu."

Stuwitz näytti ällistyneeltä ja katosi kohta huoneesta.

Rintaneula oli tullut tunnetuksi seuraavalla tavalla: Eräänä päivänä


oli Edel puhellessaan Topias-sedän kanssa näyttänyt hänelle
saamaansa uutta rintaneulaa. Luotuaan sitten silmänsä ukkoon,
kummasteli tyttö hänen käytöstään. Ukko käänteli neulaa käsissään,
tarkasteli sitä kaikin puolin ja otti viimein sen sisästä, raottamalla
pientä kantta, kimppusen hiuksia, joiden olemassaoloa Edel ei ollut
aavistanut. Vanhus näytti olevan mielenliikutuksen vallassa ja istui
kauan ajatuksiinsa vaipuneena.

Se on, lausui hän vihdoin heikolla äänellä, sama rintaneula, jonka


hän kerran oli lahjoittanut veljensä vaimolle. Kihara oli hänen
veljensä hiuksista; itse hän oli siihen piirtänyt kannen alle nimensä
alkukirjaimet T. St.

Nyt seurasi selityksiä ja Edel kertoi, mitä hän tiesi neulasta; sitten
hän jätti ukon hänen omasta tahdostaan istumaan yksinään neula
kädessä.
Kun Edel sittemmin tuli hänen luokseen, puheli ukko tapansa
mukaan katkonaisesti:

"Ihmeellistä! Ihmeellistä! Olenhan aina ajatellut, että Martti Jansen


on veljeni näköinen — yhtä vaaleaverinen, ja etenkin silmät — ja
sama reipas käytös — ainahan sanottiin, että veljeni, kapteeni, oli
saanut yhtä paljon pituutensa lisäksi kuin minulta puuttui!"

Myöhemmin illalla hän sanoi vilkkaasti:

"Minä olisin mielelläni häissä, Edel — jos minä siksi ennätän


tarpeeksi voimistua — ja nyt pitää sinun kirjoittaa kaikesta tästä
sulhasellesi, niin minä lisään sitten muutamia sanoja veljeni-
tyttärelle". Hän pani painon viime sanalle, jolla hän tarkoitti Marinaa.
"Hän tai hänen lapsensa saavat periä minut", sanoi hän seuraavana
päivänä.

Ei kukaan tahtonut pahoittaa vanhuksen mieltä selittämällä


hänelle, kuinka vaillinaisesti asia lain mukaan oli todistettu.
Sukulaisistaan puhuminen tuli tästä hetkestä Topias-sedän
mieluisimmaksi ajankuluksi.

Elämänsä viime vuosina tuli Stuwitz halvatuksi toiselta kyljeltään ja


hänen ahneudestaan sekä ihmisvihollisuudestaan kulki hirveitä
juttuja.

Kun rovasti Müller kerran kutsuttiin hänen yksinäisen


kuolinvuoteensa ääreen, näki hän, että Herra oli kauan sitten saanut
käsiinsä tämän miehen.
XVIII.

LOPPU.

Edelin ja Martin kihloihin joutuminen juuri niinä päivinä, jolloin


viimemainitun asiat olivat huonoimmillaan, vaikutti, että Jannen mieli
kääntyi suopeammaksi Edeliä kohtaan; — Marinan kanssa
puhuessaan ei hän nimittänyt tyttöä enää hienoksi neitoseksi. Mutta
olipa kuitenkin vielä jotakin epäilystä jälellä. Lapinniemellä tarvittiin
hyvä talonemäntä; mutta oliko mahtavan Heggelundin tytär
semmoiseksi sopiva, sitä hän suuresti epäili. Hän oli vähällä tehdä
sellaisen johtopäätöksen, että tyttö, joka muuallakin oli saanut
aikaan monta hullutusta, voisi taloon tultuansa vielä suuremmassa
määrin viedä asioita samaan suuntaan. Hän epäilemättä tahtoisi,
että kaikki olisi suurellista, mihin hän kotonaan oli tottunut.

Janne ja Marina olivat sittemmin olleet useita kertoja kutsuttuina


Heggelundin luo vieraisille. He olivat aina juhlavaatteissaan ja
tahtoivat joka kerta lähteä kotiaan puolenpäivän jälkeen — he
ymmärsivät ylipäänsä ihmeteltävän hyvin käyttäytyä arvokkaasti.
Mutta toiselta puolen osasi myöskin Edel hienolla tavalla vaikuttaa
sulhasensa isään — ikäänkuin hän olisi arvannut ukon ajatukset.
Martti ja Edel olivat hyvin pahoillaan siitä, että vuosikausia oli
heiltä mennyt hukkaan — mistä he nyt saivat kärsiä. Se asia oli heillä
kuitenkin selvänä, että heidän on voimainsa mukaan yhteisesti
rakennettava tulevaisuuttaan. Alussa ei heidän pitäisi laisinkaan elää
ylellisesti, sillä Stuwitzin velan maksaminen oli vaatinut suuria
uhrauksia; mutta kun Lapinniemi oli niin edullinen paikka, saattoi
suoritus nyt tapahtua. Martti tahtoi, että Edel tulisi hänen
emännäkseen jo samana kevännä. Mutta Edel oli siihen aikaan
Jannen kuullen vastannut tarvitsevansa vielä aikaa. Ja kun Martti
hiukan hämillään kysyi:

"Mitä varten?" — vastasi tyttö:

"Luuletko, että minä aion istua kädet ristissä luonasi


Lapinniemellä? Onhan taloudessa paljon seikkoja, jotka minun on
opittava, jotta voisin olla sinulle avuksi!"

Jannen mielestä puhui tyttö viisaammin kuin Martti. Mutta


viimemainitun tahdosta päätettiin kuitenkin viettää häät kesän
kuluessa.

Edel oli vähitellen saanut Jannen mielen kokonaan muuttumaan,


niin että hän alkoi arvella syyksi Lapinniemellä tapahtuneisiin
onnettomuuksiin sitä, ettei Edel joutunut sinne aikaisemmin.

"Edelin miehenä ei Martti koskaan olisi menetellyt niin


uhkarohkeasti", sanoi Janne Marinalle, "eikä tyttö olisi sallinutkaan
sellaista menettelyä, sillä hän on ymmärtäväinen ihminen!"

Kesäpäivät olivat ihanat Skorpöllä. Meri oli tummansininen ja


aurinko paistoi heleästi. Tunturit lähellä ja kaukana, niiden joukossa
Storbergskavli lähinnä, heijastivat erilaisia sinivärejä ja ahtaat rotkot
sekä laaksot olivat oikeita lämmönlähteitä, jotka herättivät eloon
ihmeteltävän kasvullisuuden, missä vain maa oli vähänkin siihen
sopiva. Kevättä oli tänä vuonna saanut odottaa tavattoman kauan,
mutta sitten se tulikin muutamissa päivissä sellaisella voimalla, että
tuore ruoho laaksossa näytti ikäänkuin työntämällä työntäneen
päältään lumihangen.

Janne Sakarinpojan pieni tupa merenrannalla oli laitettu erikoisen


siistiksi. Piha oli huolellisesti lakaistu, ruudut uusittu ja ovipielet
koristettu koivunlehvillä. Tämä juhlallisuus ei ollut sopusoinnussa
turvekatolla kasvavan ruohon ja sen reunalla kohoavan vaivaiskoivun
kanssa, joka näytti kuvaavan omistajain tuultentuivertamaa elämää.

Kotona ei ollut ketään ja ovi oli lukossa; — mutta uusien kirkasten


ruutujen läpi paistoi päivä ja valaisi juhlallisesti seinälaudan
kirjoituksen alku- ja loppupuolen.

Janne ja Marina olivat lapsineen matkalla poikansa häihin, joita


pari päivää sitten oli vietetty Heggelundin luona, ja heitä odotettiin
nyt kotia yhdessä vastavihityn pariskunnan kanssa.

Häissä ei ollut paljon vieraita, ne kun oli päätetty viettää


yksinkertaisesti ja vaatimattomasti. Mutta neitsyt Dyring, joka tänä
päivänä näytti loistavalta ja suurelta, ikäänkuin emäntävainajan
henki olisi leijaillut hänen yllään, ei voinut tätä päätöstä täydellisesti
noudattaa. Hän edusti nyt emännyyttä eikä katsonut talon arvolle
sopivaksi, että pöydässä olisi ruokalajeja tällä kertaa vähempi määrä
kuin toisen sisaren häissä. Ilo oli ylimmillään. Vanha seinälautakin sai
osansa juhlallisuudesta. Rovasti Müller kohotti lasinsa sen kunniaksi.
Halenneelle, meren heittämälle laudalle, sanoi hän, joka limaisena oli
aikanaan kuulunut karille joutuneeseen laivaan, kirjoitti Jumala
tulevaisuuden lupauksen, joka on ihmeellisesti toteutunut. Pitkien
elämäntaistelujen jälkeen istui nyt se, joka kerran turvattomana
lapsena oli sillä laudalla ajelehtinut, iäkkäänä, onnellisena äitinä ja
luki tämän kirjoituksen maalattuna pojan uuden jaalan perään, ja, —
lopetti hän kääntyen Topias-sedän puoleen — "tämä vanha mies,
jonka surun aiheena on ollut hänen hukkunut perheensä, ei iloitse
nyt muita vähemmän; sillä vanhuksen suurimpana maallisena
siunauksena on se, että hän saa nähdä sukunsa tulevaisuuden.
Mutta syynä siihen, minkä vuoksi tämä lauta kasvoi uudeksi laivaksi,
on se, että Herramme on sitä ohjannut."

Tähän lyhyeen puheeseen lisäsi Janne Sakarinpoika


yksinkertaisella, talonpoikaisella tavallaan: "amen."

*****

Salmessa Skorpön kohdalla purjehti tänä kauniina päivänä kaksi


juhlallisesti koristettua purjevenhettä, joita tervehdittiin laukauksilla
useista kohdin rannalta.

Ensimäisessä venheessä istuivat morsian ja sulhanen


vanhempiensa Janne Sakarinpojan ja Marinan kanssa sekä Topias-
setä ja heidän sivullaan Elias Röst, joka oli ehdotellut kunniasoutua
pariskunnalle. Myöskin Antti Heggelund oli mukana. Toisessa
venheessä nähtiin muiden muassa Martin veli Eilert ja hänen kaunis
sisarensa Kristiina.

Lapinniemellä seisoi nyt paitsi kaupparakennusta yksikerroksinen


asuinhuoneisto, varustettuna suurilla, kirkkailla ikkunaruuduilla; se
oli valmistunut ja sisustettu vasta puolittain — mutta mikä puuttui,
se saattoi vastedes tulla valmiiksi. Rakennusten taustana nähtiin
kukkulat lehtipuineen. — Lappalaiset olivat tänä vuonna
tavallisuuden mukaan jo ajaneet poronsa vuorilaaksoon. Iso, äsken
maalattu meripuoti tuli heidän näkyviinsä, kun oli päästy niemen
sivuitse, ja lahdelmassa puodin edustalla oli Martti Jansenin jaala
"Tulevaisuus" liehuvin lipuin.

Silloin laski Elias Röst purjeet alas; toisessa venheessä tehtiin


samoin, ja nyt asettuivat venheet vierekkäin.

Elias Röst veti pitkän paperiliuskan povitaskustansa. Polkien


toisella jalallaan tahtia hän luki runon morsiusparin kunniaksi.
Käsiala oli suurta ja joka säkeistön alkukirjaimet erityisesti
kaunistetut. Runo kuului näin:

Tuoll' aavalla aaltoja halkoillen miten pulska on purjeissa


viishankanen, perämies jota taidokas johtaa! Kun kiitävät noin
ohi saaret ja maa, niin purressaistuja riemuita saa, vaikk'
kasvoja tyrskehet kohtaa.

Mut hauras ja heiluva kaarnanen viishanka on raivossa


aaltojen, kun joutuvi myrskyjen hetki. Monet vaivat vaikeat
kestää saa, monet kerrat airoin ponnistaa, kun vaarojen halki
on retki.

Näyn hauskimman toki jahti se suo, kun talveksi moisen


saalihin tuo, ettei näy mastoja takaa, kun viirein liehuvin
satamaan se vihdoin laskevi ankkuriaan, syysantimet kaikille
jakaa.

Niin sorjana viishanka turvaisahan kaks nuorta vie kodin


valkamahan, soma runko sen lahdella loistaa! Meren meurut
haaksi se kestänyt on, ja sen kapteeni, uljas ja horjumaton,
on tietänyt vaarat poistaa.
Lapinniemelle onnea toivotetaan! Ja — morsian, ylkä — jos
pyydätte vaan alukseenne laivuriks Herran, menestystä aina
teille se tuo, lopun tullessa kunnian teille hän suo ja taivahan
sataman kerran.

Seinälauta on vielä jäljellä pienessä majassa, jossa molemmat


vanhukset asuvat, haluamatta muuttaa sieltä mihinkään. Janne
Sakarinpoika ja Marina viettävät siellä vanhuuden rauhallisia päiviä.

Martti Jansen on nyt näiden pohjoisten seutujen toimeliaimpia ja


varakkaimpia kauppiaita ja hänen suuresti laajentuneessa
kauppapaikassaan käy höyrylaiva. Siellä elää onnellinen aviopari
monien lastensa kanssa, ja Edeliä pidetään hyvin kunnollisena
talonemäntänä.

Joskus tulee Antti Heggelund sinne vieraisille ja häntä kohdellaan


silloin aina hyvin ystävällisesti. Tuskin tullee hänestä maaherraa,
mutta asianajajana on hänellä hyvä toimeentulo. Martti Jansen suosii
häntä, kuten ennenkin, ja hänellä onkin Antista kauppatoimissaan
suurta apua.

Alussa matkusti Antti joka vuosi Tromsöhön, jossa hän huvikseen


esiintyi entisellä tavallaan. Mutta sitten hän joutui taas Julie Schultzin
seuraan ja seurauksena oli, että heistä tuli pariskunta. Antti on
lujasti vakuutettu siitä, että Julie on hänen ensimäinen ja oikea
rakkautensa, ja hänen vaimonsa uskoo myöskin asian niin olevan —
mutta Tromsöhön päästää hän miehensä hyvin vastahakoisesti.
*** END OF THE PROJECT GUTENBERG EBOOK KOLMIMASTO
"TULEVAISUUS" ELI ELÄMÄÄ POHJOLASSA ***

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
Welcome to Our Bookstore - The Ultimate Destination for Book Lovers
Are you passionate about books and eager to explore new worlds of
knowledge? At our website, we offer a vast collection of books that
cater to every interest and age group. From classic literature to
specialized publications, self-help books, and children’s stories, we
have it all! Each book is a gateway to new adventures, helping you
expand your knowledge and nourish your soul
Experience Convenient and Enjoyable Book Shopping Our website is more
than just an online bookstore—it’s a bridge connecting readers to the
timeless values of culture and wisdom. With a sleek and user-friendly
interface and a smart search system, you can find your favorite books
quickly and easily. Enjoy special promotions, fast home delivery, and
a seamless shopping experience that saves you time and enhances your
love for reading.
Let us accompany you on the journey of exploring knowledge and
personal growth!

ebookball.com

You might also like