0% found this document useful (0 votes)
40 views

Download Complete Web Development with Node and Express Leveraging the JavaScript Stack 2nd Edition Ethan Brown PDF for All Chapters

JavaScript

Uploaded by

acheawkodzi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
40 views

Download Complete Web Development with Node and Express Leveraging the JavaScript Stack 2nd Edition Ethan Brown PDF for All Chapters

JavaScript

Uploaded by

acheawkodzi
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 47

Experience Seamless Full Ebook Downloads for Every Genre at textbookfull.

com

Web Development with Node and Express Leveraging


the JavaScript Stack 2nd Edition Ethan Brown

https://textbookfull.com/product/web-development-with-node-
and-express-leveraging-the-javascript-stack-2nd-edition-
ethan-brown/

OR CLICK BUTTON

DOWNLOAD NOW

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


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

Pro MERN Stack: Full Stack Web App Development with Mongo,
Express, React, and Node 2nd Edition Vasan Subramanian

https://textbookfull.com/product/pro-mern-stack-full-stack-web-app-
development-with-mongo-express-react-and-node-2nd-edition-vasan-
subramanian/
textboxfull.com

Pro MERN Stack: Full Stack Web App Development with Mongo,
Express, React, and Node Vasan Subramanian

https://textbookfull.com/product/pro-mern-stack-full-stack-web-app-
development-with-mongo-express-react-and-node-vasan-subramanian/

textboxfull.com

Pro MERN Stack: Full Stack Web App Development with Mongo,
Express, React, and Node 1st Edition Vasan Subramanian
(Auth.)
https://textbookfull.com/product/pro-mern-stack-full-stack-web-app-
development-with-mongo-express-react-and-node-1st-edition-vasan-
subramanian-auth/
textboxfull.com

Full Stack React Projects Modern web development using


React 16 Node Express and MongoDB 2nd Edition Shama Hoque

https://textbookfull.com/product/full-stack-react-projects-modern-web-
development-using-react-16-node-express-and-mongodb-2nd-edition-shama-
hoque/
textboxfull.com
Learning JavaScript 3rd Edition Ethan Brown

https://textbookfull.com/product/learning-javascript-3rd-edition-
ethan-brown/

textboxfull.com

Pro Express js Master Express js The Node js Framework For


Your Web Development Mardan Azat

https://textbookfull.com/product/pro-express-js-master-express-js-the-
node-js-framework-for-your-web-development-mardan-azat/

textboxfull.com

Programming Web Applications with Node, Express and Pug


1st Edition Jörg Krause (Auth.)

https://textbookfull.com/product/programming-web-applications-with-
node-express-and-pug-1st-edition-jorg-krause-auth/

textboxfull.com

RESTful Web API Design with Node js 10 Learn to create


robust RESTful web services with Node js MongoDB and
Express js 3rd Edition English Edition Valentin Bojinov
https://textbookfull.com/product/restful-web-api-design-with-node-
js-10-learn-to-create-robust-restful-web-services-with-node-js-
mongodb-and-express-js-3rd-edition-english-edition-valentin-bojinov/
textboxfull.com

Full Stack JavaScript Learn Backbone js Node js and


MongoDB Mardan Azat

https://textbookfull.com/product/full-stack-javascript-learn-backbone-
js-node-js-and-mongodb-mardan-azat/

textboxfull.com
1. Preface

a. Who This Book Is For


b. Notes on the Second Edition
c. How This Book Is Organized
d. Example Website
e. Conventions Used in This Book
f. Using Code Examples
g. O’Reilly Online Learning
h. How to Contact Us
i. Acknowledgments

2. 1. Introducing Express

a. The JavaScript Revolution


b. Introducing Express
c. Server-Side and Client-Side Applications
d. A Brief History of Express
e. Node: A New Kind of Web Server
f. The Node Ecosystem
g. Licensing
h. Conclusion
3. 2. Getting Started with Node

a. Getting Node
b. Using the Terminal
c. Editors
d. npm
e. A Simple Web Server with Node

i. Hello World
ii. Event-Driven Programming
iii. Routing
iv. Serving Static Resources

f. Onward to Express

4. 3. Saving Time with Express

a. Scaffolding
b. The Meadowlark Travel Website
c. Initial Steps

i. Views and Layouts


ii. Static Files and Views
iii. Dynamic Content in Views
iv. Conclusion
5. 4. Tidying Up

a. File and Directory Structure


b. Best Practices
c. Version Control
d. How to Use Git with This Book

i. If You’re Following Along by Doing It


Yourself
ii. If You’re Following Along by Using the
Official Repository

e. npm Packages
f. Project Metadata
g. Node Modules
h. Conclusion

6. 5. Quality Assurance
a. The QA Plan
b. QA: Is It Worth It?
c. Logic Versus Presentation
d. The Types of Tests
e. Overview of QA Techniques
f. Installing and Configuring Jest
g. Unit Testing

i. Mocking
ii. Refactoring the Application for Testability
iii. Writing Our First Test
iv. Test Maintenance
v. Code Coverage

h. Integration Testing
i. Linting
j. Continuous Integration
k. Conclusion

7. 6. The Request and Response Objects


a. The Parts of a URL
b. HTTP Request Methods
c. Request Headers
d. Response Headers
e. Internet Media Types
f. Request Body
g. The Request Object
h. The Response Object
i. Getting More Information
j. Boiling It Down

i. Rendering Content
ii. Processing Forms
iii. Providing an API

k. Conclusion

8. 7. Templating with Handlebars


a. There Are No Absolute Rules Except This One
b. Choosing a Template Engine
c. Pug: A Different Approach
d. Handlebars Basics
i. Comments
ii. Blocks
iii. Server-Side Templates
iv. Views and Layouts
v. Using Layouts (or Not) in Express
vi. Sections
vii. Partials
viii. Perfecting Your Templates

e. Conclusion
9. 8. Form Handling

a. Sending Client Data to the Server


b. HTML Forms
c. Encoding
d. Different Approaches to Form Handling
e. Form Handling with Express
f. Using Fetch to Send Form Data
g. File Uploads

i. File Uploads with Fetch

h. Improving File Upload UI


i. Conclusion
10. 9. Cookies and Sessions

a. Externalizing Credentials
b. Cookies in Express
c. Examining Cookies
d. Sessions

i. Memory Stores
ii. Using Sessions
e. Using Sessions to Implement Flash Messages
f. What to Use Sessions For
g. Conclusion

11. 10. Middleware

a. Middleware Principles
b. Middleware Examples
c. Common Middleware
d. Third-Party Middleware
e. Conclusion

12. 11. Sending Email


a. SMTP, MSAs, and MTAs
b. Receiving Email
c. Email Headers
d. Email Formats
e. HTML Email
f. Nodemailer

i. Sending Mail
ii. Sending Mail to Multiple Recipients
g. Better Options for Bulk Email
h. Sending HTML Email
i. Images in HTML Email
ii. Using Views to Send HTML Email
iii. Encapsulating Email Functionality
i. Conclusion

13. 12. Production Concerns

a. Execution Environments
b. Environment-Specific Configuration
c. Running Your Node Process
d. Scaling Your Website

i. Scaling Out with App Clusters


ii. Handling Uncaught Exceptions
iii. Scaling Out with Multiple Servers

e. Monitoring Your Website


i. Third-Party Uptime Monitors

f. Stress Testing
g. Conclusion

14. 13. Persistence

a. Filesystem Persistence
b. Cloud Persistence
c. Database Persistence

i. A Note on Performance
ii. Abstracting the Database Layer
iii. Setting Up MongoDB
iv. Mongoose
v. Database Connections with Mongoose
vi. Creating Schemas and Models
vii. Seeding Initial Data
viii. Retrieving Data
ix. Adding Data
x. PostgreSQL
xi. Adding Data
d. Using a Database for Session Storage
e. Conclusion

15. 14. Routing

a. Routes and SEO


b. Subdomains
c. Route Handlers Are Middleware
d. Route Paths and Regular Expressions
e. Route Parameters
f. Organizing Routes
g. Declaring Routes in a Module
h. Grouping Handlers Logically
i. Automatically Rendering Views
j. Conclusion
16. 15. REST APIs and JSON
a. JSON and XML
b. Our API
c. API Error Reporting
d. Cross-Origin Resource Sharing
e. Our Tests
f. Using Express to Provide an API
g. Conclusion

17. 16. Single-Page Applications

a. A Short History of Web Application Development


b. SPA Technologies
c. Creating a React App
d. React Basics

i. The Home Page


ii. Routing
iii. Vacations Page—Visual Design
iv. Vacations Page—Server Integration
v. Sending Information to the Server
vi. State Management
vii. Deployment Options
e. Conclusion

18. 17. Static Content


a. Performance Considerations
b. Content Delivery Networks
c. Designing for CDNs
i. Server-Rendered Website
ii. Single-Page Applications

d. Caching Static Assets


e. Changing Your Static Content
f. Conclusion
19. 18. Security

a. HTTPS

i. Generating Your Own Certificate


ii. Using a Free Certificate Authority
iii. Purchasing a Certificate
iv. Enabling HTTPS for Your Express App
v. A Note on Ports
vi. HTTPS and Proxies
b. Cross-Site Request Forgery
c. Authentication

i. Authentication Versus Authorization


ii. The Problem with Passwords
iii. Third-Party Authentication
iv. Storing Users in Your Database
v. Authentication Versus Registration and the
User Experience
vi. Passport
vii. Role-Based Authorization
viii. Adding Authentication Providers

d. Conclusion
20. 19. Integrating with Third-Party APIs
a. Social Media

i. Social Media Plugins and Site Performance


ii. Searching for Tweets
iii. Rendering Tweets

b. Geocoding

i. Geocoding with Google


ii. Geocoding Your Data
iii. Displaying a Map

c. Weather Data
d. Conclusion
21. 20. Debugging

a. The First Principle of Debugging


b. Take Advantage of REPL and the Console
c. Using Node’s Built-in Debugger
d. Node Inspector Clients
e. Debugging Asynchronous Functions
f. Debugging Express
g. Conclusion

22. 21. Going Live


a. Domain Registration and Hosting
i. Domain Name System
ii. Security
iii. Top-Level Domains
iv. Subdomains
v. Nameservers
vi. Hosting
vii. Deployment

b. Conclusion
23. 22. Maintenance

a. The Principles of Maintenance

i. Have a Longevity Plan


ii. Use Source Control
iii. Use an Issue Tracker
iv. Exercise Good Hygiene
v. Don’t Procrastinate
vi. Do Routine QA Checks
vii. Monitor Analytics
viii. Optimize Performance
ix. Prioritize Lead Tracking
x. Prevent “Invisible” Failures

b. Code Reuse and Refactoring


i. Private npm Registry
ii. Middleware
c. Conclusion

24. 23. Additional Resources


a. Online Documentation
b. Periodicals
c. Stack Overflow
d. Contributing to Express
e. Conclusion

25. Index
Web Development with
Node and Express
Leveraging the JavaScript Stack

SECOND EDITION

Ethan Brown
Web Development with Node and Express

by Ethan Brown

Copyright © 2020 Ethan Brown. 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). For more information, contact our
corporate/institutional sales department: 800-998-9938 or
corporate@oreilly.com.

Acquisitions Editor: Jennifer Pollock

Developmental Editor: Angela Rufino

Production Editor: Nan Barber

Copyeditor: Kim Wimpsett

Proofreader: Sharon Wilkey

Indexer: WordCo Indexing Services, Inc.

Interior Designer: David Futato

Cover Designer: Karen Montgomery


Illustrator: Rebecca Demarest

November 2019: Second Edition


Revision History for the Second Edition
2019-11-12: First Release

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


details.

The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Web


Development with Node and Express, the cover image, and related trade
dress are trademarks of O’Reilly Media, Inc.

The views expressed in this work are those of the author, and do not
represent the publisher’s views. 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-492-05351-4

[LSI]
Dedication

This book is dedicated to my family:

My father, Tom, who gave me a love of engineering; my mother, Ann,


who gave me a love of writing; and my sister, Meris, who has been a
constant companion.
Preface
Who This Book Is For
This book is for programmers who want to create web applications
(traditional websites; single-page applications with React, Angular, or
Vue; REST APIs; or anything in between) using JavaScript, Node, and
Express. One of the exciting aspects of Node development is that it has
attracted a whole new audience of programmers. The accessibility and
flexibility of JavaScript have attracted self-taught programmers from all
over the world. At no time in the history of computer science has
programming been so accessible. The number and quality of online
resources for learning to program (and getting help when you get stuck) is
truly astonishing and inspiring. So to those new (possibly self-taught)
programmers, I welcome you.

Then, of course, there are the programmers like me, who have been
around for a while. Like many programmers of my era, I started off with
assembler and BASIC and went through Pascal, C++, Perl, Java, PHP,
Ruby, C, C#, and JavaScript. At university, I was exposed to more niche
languages such as ML, LISP, and PROLOG. Many of these languages are
near and dear to my heart, but in none of these languages do I see so much
promise as I do in JavaScript. So I am also writing this book for
programmers like myself, who have a lot of experience and perhaps a
more philosophical outlook on specific technologies.

No experience with Node is necessary, but you should have some


experience with JavaScript. If you’re new to programming, I recommend
Codecademy. If you’re an intermediate or experienced programmer, I
recommend my own book, Learning JavaScript, 3rd Edition (O’Reilly).
The examples in this book can be used with any system that Node works
on (which covers Windows, macOS, and Linux, among others). The
examples are geared toward command-line (terminal) users, so you should
have some familiarity with your system’s terminal.

Most important, this book is for programmers who are excited. Excited
about the future of the internet and want to be part of it. Excited about
learning new things, new techniques, and new ways of looking at web
development. If, dear reader, you are not excited, I hope you will be by the
time you reach the end of this book….

Notes on the Second Edition


It was a joy to write the first edition of this book, and I am to this day
pleased with the practical advice I was able to put into it and the warm
response of my readers. The first edition was published just as Express 4.0
was released from beta, and while Express is still on version 4.x, the
middleware and tools that go along with Express have undergone massive
changes. Furthermore, JavaScript itself has evolved, and even the way
web applications are designed has undergone a tectonic shift (away from
pure server-side rendering and toward single-page applications [SPAs]).
While many of the principles in the first edition are still useful and valid,
the specific techniques and tools are almost completely different. A new
edition is overdue. Because of the ascendancy of SPAs, the focus of this
second edition has also shifted to place more emphasis on Express as a
server for APIs and static assets, and it includes an SPA example.
How This Book Is Organized
Chapter 1 and Chapter 2 will introduce you to Node and Express and some
of the tools you’ll be using throughout the book. In Chapter 3 and
Chapter 4, you start using Express and build the skeleton of a sample
website that will be used as a running example throughout the rest of the
book.

Chapter 5 discusses testing and QA, and Chapter 6 covers some of Node’s
more important constructs and how they are extended and used by
Express. Chapter 7 covers templating (using Handlebars), which lays the
foundation of building useful websites with Express. Chapter 8 and
Chapter 9 cover cookies, sessions, and form handlers, rounding out the
things you need to know to build basic functional websites with Express.

Chapter 10 delves into middleware, a concept central to Express.


Chapter 11 explains how to use middleware to send email from the server
and discusses security and layout issues inherent to email.

Chapter 12 offers a preview into production concerns. Even though at this


stage in the book you don’t have all the information you need to build a
production-ready website, thinking about production now can save you
from major headaches in the future.

Chapter 13 is about persistence, with a focus on MongoDB (one of the


leading document databases) and PostgreSQL (a popular open-source
relational database management system).

Chapter 14 gets into the details of routing with Express (how URLs are
mapped to content), and Chapter 15 takes a diversion into writing APIs
with Express. Chapter 17 covers the details of serving static content, with
a focus on maximizing performance.

Chapter 18 discusses security: how to build authentication and


authorization into your app (with a focus on using a third-party
authentication provider), as well as how to run your site over HTTPS.

Chapter 19 explains how to integrate with third-party services. Examples


used are Twitter, Google Maps, and the US National Weather Service.

Chapter 16 takes what we’ve learned about Express and uses it to refactor
the running example as an SPA, with Express as the backend server
providing the API we created in Chapter 15.

Chapter 20 and Chapter 21 get you ready for the big day: your site launch.
They cover debugging, so you can root out any defects before launch, and
the process of going live. Chapter 22 talks about the next important (and
oft-neglected) phase: maintenance.

The book concludes with Chapter 23, which points you to additional
resources, should you want to further your education about Node and
Express, and where you can go to get help.

Example Website
Starting in Chapter 3, a running example will be used throughout the
book: the Meadowlark Travel website. I wrote the first edition just after
getting back from a trip to Lisbon, and I had travel on my mind, so the
example website I chose is for a fictional travel company in my home state
of Oregon (the Western Meadowlark is the state songbird of Oregon).
Meadowlark Travel allows travelers to connect to local “amateur tour
guides,” and it partners with companies offering bike and scooter rentals
and local tours, with a focus on ecotourism.

Like any pedagogical example, the Meadowlark Travel website is


contrived, but it is an example that covers many of the challenges facing
real-world websites: third-party component integration, geolocation,
ecommerce, performance, and security.

As the focus on this book is backend infrastructure, the example website


will not be complete; it merely serves as a fictional example of a real-
world website to provide depth and context to the examples. Presumably,
you are working on your own website, and you can use the Meadowlark
Travel example as a template for it.

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.

TIP
This element signifies a tip or suggestion.

NOTE
This element signifies a general note.

WARNING
This element indicates a warning or caution.

Using Code Examples


Supplemental material (code examples, exercises, etc.) is available for
download at https://github.com/EthanRBrown/web-development-with-
node-and-express-2e.

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: “Web
Development with Node and Express, Second Edition by Ethan Brown
(O’Reilly). Copyright 2019 Ethan Brown, 978-1-492-05351-4.”

If you feel your use of code examples falls outside fair use or the
permission given here, feel free to contact us at permissions@oreilly.com.

O’Reilly Online Learning

NOTE
For almost 40 years, O’Reilly Media has provided technology and business training, knowledge,
and insight to help companies succeed.

Our unique network of experts and innovators share their knowledge and
expertise through books, articles, conferences, and our online learning
platform. O’Reilly’s online learning platform gives you on-demand access
to live training courses, in-depth learning paths, interactive coding
environments, and a vast collection of text and video from O’Reilly and
200+ other publishers. For more information, please visit
http://oreilly.com.

How to Contact Us
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
https://oreil.ly/web_dev_node_express_2e.

To comment or ask technical questions about this book, send email to


bookquestions@oreilly.com.

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
Acknowledgments
So many people in my life have played a part in making this book a
reality; it would not have been possible without the influence of all the
people who have touched my life and made me who I am today.

I would like to start out by thanking everyone at Pop Art: not only has my
time at Pop Art given me a renewed passion for engineering, but I have
learned so much from everyone there, and without their support, this book
would not exist. I am grateful to Steve Rosenbaum for creating an
inspiring place to work, and to Del Olds for bringing me on board, making
me feel welcome, and being an honorable leader. Thanks to Paul Inman
for his unwavering support and inspiring attitude toward engineering, and
Tony Alferez for his warm support and for helping me carve out time for
writing without impacting Pop Art. Finally, thanks to all the great
engineers I have worked with, who keep me on my toes: John Skelton,
Dylan Hallstrom, Greg Yung, Quinn Michaels, CJ Stritzel, Colwyn Fritze-
Moor, Diana Holland, Sam Wilskey, Cory Buckley, and Damion Moyer.

I owe a great debt of gratitude to my current team at Value Management


Strategies, Inc. I have learned so much about the business side of software
from Robert Stewart and Greg Brink, and so much about team
communication, cohesion, and effectiveness from Ashley Carson (thanks
for your unwavering support, Scratch Chromatic). Terry Hays, Cheryl
Kramer, and Eric Trimble, thank you all for your hard work and support!
And thanks to Damon Yeutter, Tyler Brenton, and Brad Wells for their
critical work on requirements analysis and project management. Most
importantly, thank you to the talented and dedicated developers who have
worked with me—tirelessly—at VMS: Adam Smith, Shane Ryan, Jeremy
Loss, Dan Mace, Michael Meow, Julianne Soifer, Matt Nakatani, and Jake
Feldmann.
Thanks to all of my bandmates at School of Rock! What a crazy journey
it’s been and what a joyful creative outlet to have. Special thanks to the
instructors who share their passion and knowledge of music: Josh Thomas,
Amanda Sloane, Dave Coniglio, Dan Lee, Derek Blackstone, and Cory
West. Thank you all for giving me the opportunity to be a rock star!

Zach Mason, thank you for being an inspiration to me. This book may be
no The Lost Books of the Odyssey, but it is mine, and I don’t know if I
would have been so bold without your example.

Elizabeth and Ezra, thank you for the gifts you both gave me. I will love
you both forever.

I owe everything to my family. I couldn’t have wished for a better, more


loving education than the one they gave me, and I see their exceptional
parenting reflected in my sister too.

Many thanks to Simon St. Laurent for giving me this opportunity, and to
Angela Rufino (second edition) and Brian Anderson (first edition) for their
steady and encouraging editing. Thanks to everyone at O’Reilly for their
dedication and passion. Thanks to Alejandra Olvera-Novack, Chetan
Karande, Brian Sletten, Tamas Piros, Jennifer Pierce, Mike Wilson, Ray
Villalobos, and Eric Elliot for their thorough and constructive technical
reviews.

Katy Roberts and Hanna Nelson provided invaluable feedback and advice
on my “over the transom” proposal that made this book possible. Thank
you both so much! Thanks to Chris Cowell-Shah for his excellent
feedback on the QA chapter.

Lastly, thanks to my dear friends, without whom I surely would have gone
Another Random Scribd Document
with Unrelated Content
*** END OF THE PROJECT GUTENBERG EBOOK
AARTEENKAIVAJAT ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying copyright
royalties. Special rules, set forth in the General Terms of Use part of
this license, apply to copying and distributing Project Gutenberg™
electronic works to protect the PROJECT GUTENBERG™ concept
and trademark. Project Gutenberg is a registered trademark, and
may not be used if you charge for an eBook, except by following the
terms of the trademark license, including paying royalties for use of
the Project Gutenberg trademark. If you do not charge anything for
copies of this eBook, complying with the trademark license is very
easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund from
the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law in
the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name
associated with the work. You can easily comply with the terms of
this agreement by keeping this work in the same format with its
attached full Project Gutenberg™ License when you share it without
charge with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the terms
of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears, or
with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning of
this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1 with
active links or immediate access to the full terms of the Project
Gutenberg™ License.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or expense
to the user, provide a copy, a means of exporting a copy, or a means
of obtaining a copy upon request, of the work in its original “Plain
Vanilla ASCII” or other form. Any alternate format must include the
full Project Gutenberg™ License as specified in paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive from
the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt that
s/he does not agree to the terms of the full Project Gutenberg™
License. You must require such a user to return or destroy all
copies of the works possessed in a physical medium and
discontinue all use of and all access to other copies of Project
Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except


for the “Right of Replacement or Refund” described in paragraph
1.F.3, the Project Gutenberg Literary Archive Foundation, the owner
of the Project Gutenberg™ trademark, and any other party
distributing a Project Gutenberg™ electronic work under this
agreement, disclaim all liability to you for damages, costs and
expenses, including legal fees. YOU AGREE THAT YOU HAVE NO
REMEDIES FOR NEGLIGENCE, STRICT LIABILITY, BREACH OF
WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE
FOUNDATION, THE TRADEMARK OWNER, AND ANY
DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE
TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL,
PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE
NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of receiving it,
you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or entity
that provided you with the defective work may elect to provide a
replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.

1.F.4. Except for the limited right of replacement or refund set forth in
paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.

1.F.5. Some states do not allow disclaimers of certain implied


warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.

1.F.6. INDEMNITY - You agree to indemnify and hold the


Foundation, the trademark owner, any agent or employee of the
Foundation, anyone providing copies of Project Gutenberg™
electronic works in accordance with this agreement, and any
volunteers associated with the production, promotion and distribution
of Project Gutenberg™ electronic works, harmless from all liability,
costs and expenses, including legal fees, that arise directly or
indirectly from any of the following which you do or cause to occur:
(a) distribution of this or any Project Gutenberg™ work, (b)
alteration, modification, or additions or deletions to any Project
Gutenberg™ work, and (c) any Defect you cause.

Section 2. Information about the Mission of


Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.

Volunteers and financial support to provide volunteers with the


assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.
Section 3. Information about the Project
Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.

The Foundation’s business office is located at 809 North 1500 West,


Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact

Section 4. Information about Donations to


the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many small
donations ($1 to $5,000) are particularly important to maintaining tax
exempt status with the IRS.

The Foundation is committed to complying with the laws regulating


charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states where


we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot make


any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.

Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.

Section 5. General Information About Project


Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.

Project Gutenberg™ eBooks are often created from several printed


editions, all of which are confirmed as not protected by copyright in
the U.S. unless a copyright notice is included. Thus, we do not
necessarily keep eBooks in compliance with any particular paper
edition.

Most people start at our website which has the main PG search
facility: www.gutenberg.org.

This website includes information about Project Gutenberg™,


including how to make donations to the Project Gutenberg Literary
Archive Foundation, how to help produce our new eBooks, and how
to subscribe to our email newsletter to hear about new eBooks.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like