Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (1 vote)
164 views

Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring, 2nd Edition John F. Dooley 2024 scribd download

Dooley

Uploaded by

zankodrage1r
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
164 views

Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring, 2nd Edition John F. Dooley 2024 scribd download

Dooley

Uploaded by

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

Download the Full Version of textbook for Fast Typing at textbookfull.

com

Software Development, Design and Coding: With


Patterns, Debugging, Unit Testing, and
Refactoring, 2nd Edition John F. Dooley

https://textbookfull.com/product/software-development-
design-and-coding-with-patterns-debugging-unit-testing-and-
refactoring-2nd-edition-john-f-dooley/

OR CLICK BUTTON

DOWNLOAD NOW

Download More textbook Instantly Today - Get Yours Now at textbookfull.com


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

Software Development, Design and Coding: With Patterns,


Debugging, Unit Testing, and Refactoring, 2nd Edition John
F. Dooley
https://textbookfull.com/product/software-development-design-and-
coding-with-patterns-debugging-unit-testing-and-refactoring-2nd-
edition-john-f-dooley/
textboxfull.com

Software Development, Design and Coding 2nd Edition John


F. Dooley

https://textbookfull.com/product/software-development-design-and-
coding-2nd-edition-john-f-dooley/

textboxfull.com

Learn With Angular 4 Collected Essays Angular CLI Unit


Testing Debugging TypeScript and Angular Build Processes
2nd Edition Jeffry Houser
https://textbookfull.com/product/learn-with-angular-4-collected-
essays-angular-cli-unit-testing-debugging-typescript-and-angular-
build-processes-2nd-edition-jeffry-houser/
textboxfull.com

Unit Testing Principles, Practices, and Patterns 1st


Edition Vladimir Khorikov

https://textbookfull.com/product/unit-testing-principles-practices-
and-patterns-1st-edition-vladimir-khorikov/

textboxfull.com
JavaScript Patterns Build Better Applications with Coding
and Design Patterns 1st Edition Stefanov Stoyan

https://textbookfull.com/product/javascript-patterns-build-better-
applications-with-coding-and-design-patterns-1st-edition-stefanov-
stoyan/
textboxfull.com

Microprocessor 5 Software and Hardware Aspects of


Development Debugging and Testing The Microcomputer 1st
Edition Philippe Darche
https://textbookfull.com/product/microprocessor-5-software-and-
hardware-aspects-of-development-debugging-and-testing-the-
microcomputer-1st-edition-philippe-darche/
textboxfull.com

Design Patterns in .NET Core 3: Reusable Approaches in C#


and F# for Object-Oriented Software Design 2nd Edition
Dmitri Nesteruk
https://textbookfull.com/product/design-patterns-in-net-
core-3-reusable-approaches-in-c-and-f-for-object-oriented-software-
design-2nd-edition-dmitri-nesteruk/
textboxfull.com

History of Cryptography and Cryptanalysis Codes Ciphers


and Their Algorithms 2018th Edition John F. Dooley

https://textbookfull.com/product/history-of-cryptography-and-
cryptanalysis-codes-ciphers-and-their-algorithms-2018th-edition-john-
f-dooley/
textboxfull.com

Making Embedded Systems: Design Patterns for Great


Software, 2nd Edition Elecia White

https://textbookfull.com/product/making-embedded-systems-design-
patterns-for-great-software-2nd-edition-elecia-white/

textboxfull.com
John F. Dooley

Software Development, Design and


Coding
With Patterns, Debugging, Unit Testing,
and Refactoring
2nd ed.
John F. Dooley
Galesburg, Illinois, USA

Any source code or other supplementary material referenced by the


author in this book is available to readers on GitHub via the book’s
product page, located at www.apress.com/9781484231524 . For
more detailed information, please visit www.apress.com/source-
code .

ISBN 978-1-4842-3152-4 e-ISBN 978-1-4842-3153-1


https://doi.org/10.1007/978-1-4842-3153-1

Library of Congress Control Number: 2017961306

© John F. Dooley 2017

This work is subject to copyright. All rights are solely and exclusively
licensed by the Publisher, whether the whole or part of the material
is concerned, specifically the rights of translation, reprinting, reuse
of illustrations, recitation, broadcasting, reproduction on microfilms
or in any other physical way, and transmission or information storage
and retrieval, electronic adaptation, computer software, or by similar
or dissimilar methodology now known or hereafter developed.

Trademarked names, logos, and images may appear in this book.


Rather than use a trademark symbol with every occurrence of a
trademarked name, logo, or image we use the names, logos, and
images only in an editorial fashion and to the benefit of the
trademark owner, with no intention of infringement of the
trademark. The use in this publication of trade names, trademarks,
service marks, and similar terms, even if they are not identified as
such, is not to be taken as an expression of opinion as to whether or
not they are subject to proprietary rights.

While the advice and information in this book are believed to be true
and accurate at the date of publication, neither the authors nor the
editors nor the publisher can accept any legal responsibility for any
errors or omissions that may be made. The publisher makes no
warranty, express or implied, with respect to the material contained
herein.

Printed on acid-free paper

Distributed to the book trade worldwide by Springer


Science+Business Media New York, 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505,
e-mail orders-ny@springer-sbm.com, or visit
www.springeronline.com. Apress Media, LLC is a California LLC and
the sole member (owner) is Springer Science + Business Media
Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For Diane, who is always there, and for Patrick, the best son a guy
could have.
Preface
What’s this book all about? Well, it’s about how to develop software
from a personal perspective. We’ll look at what it means for you to
take a problem and produce a program to solve it from beginning to
end. That said, this book focuses a lot on design. How do you design
software? What things do you take into account? What makes a
good design? What methods and processes are there to help you
design software? Is designing small programs different from
designing large ones? How can you tell a good design from a bad
one? What general patterns can you use to help make your design
more readable and understandable?
It’s also about code construction. How do you write programs
and make them work? “What?” you say. “I’ve already written eight
gazillion programs! Of course I know how to write code!” Well, in
this book, we’ll explore what you already do and investigate ways to
improve on that. We’ll spend some time on coding standards,
debugging, unit testing, modularity, and characteristics of good
programs. We’ll also talk about reading code, what makes a program
readable, and how to review code that others have written with an
eye to making it better. Can good, readable code replace
documentation? How much documentation do you really need?
And it’s about software engineering, which is usually defined as
“the application of engineering principles to the development of
software.” What are engineering principles ? Well, first, all
engineering efforts follow a defined process . So we’ll be spending a
bit of time talking about how you run a software development
project and what phases there are to a project. We’ll talk a lot about
agile methodologies, how they apply to small development teams
and how their project management techniques work for small- to
medium-sized projects. All engineering work has a basis in the
application of science and mathematics to real-world problems. So
does software development. As I’ve said already, we’ll be spending a
lot of time examining how to design and implement programs that
solve specific problems.
By the way, there’s at least one other person (besides me) who
thinks software development is not an engineering discipline. I’m
referring to Alistair Cockburn, and you can read his paper, “The End
of Software Engineering and the Start of Economic-Cooperative
Gaming,” at
http://alistair.cockburn.us/The+end+of+software+en
gineering+and+the+start+of+economic-
cooperative+gaming .
Finally, this book is about professional practice, the ethics and
the responsibilities of being a software developer, social issues,
privacy, how to write secure and robust code, and the like. In short,
those fuzzy other things that one needs in order to be a professional
software developer.
This book covers many of the topics described for the ACM/IEEE
Computer Society Curriculum Guidelines for Undergraduate Degree
Programs in Computer Science (known as CS2013). 1 In particular, it
covers topics in a number of the Knowledge Areas of the Guidelines,
including Software Development Fundamentals, Software
Engineering, Systems Fundamentals, Parallel and Distributed
Computing, Programming Languages, and Social Issues and
Professional Practice. It’s designed to be both a textbook for a
junior-level undergraduate course in software design and
development and a manual for the working professional. Although
the chapter order generally follows the standard software
development sequence, one can read the chapters independently
and out of order. I’m assuming that you already know how to
program and that you’re conversant with at least one of these
languages: Java, C, or C++. I’m also assuming you’re familiar with
basic data structures, including lists, queues, stacks, maps, and
trees, along with the algorithms to manipulate them.
In this second edition, most of the chapters have been updated,
some new examples have been added, and the book discusses
modern software development processes and techniques. Much of
the plan-driven process and project-management discussions from
the first edition have been removed or shortened, and longer and
new discussions of agile methodologies, including Scrum, Lean
Software Development, and Kanban have taken their place. There
are new chapters on parallel programming and parallel design
patterns, and a new chapter on ethics and professional practice.
I use this book in a junior-level course in software development.
It’s grown out of the notes I’ve developed for that class over the
past 12 years. I developed my own notes because I couldn’t find a
book that covered all the topics I thought were necessary for a
course in software development, as opposed to one in software
engineering. Software engineering books tend to focus more on
process and project management than on design and actual
development. I wanted to focus on the design and writing of real
code rather than on how to run a large project. Before beginning to
teach, I spent nearly 18 years in the computer industry, working for
large and small companies, writing software, and managing other
people who wrote software. This book is my perspective on what it
takes to be a software developer on a small- to medium-sized team
and help develop great software.
I hope that by the end of the book you’ll have a much better idea
of what the design of good programs is like, what makes an effective
and productive developer, and how to develop larger pieces of
software. You’ll know a lot more about design issues. You’ll have
thought about working in a team to deliver a product to a written
schedule. You’ll begin to understand project management, know
some metrics and how to review work products, and understand
configuration management. I’ll not cover everything in software
development—not by a long stretch—and we’ll only be giving a
cursory look at the management side of software engineering, but
you’ll be in a much better position to visualize, design, implement,
and test software of many sizes, either by yourself or in a team.
Acknowledgments
I’d like to thank Todd Green of Apress for encouraging me and
making this book possible. The staff at Apress, especially Jill Balzano
and Michael Thomas, have been very helpful and gracious. The book
is much better for their reviews, comments, and edits.
Thanks also to all my students in CS 292 over the last 12 years,
who have put up with successive versions of the course notes that
became this book, and to my CS department colleagues David Bunde
and Jaime Spacco, who put up with me for all these years. And my
thanks also go to Knox College for giving me the time and resources
to finish both editions of this book.
Finally, I owe everything to Diane, who hates that I work nights,
but loves that I can work at home.
Contents
Chapter 1:​Introduction to Software Development

What We’re Doing

So, How to Develop Software?​

Conclusion

References

Chapter 2:​Software Process Models

The Four Variables

A Model That’s not a Model At All:​Code and Fix

Cruising over the Waterfall

Iterative Models

Evolving the Iterative Model

Risk:​The Problem with Plan-Driven Models

Agile Methodologies

Agile Values and Principles

eXtreme Programming (XP)

XP Overview

The Four Basic Activities

Implementing XP:​The 12 Practices


Scrum

Scrum Roles

The Sprint

Scrum Artifacts

Sprint Flow

Lean Software Development

Principle 1:​Eliminate Waste

Principle 2:​Build Quality In

Principle 3:​Create Knowledge

Principle 4:​Defer Commitment

Principle 5:​Deliver Fast

Principle 6:​Respect People

Principle 7:​Optimize the Whole

Kanban

The Kanban board, WIP, and Flow

Lead Time

Conclusion

References

Chapter 3:​Project Management Essentials

Project Planning
Project Organization

Risk Analysis

Resource Requirements

Task Estimates

Project Schedule

Velocity

Project Oversight

Status Reviews and Presentations

Defects

The Retrospective

Conclusion

References

Chapter 4:​Requirements

What Types of Requirements Are We Talking About?​

User Requirements

Domain Requirements

Non-Functional Requirements

Non-Requirements

Requirements Gathering in a Plan-Driven Project

But I Don’t Like Writing!


Outline of a Functional Specification

Design and New Feature Ideas

One More Thing

Requirements Gathering in an Agile Project

The Three Cs

INVEST in Stories

Product Backlog

SMART Tasks

Sprint/​Iteration Backlog

Requirements Digging

Why Requirements Digging Is Hard

Analyzing the Requirements

Conclusion

References

Chapter 5:​Software Architecture

General Architectural Patterns

The Main Program—Subroutine Architectural Pattern

Pipe-and-Filter Architecture

An Object-Oriented Architectural Pattern

An MVC Example:​Let’s Hunt!


The Client-Server Architectural Pattern

The Layered Approach

Conclusion

References

Chapter 6:​Design Principles

The Design Process

Desirable Design Characteristics (Things Your Design


Should Favor)

Design Heuristics

Designers and Creativity

Conclusion

References

Chapter 7:​Structured Design

Structured Programming

Stepwise Refinement

Example of Stepwise Refinement:​The Eight-Queens


Problem

Modular Decomposition

Example:​Keyword in Context

Conclusion

References
Chapter 8:​Object-Oriented Overview

An Object-Oriented Analysis and Design Process

Requirements Gathering and Analysis

Design

Implementation and Testing

Release/​Maintenance/​Evolution

Doing the Process

The Problem Statement

The Feature List

Use Cases

Decompose the Problem

Class Diagrams

Code Anyone?​

Conclusion

References

Chapter 9:​Object-Oriented Analysis and Design

Analysis

An Analytical Example

Design

Change in the Right Direction


Recognizing Change

Songbirds Forever

A New Requirement

Separating Analysis and Design

Shaping the Design

Abstraction

Conclusion

References

Chapter 10:​Object-Oriented Design Principles

List of Fundamental Object-Oriented Design Principles

Encapsulate Things in Your Design That Are Likely to


Change

Code to an Interface Rather Than to an Implementation

The Open-Closed Principle

The Don’t Repeat Yourself Principle

The Single Responsibility Principle

The Liskov Substitution Principle

The Dependency Inversion Principle

The Interface Segregation Principle

The Principle of Least Knowledge


Class Design Guidelines

Conclusion

References

Chapter 11:​Design Patterns

Design Patterns and the Gang of Four

The Classic Design Patterns

Patterns We Can Use

Creational Patterns

Structural Patterns

Behavioral Patterns

Conclusion

References

Chapter 12:​Parallel Programming

Concurrency vs.​Parallelism

Parallel Computers

Flynn’s Taxonomy

Parallel Programming

Scalability

Performance

Obstacles to Performance Improvement


How to Write a Parallel Program

Parallel Programming Models

Designing Parallel Programs

Parallel Design Techniques

Programming Languages and APIs (with examples)

Parallel Language Features

Java Threads

OpenMP

The Last Word on Parallel Programming

References

Chapter 13:​Parallel Design Patterns

Parallel Patterns Overview

Parallel Design Pattern Design Spaces

A List of Parallel Patterns

Embarrassingly Parallel

Master/​Worker

Map and Reduce

MapReduce

Divide &​Conquer

Fork/​Join
A Last Word on Parallel Design Patterns

References

Chapter 14:​Code Construction

A Coding Example

Functions and Methods and Size

Formatting, Layout, and Style

General Layout Issues and Techniques

White Space

Block and Statement Style Guidelines

Declaration Style Guidelines

Commenting Style Guidelines

Identifier Naming Conventions

Refactoring

When to Refactor

Types of Refactoring

Defensive Programming

Assertions Are Helpful

Exceptions

Error Handling

Exceptions in Java
The Last Word on Coding

References

Chapter 15:​Debugging

What Is an Error, Anyway?​

What Not To Do

An Approach to Debugging

Reproduce the Problem Reliably

Find the Source of the Error

Fix the Error (Just That One)!

Test the Fix

Look for More Errors

Source Code Control

The Collision Problem

Source Code Control Systems

One Last Thought on Coding and Debugging:​Pair


Programming

Conclusion

References

Chapter 16:​Unit Testing

The Problem with Testing


That Testing Mindset

When to Test?​

Testing in an Agile Development Environment

What to Test?​

Code Coverage:​Test Every Statement

Data Coverage:​Bad Data Is Your Friend?​

Characteristics of Tests

How to Write a Test

The Story

The Tasks

The Tests

JUnit:​A Testing Framework

Testing Is Good

Conclusion

References

Chapter 17:​Code Reviews and Inspections

Walkthroughs, Reviews, and Inspections

Walkthroughs

Code Reviews

Code Inspections
Inspection Roles

Inspection Phases and Procedures

Reviews in Agile Projects

How to Do an Agile Peer Code Review

Summary of Review Methodologies

Defect Tracking Systems

Defect Tracking in Agile Projects

Conclusion

References

Chapter 18:​Ethics and Professional Practice

Introduction to Ethics

Ethical Theory

Deontological Theories

Consequentialism​(Teleological Theories)

Ethical Drivers

Legal Drivers

Professional Drivers

Ethical Discussion and Decision Making

Identifying and Describing the Problem

Analyzing the Problem


Case Studies

#1 Copying Software

#2 Who’s Computer Is It?​

#3 How Much Testing Is Enough?​

#4 How Much Should You Tell?​

The Last Word on Ethics?​

References

The ACM Code of Ethics and Professional Conduct

Preamble

Contents &​Guidelines

The ACM/​IEEE-CS Software Engineering Code of Ethics

PREAMBLE

PRINCIPLES

Chapter 19:​Wrapping It all Up

What Have You Learned?​

What to Do Next?​

References

Index
About the Author and About the
Technical Reviewer
About the Author
John F. Dooley
is the William and Marilyn Ingersoll Emeritus
Professor of Computer Science at Knox
College in Galesburg, Illinois. Before
returning to teaching in 2001, Professor
Dooley spent nearly 18 years in the software
industry as a developer, designer, and
manager working for companies such as Bell
Telephone Laboratories, McDonnell Douglas,
IBM, and Motorola, along with an obligatory
stint as head of development at a software
startup. He has more than two dozen professional journal and
conference publications and four books to his credit, along with
numerous presentations. He has been a reviewer for the Association
for Computing Machinery Special Interest Group on Computer
Science Education (SIGCSE) Technical Symposium for the last 36
years and reviews papers for the IEEE Transactions on Education,
the ACM Innovation and Technology in Computer Science Education
(ITiCSE) Conference, and other professional conferences. He has
developed short courses in software development and created three
separate software engineering courses at the advanced
undergraduate level.

About the Technical Reviewer


Michael Thomas
has worked in software development for more than 20 years as an
individual contributor, team lead, program manager, and vice
president of engineering. Michael has more than ten years
experience working with mobile devices. His current focus is in the
medical sector using mobile devices to accelerate information
transfer between patients and healthcare providers.
Footnotes
1 The Joint Task Force on Computing Education. 2013. “Computer Science Curricula
2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer
Science.” New York, NY: ACM/IEEE Computer Society.
www.acm.org/education/CS2013-final-report.pdf .
© John F. Dooley 2017
John F. Dooley, Software Development, Design and Coding,
https://doi.org/10.1007/978-1-4842-3153-1_1

1. Introduction to Software Development


John F. Dooley1
(1) Galesburg, Illinois, USA

“Not only are there no silver bullets now in view, the very nature
of software makes it unlikely that there will be any—no
inventions that will do for software productivity, reliability, and
simplicity what electronics, transistors, and large-scale
integration did for computer hardware. We cannot expect ever
to see twofold gains every two years.”
— Frederick J. Brooks, Jr.1

So, you’re asking yourself, why is this book called Software


Development, Design and Coding? Why isn’t it called All About
Programming or Software Engineering? After all, isn’t that what
software development is? Well, no. Programming is a part of
software development, but it’s certainly not all of it. Likewise,
software development is a part of software engineering , but it’s not
all of it.
Here’s the definition of software development that we’ll use in
this book: software development is the process of taking a set of
requirements from a user (a problem statement), analyzing them,
designing a solution to the problem, and then implementing that
solution on a computer.
Isn’t that programming, you ask? No. Programming is really the
implementation part, or possibly the design and implementation
part, of software development. Programming is central to software
development, but it’s not the whole thing.
Well, then, isn’t it software engineering? Again, no. Software
engineering also involves a process and includes software
development, but it also includes the entire management side of
creating a computer program that people will use, including project
management, configuration management, scheduling and
estimation, baseline building and scheduling, managing people, and
several other things. Software development is the fun part of
software engineering.
So, software development is a narrowing of the focus of software
engineering to just that part concerned with the creation of the
actual software. And it’s a broadening of the focus of programming
to include analysis, design, and release issues.

What We’re Doing


It turns out that, after 70 or so years of using computers, we’ve
discovered that developing software is hard. Learning how to
develop software correctly, efficiently, and beautifully is also hard.
You’re not born knowing how to do it, and many people, even those
who take programming courses and work in the industry for years,
don’t do it particularly well. It’s a skill you need to pick up and
practice—a lot. You don’t learn programming and development by
reading books—not even this one. You learn it by doing it. That, of
course, is the attraction: to work on interesting and difficult
problems. The challenge is to work on something you’ve never done
before, something you might not even know if you can solve. That’s
what has you coming back to create new programs again and again.
There are probably several ways to learn software development.
But I think that all of them involve reading excellent designs, reading
a lot of code, writing a lot of code, and thinking deeply about how
you approach a problem and design a solution for it. Reading a lot of
code, especially really beautiful and efficient code, gives you lots of
good examples about how to think about problems and approach
their solution in a particular style. Writing a lot of code lets you
experiment with the styles and examples you’ve seen in your
reading. Thinking deeply about problem solving lets you examine
how you work and how you do design, and lets you extract from
your labors those patterns that work for you; it makes your
programming more intentional.

So, How to Develop Software?


The first thing you should do is read this book. It certainly won’t tell
you everything, but it will give you a good introduction into what
software development is all about and what you need to do to write
great code. It has its own perspective, but that’s a perspective based
on 20 years writing code professionally and another 22 years trying
to figure out how to teach others to do it.
Despite the fact that software development is only part of
software engineering , software development is the heart of every
software project. After all, at the end of the day what you deliver to
the user is working code. A team of developers working in concert
usually creates that code. So, to start, maybe we should look at a
software project from the outside and ask what does that team need
to do to make that project a success?
In order to do software development well, you need the
following:
A small, well-integrated team : Small teams have fewer lines of
communication than larger ones. It’s easier to get to know your
teammates on a small team. You can get to know their
strengths and weaknesses, who knows what, and who is the
“go-to” person for particular problems or particular tools. Well-
integrated teams have usually worked on several projects
together. Keeping a team together across several projects is a
major job of the team’s manager. Well-integrated teams are
more productive, are better at holding to a schedule, and
produce code with fewer defects at release. The key to keeping
Exploring the Variety of Random
Documents with Different Content
Úrsula, desposada y virgen pura,
mostraba su figura, en una pieza 1485
pintada su cabeza. Allí se vía
que los ojos volvía ya espirando;
y estábate mirando aquel tirano[186]
que con acerba mano llevó a hecho
de tierno en tierno pecho tu compaña. 1490
Por la fiera Alemaña de aquí parte
el Duque, a aquella parte enderezado
donde el cristiano estado estaba en dubio.[187]
En fin al gran Danubio se encomienda;
por él suelta la rienda a su navío,[188] 1495
que con poco desvío de la tierra,
entre una y otra sierra el agua hiende.
El remo, que deciende en fuerza suma,
mueve la blanca espuma como argento.
El veloz movimiento parecía 1500
que pintado se vía ante los ojos.
Con amorosos ojos adelante
Carlo, César triunfante, le abrazaba
cuando desembarcaba en Ratisbona.[189]
Allí por la corona del imperio 1505
estaba el magisterio de la tierra
convocado a la guerra que esperaban.
Todos ellos estaban enclavando
los ojos en Fernando, y en el punto
que así le vieron junto, se prometen 1510
de cuanto allí acometen la vitoria.
Con falsa y vana gloria y arrogancia,
con bárbara jatancia allí se vía
a los fines de Hungría el campo puesto
de aquel que fue molesto en tanto grado 1515
al húngaro cuitado y afligido;[190]
las armas y el vestido a su costumbre,
era la muchedumbre tan estraña,
que apenas la campaña la abrazaba,
ni a dar pasto bastaba, ni agua el río. 1520
César con celo pío y con valiente
ánimo aquella gente despreciaba;
la suya convocaba, y en un punto
vieras un campo junto de naciones
diversas y razones, mas de un celo.[191] 1525
No ocupaban el suelo en tanto grado
con número sobrado y infinito
como el campo maldito; mas mostraban
virtud, con que sobraban su contrario,[192]
ánimo voluntario, industria y maña; 1530
con generosa saña y viva fuerza
Fernando los esfuerza y los recoge,
y a sueldo suyo coge muchos dellos.
De un arte usaba entre ellos admirable;
con el disciplinable alemán fiero 1535
a su manera y fuero conversaba;
a todos se aplicaba de manera,
que el flamenco dijera que nacido
en Flandes había sido, y el osado
español y sobrado, imaginando[193] 1540
ser suyo don Fernando y de su suelo,
demanda sin recelo la batalla.
Quien más cerca se halla del gran hombre
piensa que crece el nombre por su mano.
El cauto italiano nota y mira,[194] 1545
los ojos nunca tira del guerrero,[195]
y aquel valor primero de su gente[196]
junto en este y presente considera.
En él ve la manera misma y maña
del que pasó en España sin tardanza, 1550
siendo solo esperanza de su tierra,
y acabó aquella guerra peligrosa
con mano poderosa y con estrago
de la fiera Cartago y de su muro,
y del terrible y duro su caudillo, 1555
cuyo agudo cuchillo a las gargantas
Italia tuvo tantas veces puesto.[197]
Mostrábase tras esto allí esculpida
la envidia carcomida, así molesta;[198]
contra Fernando puesta frente a frente, 1560
la desvalida gente convocaba,
y contra aquel la armaba, y con sus artes
busca por todas partes daño y mengua.
Él con su mansa lengua y largas manos
los tumultos livianos asentando, 1565
poco a poco iba alzando tanto el vuelo,
que la envidia en el cielo lo miraba;
y como no bastaba a la conquista,
vencida ya su vista de tal lumbre,
forzaba su costumbre, y parecía 1570
que perdón le pedía, en tierra echada.
Él, después de pisada, descansado
quedaba y aliviado de este enojo;
y lleno del despojo desta fiera,
hallaba en la ribera del gran río, 1575
de noche, al puro frío del sereno,
a César, que en su seno está pensoso,
del suceso dudoso desta guerra;
que, aunque de sí destierra la tristeza,
del caso la grandeza trae consigo 1580
el pensamiento amigo del remedio.[199]
Entrambos buscan medio convenible
para que aquel terrible furor loco
les empeciese poco, y recibiese
tal estrago, que fuese destrozado. 1585
Después de haber hablado, ya cansados,
en la hierba acostados se dormían;
el gran Danubio oían ir sonando,
casi como aprobando aquel consejo.
En esto el claro viejo río se vía 1590
que del agua salía muy callado,
de sauces coronado y de un vestido
de las ovas tejido mal cubierto,
y en aquel sueño incierto les mostraba
todo cuanto tocaba al gran negocio. 1595
Y parecía que el ocio sin provecho
les sacaba del pecho; porque luego,
como si en vivo fuego se quemara
alguna cosa cara, se levantan
del gran sueño y se espantan, alegrando 1600
el ánimo y alzando la esperanza.
El río sin tardanza parecía
que el agua disponía al gran viaje;
allanaba el pasaje y la corriente,
para que fácilmente aquella armada[200] 1605
que había de ser guiada por su mano,
en el remar liviano y dulce viese
cuánto el Danubio fuese favorable.
Con presteza admirable vieras junto
un ejército a punto denodado; 1610
y después de embarcado, el remo lento,
el duro movimiento de los brazos,
los pocos embarazos de las ondas
llevaban por las hondas aguas presta
el armada, molesta al gran tirano.[201] 1615
El artificio humano no hiciera
pintura que esprimiera vivamente,
el armada, la gente, el curso, el agua;
apenas en la fragua, donde sudan
los cíclopes y mudan fatigados[202] 1620
los brazos, ya cansados del martillo,
pudiera así esprimillo el gran maestro.
Quien viera el curso diestro por la clara
corriente, bien jurara a aquellas horas[203]
que las agudas proras dividían 1625
el agua y la hendían con sonido,
y el rastro iba seguido. Luego vieras
al viento las banderas tremolando,
las ondas imitando en el moverse.
Pudiera también verse casi viva 1630
la otra gente esquiva y descreída,
que, de ensoberbecida y arrogante,
pensaban que delante no hallaran
hombres que se pararan, a su furia.
Los nuestros, tal injuria no sufriendo, 1635
remos iban metiendo con tal gana,
que iba de espuma cana el agua llena.
El temor enajena al otro bando;
el sentido, volando de uno en uno,
entrábase importuno por la puerta 1640
de la opinión incierta, y siendo dentro,
en el íntimo centro allá del pecho
les dejaba deshecho un hielo frío,
el cual, como un gran río en flujos gruesos,
por médulas y huesos discurría. 1645
Todo el campo se vía conturbado
y con arrebatado movimiento;
solo del salvamento platicaban.[204]
Luego se levantaban con desorden,
confusos y sin orden caminando, 1650
atrás iban dejando con recelo,
tendida por el suelo, su riqueza.
Las tiendas do pereza y do fornicio,
con todo bruto vicio obrar solían,
sin ellas se partían. Así armadas, 1655
eran desamparadas de sus dueños.
A grandes y pequeños juntamente
era el temor presente por testigo,
y el áspero enemigo a las espaldas,
que les iba las faldas ya mordiendo. 1660
César estar teniendo allí se vía
a Fernando, que ardía sin tardanza
por colorar su lanza en turca sangre.
Con animosa hambre y con denuedo
forcejea con quien quedo estar le manda. 1665
Como lebrel de Irlanda generoso
que el jabalí cerdoso y fiero mira,
rebátese, sospira, fuerza y riñe,
y apenas le constriñe el atadura,
que el dueño con cordura más aprieta;[205] 1670
así estaba perfeta y bien labrada
la imagen figurada de Fernando,
que quien allí mirándola estuviera,
que era desta manera bien juzgara.
Resplandeciente y clara de su gloria 1675
pintada la vitoria se mostraba;
a César abrazaba, y no parando,
los brazos a Fernando echaba al cuello.
Él mostraba de aquello sentimiento,
por ser el vencimiento tan holgado. 1680
Estaba figurado un carro estraño
con el despojo y daño de la gente
bárbara, y juntamente allí pintados
cautivos amarrados a las ruedas,
con hábitos y sedas variadas; 1685
lanzas rotas, celadas y banderas,
armaduras ligeras de los brazos,
escudos en pedazos divididos,
vieras allí cogidos en trofeo,
con que el común deseo y voluntades 1690
de tierras y ciudades se alegraba.
Tras esto blanqueaba falda y seno
con velas al Tirreno de la armada
sublime y ensalzada y gloriosa.
Con la prora espumosa las galeras, 1695
como nadantes fieras, el mar cortan,
hasta que en fin aportan con corona
de lauro a Barcelona, do cumplidos[206]
los votos ofrecidos y deseos,
y los grandes trofeos ya repuestos, 1700
con movimientos prestos de allí luego,
en amoroso fuego todo ardiendo,
el Duque iba corriendo, y no paraba.
Cataluña pasaba, atrás la deja;
ya de Aragón se aleja, y en Castilla, 1705
sin bajar de la silla, los pies pone.
El corazón dispone a la alegría
que vecina tenía, y reserena
su rostro, y enajena de sus ojos
muerte, daños, enojos, sangre y guerra. 1710
Con solo amor se encierra sin respeto,
y el amoroso afeto y celo ardiente
figurado y presente está en la cara;
y la consorte cara, presurosa,
de un tal placer dudosa, aunque lo vía, 1715
el cuello le ceñía en nudo estrecho,[207]
de aquellos brazos hecho delicados;
de lágrimas preñados relumbraban
los ojos que sobraban al sol claro.
Con su Fernando caro y señor pío 1720
la tierra, el campo, el río, el monte, el llano,
alegres a una mano estaban todos,
mas con diversos modos lo decían.
Los muros parecían de otra altura;
el campo en hermosura de otras flores 1725
pintaba mil colores disconformes;
estaba el mismo Tormes figurado,
en torno rodeado de sus ninfas,
vertiendo claras linfas con instancia,
en mayor abundancia que solía; 1730
del monte se veía el verde seno
de ciervos todo lleno, corzos, gamos,
que de los tiernos ramos van rumiando;
el llano está mostrando su verdura,
tendiendo su llanura así espaciosa, 1735
que a la vida curiosa nada empece,
ni deja en qué tropiece el ojo vago.
Bañados en un lago, no de olvido,
mas de un embebecido gozo, estaban
cuantos consideraban la presencia 1740
deste, cuya ecelencia el mundo canta,
cuyo valor quebranta al turco fiero.
Aquesto vio Severo por sus ojos,
y no fueron antojos ni ficiones;
si oyeras sus razones, yo te digo 1745
que como a buen testigo lo creyeras.
Contaba muy de veras que, mirando
atento y contemplando las pinturas,
hallaba en las figuras tal destreza,
que con mayor viveza no pudieran 1750
estar si ser les dieran vivo y puro.
Lo que dellas escuro allí hallaba,
y el ojo no bastaba a recogello,
el río le daba dello gran noticia.
—Este de la milicia —dijo el río— 1755
la cumbre y señorío tendrá solo
del uno al otro polo, y porque espantes
a todos cuantos cantes los famosos
hechos tan gloriosos, tan ilustres,[208]
sabe que en cinco lustres de sus años[209] 1760
hará tantos engaños a la muerte,
que con ánimo fuerte habrá pasado
por cuanto aquí pintado della has visto.
Ya todo lo has previsto, vamos fuera,
dejarte he en la ribera do estar sueles. 1765
—Quiero que me reveles tú primero,
—le replicó Severo—, qué es aquello,
que de mirar en ello se me ofusca
la vista; así corusca y resplandece,[210]
y tan claro parece allí en la urna, 1770
como en hora noturna la cometa.
—Amigo, no se meta —dijo el viejo—
ninguno, le aconsejo, en este suelo
en saber más que el cielo le otorgare;
y si no te mostrare lo que pides, 1775
tú mismo me lo impides, porque en tanto
que el mortal velo y manto el alma cubren,
mil cosas se te encubren, que no bastan
tus ojos, que contrastan, a mirallas.
No pude yo pintallas con menores 1780
luces y resplandores, porque sabe,
y aquesto en ti bien cabe, que esto todo
que en ecesivo modo resplandece
tanto, que no parece ni se muestra,
es lo que aquella diestra mano osada 1785
y virtud sublimada de Fernando
acabarán entrando más los días.
Lo cual, con lo que vías comparado,
es como con nublado muy escuro
el sol ardiente, puro, relumbrante. 1790
Tu vista no es bastante a tanta lumbre,
hasta que la costumbre de miralla
tu ver al contemplalla no confunda.
Como en cárcel profunda el encerrado,
que, súbito sacado, le atormenta 1795
el sol que se presenta a sus tinieblas;
así tú, que las nieblas y hondura,
metido en estrechura, contemplabas
que era cuanto mirabas otra gente,
viendo tan diferente suerte de hombre, 1800
no es mucho que te asombre luz tamaña;
pero vete, que baña el sol hermoso
su carro presuroso ya en las ondas,
y antes que me respondas será puesto.—
Diciendo así, con gesto muy humano 1805
tomole por la mano. ¡Oh admirable
caso, y, cierto, espantable! Que en saliendo,
se fueron estriñendo de una parte
y de otra de tal arte aquellas ondas,
que las aguas, que hondas ser solían, 1810
el suelo descubrían, y dejaban
seca por do pasaban la carrera,
hasta que en la ribera se hallaron;
y como se pararon en un alto,
el viejo de allí un salto dio con brío, 1815
y levantó del río espuma al cielo,
y comovió del suelo negra arena.
Severo, ya de ajena ciencia instruto,
fuese a coger el fruto sin tardanza
de futura esperanza; y escribiendo, 1820
las cosas fue esprimiendo muy conformes
a las que había de Tormes aprendido;
y aunque de mi sentido él bien juzgase
que no las alcanzase, no por eso
este largo proceso sin pereza 1825
dejó, por su nobleza, de mostrarme.
Yo no podía hartarme allí leyendo,
y tú de estarme oyendo estás cansado.
SALICIO

Espantado me tienes
con tan estraño cuento, 1830
y al son de tu hablar embebecido;
acá dentro me siento,
oyendo tantos bienes
y el valor deste príncipe escogido,
bullir con el sentido 1835
y arder con el deseo,
por contemplar presente
a aquel que, estando ausente,
por tu divina relación ya veo.
¡Quién viese la escritura, 1840
ya que no puede verse la pintura!
Por firme y verdadero,
después que te he escuchado,
tengo que ha de sanar Albanio cierto;
que, según me has contado, 1845
bastará a tu Severo
a dar salud a un vivo y vida a un muerto;
que a quien fue descubierto
un tamaño secreto,
razón es que se crea 1850
que, cualquiera que sea,
alcanzará con su saber perfeto,
y a las enfermedades
aplicará contrarias calidades.

NEMOROSO

Pues ¿en qué te resumes, di, Salicio, 1855


acerca deste enfermo compañero?

SALICIO

En que hagamos el debido oficio.


Luego de aquí partamos, y primero
que haga curso el mal y se envejesca,
así le presentemos a Severo. 1860

NEMOROSO

Yo soy contento, y antes que amanesca


y que del sol el claro rayo ardiente
sobre las altas cumbres se paresca,
el compañero mísero y doliente
llevemos luego donde cierto entiendo 1865
que será guarecido fácilmente.

SALICIO

Recoge tu ganado, que cayendo


ya de los altos montes las mayores
sombras, con ligereza van corriendo.
Mira en torno, y verás por los alcores 1870
salir el humo de las caserías
de aquestos comarcanos labradores.[211]
Recoge tus ovejas y las mías,
y vete ya con ellas poco a poco
por aquel mismo valle que solías. 1875
Yo solo me avendré con nuestro loco,
que pues él hasta aquí no se ha movido,
la braveza y furor debe ser poco.

NEMOROSO

Si llegas antes, no te estés dormido;


apareja la cena, que sospecho 1880
que aún fuego Galafrón no habrá encendido.

SALICIO

Yo lo haré, que al hato iré derecho,


si no me lleva a despeñar consigo
de algún barranco Albanio a mi despecho.
Adiós, hermano.

NEMOROSO

Adiós, Salicio amigo. 1885


ÉGLOGA III

Aquella voluntad honesta y pura,[212]


ilustre y hermosísima María,
que en mí de celebrar tu hermosura,
tu ingenio y tu valor estar solía,
a despecho y pesar de la ventura 5
que por otro camino me desvía,
está y estará en mí tanto clavada,
cuanto del cuerpo el alma acompañada.[213]
Y aun no se me figura que me toca
aqueste oficio solamente en vida; 10
mas con la lengua muerta y fría en la boca[214]
pienso mover la voz a ti debida.
Libre mi alma de su estrecha roca,
por el Estigio lago conducida,
celebrándote irá, y aquel sonido 15
hará parar las aguas del olvido.
Mas la fortuna, de mi mal no harta,
me aflige y de un trabajo en otro lleva;
ya de la patria, ya del bien me aparta,
ya mi paciencia en mil maneras prueba; 20
y lo que siento más, es que la carta,[215]
donde mi pluma en tu alabanza mueva,
poniendo en su lugar cuidados vanos,
me quita y me arrebata de las manos.
Pero, por más que en mí su fuerza pruebe, 25
no tornará mi corazón mudable;
nunca dirán jamás que me remueve
fortuna de un estudio tan loable.
Apolo y las hermanas, todas nueve,
me darán ocio y lengua con que hable 30
lo menos de lo que en tu ser cupiere,
que esto será lo más que yo pudiere.[216]
En tanto no te ofenda ni te harte
tratar del campo y soledad que amaste,
ni desdeñes aquesta inculta parte 35
de mi estilo, que en algo ya estimaste.
Entre las armas del sangriento Marte,
do apenas hay quien su furor contraste,
hurté de el tiempo aquesta breve suma,
tomando, ora la espada, ora la pluma.[217] 40
Aplica, pues, un rato los sentidos
al bajo son de mi zampoña ruda,
indina de llegar a tus oídos,
pues de ornamento y gracia va desnuda;
mas a las veces son mejor oídos 45
el puro ingenio y lengua casi muda,
testigos limpios de ánimo inocente,
que la curiosidad del elocuente.
Por aquesta razón de ti escuchado,
aunque me falten otras, ser meresco. 50
Lo que puedo te doy, y lo que he dado,
con recibillo tú yo me enriquesco.
De cuatro ninfas que del Tajo amado
salieron juntas, a cantar me ofresco,
Filódoce, Dinámene y Crimene, 55
Nise, que en hermosura par no tiene.
Cerca del Tajo en soledad amena,
de verdes sauces hay una espesura,
toda de hiedra revestida y llena,
que por el tronco va hasta el altura, 60
y así la teje arriba y encadena,
que el sol no halla paso a la verdura;
el agua baña el prado, con sonido
alegrando la vista y el oído.
Con tanta mansedumbre el cristalino 65
Tajo en aquella parte caminaba,
que pudieran los ojos el camino
determinar apenas que llevaba.
Peinando sus cabellos de oro fino,
una ninfa, del agua, do moraba, 70
la cabeza sacó, y el prado ameno
vido de flores y de sombra lleno.
Moviola el sitio umbroso, el manso viento,
el suave olor de aquel florido suelo.
Las aves en el fresco apartamiento 75
vio descansar del trabajoso vuelo.
Secaba entonces el terreno aliento
el sol subido en la mitad del cielo.
En el silencio solo se escuchaba
un susurro de abejas que sonaba. 80
Habiendo contemplado una gran pieza
atentamente aquel lugar sombrío,
somorgujó de nuevo su cabeza,[218]
y al fondo se dejó calar del río.[219]
A sus hermanas a contar empieza 85
del verde sitio el agradable frío,
y que vayan les ruega y amonesta
allí con su labor a estar la siesta.
No perdió en esto mucho tiempo el ruego,
que las tres dellas su labor tomaron, 90
y en mirando de fuera, vieron luego
el prado, hacia el cual enderezaron.
El agua clara con lacivo juego[220]
nadando dividieron y cortaron,[221]
hasta que el blanco pie tocó mojado, 95
saliendo de la arena, el verde prado.
Poniendo ya en lo enjuto las pisadas,[222]
escurrieron del agua sus cabellos,
los cuales esparciendo, cubijadas
las hermosas espaldas fueron dellos. 100
Luego sacando telas delicadas,
que en delgadeza competían con ellos,[223]
en lo más escondido se metieron,
y a su labor atentas se pusieron.
Las telas eran hechas y tejidas 105
del oro que el felice Tajo envía,
apurado, después de bien cernidas
las menudas arenas do se cría.[224]
Y de las verdes hojas reducidas
en estambre sutil, cual convenía 110
para seguir el delicado estilo
del oro ya tirado en rico hilo.
La delicada estambre era distinta
de las colores que antes le habían dado
con la fineza de la varia tinta 115
que se halla en las conchas del pescado.
Tanto artificio muestra en lo que pinta
y teje cada ninfa en su labrado,
cuanto mostraron en sus tablas antes
el celebrado Apeles y Timantes. 120
Filódoce, que así de aquellas era
llamada la mayor, con diestra mano
tenía figurada la ribera
de Estrimón, de una parte el verde llano,
y de otra el monte de aspereza fiera, 125
pisado tarde o nunca de pie humano,
donde el amor movió con tanta gracia
la dolorosa lengua del de Tracia.[225]
Estaba figurada la hermosa
Eurídice, en el blanco pie mordida[226] 130
de la pequeña sierpe ponzoñosa,[227]
entre la hierba y flores escondida;
descolorida estaba como rosa
que ha sido fuera de sazón cogida,
y el ánima, los ojos ya volviendo, 135
de su hermosa carne despidiendo.
Figurado se vía estensamente
el osado marido que bajaba
al triste reino de la escura gente,
y la mujer perdida recobraba; 140
y cómo después desto él, impaciente
por miralla de nuevo, la tornaba
a perder otra vez, y del tirano
se queja al monte solitario en vano.[228]
Dinámene no menos artificio 145
mostraba en la labor que había tejido,
pintando a Apolo en el robusto oficio
de la silvestre caza embebecido.
Mudar luego le hace el ejercicio
la vengativa mano de Cupido, 150
que hizo a Apolo consumirse en lloro
después que le enclavó con punta de oro.[229]
Dafne con el cabello suelto al viento,[230]
sin perdonar al blanco pie, corría
por áspero camino tan sin tiento, 155
que Apolo en la pintura parecía
que, porque ella templase el movimiento,
con menos ligereza la seguía.
Él va siguiendo, y ella huye como
quien siente al pecho el odioso plomo.[231] 160
Mas a la fin los brazos le crecían,
y en sendos ramos vueltos se mostraban,
y los cabellos, que vencer solían
al oro fino, en hojas se tornaban;
en torcidas raíces se estendían 165
los blancos pies, y en tierra se hincaban.
Llora el amante, y busca el ser primero,
besando y abrazando aquel madero.
Climene, llena de destreza y maña,
el oro y las colores matizando, 170
iba de hayas una gran montaña
de robles y de peñas variando.
Un puerco entre ellas, de braveza estraña,
estaba los colmillos aguzando
contra un mozo, no menos animoso, 175
con su venablo en mano, que hermoso.[232]
Tras esto, el puerco allí se vía herido
de aquel mancebo por su mal valiente,
y el mozo en tierra estaba ya tendido,
abierto el pecho del rabioso diente; 180
con el cabello de oro desparcido
barriendo el suelo miserablemente,
las rosas blancas por allí sembradas
tornaba con su sangre coloradas.
Adonis este se mostraba que era, 185
según se muestra Venus dolorida,
que viendo la herida abierta y fiera,
estaba sobre él casi amortecida.
Boca con boca coge la postrera[233]
parte del aire que solía dar vida 190
al cuerpo, por quien ella en este suelo
aborrecido tuvo al alto cielo.
La blanca Nise no tomó a destajo
de los pasados casos la memoria,
y en la labor de su sutil trabajo 195
no quiso entretejer antigua historia;
antes mostrando de su claro Tajo
en su labor la celebrada gloria,
lo figuró en la parte donde él baña
la más felice tierra de la España.[234] 200
Pintado el caudaloso río se vía,
que, en áspera estrecheza reducido,
un monte casi al rededor teñía,
con ímpetu corriendo y con ruído;
querer cercallo todo parecía[235] 205
en su volver; mas era afán perdido;
dejábase correr, en fin, derecho,[236]
contento de lo mucho que había hecho.
Estaba puesta en la sublime cumbre
del monte, y desde allí por él sembrada, 210
aquella ilustre y clara pesadumbre,
de antiguos edificios adornada.
De allí con agradable mansedumbre
el Tajo va siguiendo su jornada,
y regando los campos y arboledas 215
con artificio de las altas ruedas.[237]
En la hermosa tela se veían
entretejidas las silvestres diosas
salir de la espesura, y que venían
todas a la ribera presurosas, 220
en el semblante tristes, y traían
cestillos blancos de purpúreas rosas,
las cuales esparciendo, derramaban
sobre una ninfa muerta que lloraban.[238]
Todas con el cabello desparcido[239] 225
lloraban una ninfa delicada,[240]
cuya vida mostraba que había sido
antes de tiempo y casi en flor cortada.[241]
Cerca del agua, en un lugar florido,
estaba entre la hierba degollada,[242] 230
cual queda el blanco cisne cuando pierde
la dulce vida entre la hierba verde.
Una de aquellas diosas, que en belleza,
al parecer, a todas ecedía,
mostrando en el semblante la tristeza 235
que del funesto y triste caso había,
apartada algún tanto, en la corteza
de un álamo unas letras escribía,
como epitafio de la ninfa bella,
que hablaban así por parte della: 240
«Elisa soy, en cuyo nombre suena
y se lamenta el monte cavernoso,
testigo del dolor y grave pena
en que por mí se aflige Nemoroso,
y llama Elisa; Elisa a boca llena 245
responde el Tajo, y lleva presuroso
al mar de Lusitania el nombre mío,[243]
donde será escuchado, yo lo fío.»
En fin, en esta tela artificiosa
toda la historia estaba figurada, 250
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