100% found this document useful (1 vote)
6K views

Full download Full-Stack Web Development with Go: Build your web applications quickly using the Go programming language and Vue.js 1st Edition Nanik Tolaram pdf docx

Development

Uploaded by

lawannaimofn
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
6K views

Full download Full-Stack Web Development with Go: Build your web applications quickly using the Go programming language and Vue.js 1st Edition Nanik Tolaram pdf docx

Development

Uploaded by

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

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

com

Full-Stack Web Development with Go: Build your web


applications quickly using the Go programming
language and Vue.js 1st Edition Nanik Tolaram

https://textbookfull.com/product/full-stack-web-development-
with-go-build-your-web-applications-quickly-using-the-go-
programming-language-and-vue-js-1st-edition-nanik-tolaram/

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.

Full-Stack Web Development with Jakarta EE and Vue.js:


Your One-Stop Guide to Building Modern Full-Stack
Applications with Jakarta EE and Vue.js Daniel Andres
Pelaez Lopez
https://textbookfull.com/product/full-stack-web-development-with-
jakarta-ee-and-vue-js-your-one-stop-guide-to-building-modern-full-
stack-applications-with-jakarta-ee-and-vue-js-daniel-andres-pelaez-
lopez/
textboxfull.com

Let s Go Learn to build professional web applications with


Go Alex Edwards

https://textbookfull.com/product/let-s-go-learn-to-build-professional-
web-applications-with-go-alex-edwards/

textboxfull.com

Let s Go Learn to build professional web applications with


Go Alex Edwards

https://textbookfull.com/product/let-s-go-learn-to-build-professional-
web-applications-with-go-alex-edwards-2/

textboxfull.com

Go Web Programming 1st Edition Sau Sheong Chang

https://textbookfull.com/product/go-web-programming-1st-edition-sau-
sheong-chang/

textboxfull.com
Mastering Full Stack React Web Development 1st Edition
Tomasz Dyl

https://textbookfull.com/product/mastering-full-stack-react-web-
development-1st-edition-tomasz-dyl/

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

Essential ASP.NET Web Forms Development: Full Stack


Programming with C#, SQL, Ajax, and JavaScript 1st Edition
Robert E. Beasley
https://textbookfull.com/product/essential-asp-net-web-forms-
development-full-stack-programming-with-c-sql-ajax-and-javascript-1st-
edition-robert-e-beasley/
textboxfull.com

Full Stack Web Development with Jakarta EE and Vue js Your


One Stop Guide to Building Modern Full Stack Applications
with Jakarta EE and Vue js 1st Edition Daniel Andres
Pelaez Lopez
https://textbookfull.com/product/full-stack-web-development-with-
jakarta-ee-and-vue-js-your-one-stop-guide-to-building-modern-full-
stack-applications-with-jakarta-ee-and-vue-js-1st-edition-daniel-
andres-pelaez-lopez/
textboxfull.com

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
Full-Stack Web Development
with Go

Build your web applications quickly using the Go programming


language and Vue.js

Nanik Tolaram

Nick Glynn

BIRMINGHAM—MUMBAI
Full-Stack Web Development with Go
Copyright © 2023 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted
in any form or by any means, without the prior written permission of the publisher, except in the case
of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information
presented. However, the information contained in this book is sold without warranty, either express
or implied. Neither the authors, nor Packt Publishing or its dealers and distributors, will be held liable
for any damages caused or alleged to have been caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and
products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot
guarantee the accuracy of this information.

Group Product Manager: Pavan Ramchandani


Publishing Product Manager: Bhavya Rao
Senior Content Development Editor: Feza Shaikh
Technical Editor: Saurabh Kadave
Copy Editor: Safis Editing
Project Coordinator: Manthan Patel
Proofreader: Safis Editing
Indexer: Tejal Daruwale Soni
Production Designer: Shyam Sundar Korumilli
Marketing Coordinator: Anamika Singh

First published: February 2023

Production reference: 1270123

Published by Packt Publishing Ltd.


Livery Place
35 Livery Street
Birmingham
B3 2PB, UK.

ISBN 978-1-80323-419-9

www.packtpub.com
To my dearest Mum, who always supported me in pursuing my dreams and encouraged me to keep on
going no matter what life brought.

To my late Dad, who stood by me and encouraged me to write my very first book when I was
17 years old.

To my beautiful wife and best friend, for allowing me the time to write the book and supporting me in
every step of our life.

To both my sons, Rahul and Manav, for allowing me to spend time in front of the computer on
weekends to chase my dream and passion. Last but not least, to God, for giving me this life and the
opportunity to be where I am in this world.

– Nanik Tolaram

I would like to thank my family for their love; my beautiful daughter Inara, for always being there
to brighten my day; and my beautiful partner Kate, for all her support in my business efforts and in
writing this book.

– Nick Glynn
Contributors

About the authors


Nanik Tolaram is a big proponent of open source software. He has dabbled in different programming
languages, such as Java, JavaScript, C, and C++. He has developed different products from the ground
up while working in start-up companies. He is a software engineer at heart, but he loves to write
technical articles and share his knowledge with others. He learned to program with Go during the
COVID-19 pandemic and hasn’t looked back.

I want to thank the Packt team – Feza Shaikh, Bhavya Rao, Manthan Patel, and Mark D’Souza – for
their guidance and patience in helping us complete the book.

Nick Glynn is the founder and current chief product officer of FeeWise, a US payments and finance
platform.
He has previously worked in CTO, senior, and principal engineering roles developing products, training,
and consulting for companies such as Intel, Qualcomm, Hewlett Packard, L3, and many more.
With a broad range of experience from board bring-up, Linux driver development, and systems
development up through to building and deploying platforms that power investment and financial
institutions, Nick is always looking to build pragmatic solutions to real-world problems.
Nick also continues his independent efforts as a trainer and consultant, delivering courses and expertise
globally through his company Curiola (www.curiola.com).
About the reviewers
Pablo David Garaguso was born in Mar del Plata, Argentina. He graduated with two degrees in
computer sciences and enterprise systems from CAECE University and later on received an MBA
from CEMA University in Buenos Aires, Argentina. He has worked as an attached professor, project
leader, and international manager, and currently occupies a position as a solutions architect in R&D
for FamilySearch Int. Europe. Based in Finland, he has published a variety of books according to his
many interests, from novels and fiction to software engineering. His latest book, Vue 3 Applications
and Design Patterns, will be published by Packt in 2023.

Suraj Bobade is an experienced software professional, currently located in Pune, India. He completed
a B.Tech in computer science from Walchand College of Engineering, Sangli.
He is passionate about software development with a keen interest in product management. He builds
user-first feature-rich products while driving critical software and product design decisions.
Go has been his go-to choice for building the microservice backend and prototypes. Considering the
simplicity and increasing adoption by the open source community, Suraj is optimistic that readers of
this book will learn in-demand skills.

Tan Quach is an experienced software engineer with a career spanning over 25 years and exotic locations
such as London, Canada, Bermuda, and Spain. He has worked with a wide variety of languages and
technologies for companies such as Deutsche Bank, Merrill Lynch, and Progress Software, and loves
diving deep into experimenting with new ones.
Tan’s first foray into Go began in 2017 with a proof-of-concept application built over a weekend and
productionized and released 3 weeks later. Since then, Go has been his language of choice when
starting any project.
When he can be torn away from the keyboard, Tan enjoys cooking meat over hot coals and open
flames and making his own charcuterie.

Nima Yahyazadeh is a Software Architect focused on developing solutions for startups. He has years
of experience developing distributed and cloud-native solutions. He has worked at medium to large
corporations such as Amazon Web Services, Intel, and Appian. He is currently the founder and CEO
of a consulting company, Lenzo LLC, that has helped more than five startups to architect, develop, and
deliver exciting features to their customers. He is passionate about AWS, Kubernetes, Elasticsearch,
Kafka, and Golang.
Table of Contents
Prefacexi

Part 1: Building a Golang Backend


1
Building the Database and Model 3
Technical requirements 4 Using sqlc 11
Installing Docker 4 Setting up the database 13
Setting up Postgres 5 Generating CRUD with sqlc 14
Designing the database 6 Building the makefile 21
Installing sqlc 9 Summary22

2
Application Logging 23
Technical requirements 23 Writing log messages to the
Exploring Go standard logging 23 logging server 30
Using golog 26 Configuring multiple outputs 33
Local logging 29 Summary36

3
Application Metrics and Tracing 37
Technical requirements 37 The OpenTelemetry APIs and SDK 39
Understanding OpenTelemetry 38 Tracing applications 40
viii Table of Contents

Installing Jaeger 41 Adding metrics using Prometheus 50


Adding metrics using Prometheus 52
Integrating the Jaeger SDK 43
Integration with Jaeger 44 Running docker-compose 58
Summary60

Part 2: Serving Web Content


4
Serving and Embedding HTML Content 63
Technical requirements 63 Rendering static content 72
Handling HTTP functions and Rendering dynamic content 74
Gorilla Mux 63 Using Go embed to bundle
Hello, World with defaults 64 your content 78
Building on the basics with Gorilla Mux 67 Summary83

5
Securing the Backend and Middleware 85
Technical requirements 85 Adding cookies and sessions 92
Adding authentication 86 Cookies and session handling 92
Creating our dummy user 88 Storing session information 95
Authenticating a user 89 Using Redis for a session  95

Adding middleware 90 Summary97


Basic middleware 90

6
Moving to API-First 99
Technical requirements 99 Exposing our REST API 102
Structuring an application 100 Cross-Origin Resource Sharing (CORS) 104
Defining packages 100 JSON middleware 105
Session middleware 107
Table of Contents ix

Converting to and from JSON 108 Using JSONError 112


Defining request model 109 Using JSONMessage 114
Defining a response model 111
Summary115
Reporting errors with JSON 112

Part 3: Single-Page Apps with Vue and Go


7
Frontend Frameworks 119
Technical requirements 119 Application and components 124
Server-side rendering versus single- Login page using Vue 124
page apps 119 Using Vite 127
Introducing React, Vue, and more 120 Using Vue Router to move around 130
React120 Routing the login page 132
Svelte121
Vue121 Summary133

Creating a Vue app 124

8
Frontend Libraries 135
Technical requirements 135 Setting up Buefy 141
Understanding Vuetify 136 UI components 142
Setting up Vuetify 136 Validating data entry with Vuelidate 143
Using UI components 137 Better input handling with Cleave.JS 148
Understanding Buefy 139 Summary150
Bulma sample 140

9
Tailwind, Middleware, and CORS 151
Technical requirements 151 Introducing Tailwind 151
x Table of Contents

Creating a new Tailwind and Vite project 153 CORS for secure applications 163
Consuming your Golang APIs 156 Creating Vue middleware 166
Summary168

10
Session Management 169
Technical requirements 169 Navigation guards 179
Session management and JWTs 169 Defaults and error pages 182
What’s a JWT? 170 Summary182
(Re)introducing Vue Router 178

Part 4: Release and Deployment


11
Feature Flags 185
Technical requirements 185 The high-level architecture of
An introduction to feature flags 186 feature flags 190
Feature flag configuration 186 Integration of the feature flag 190
Use cases for using feature flags 188 Web application 191
Microservice integration 193
Installing the feature flag server 188
Summary198

12
Building Continuous Integration 199
Technical requirements 199 Dockerfile210
Importance of CI 200 GitHub Packages 210
Setting up GitHub 200 Publishing to GitHub Packages 212
GitHub Actions 204 Pulling from GitHub Packages 216

Publishing Docker images 209 Summary217


Table of Contents xi

13
Dockerizing an Application 219
Technical requirements 219 Running images as containers 227
Installing Docker 219 Building and packaging images 229
Using Docker 221 Docker Compose 233
Docker images 222 Summary235

14
Cloud Deployment 237
Technical requirements 237 The init command 245
AWS refresher 238 The plan command 247
The destroy command 250
Amazon Elastic Compute Cloud 239
Virtual Private Cloud 240 Coding in Terraform 252
Database storage 241 Providers252
Elastic Container Service 242
AWS tools 242
Terraform examples 254
Pulling from GitHub Packages 255
Understanding and using Terraform 243 AWS EC2 setup 257
What is Terraform? 244 Deploying to ECS with a load balancer 261
Installing Terraform 244
Summary269
Terraform basic commands 245

Index271

Other Books You May Enjoy 274


Preface
Full-Stack Web Development with Go walks you through creating and developing a complete modern
web service, from authn/authz, interop, server-side rendering, and databases, to modern frontend
frameworks with Tailwind and Go-powered APIs, complete with step-by-step explanations of essential
concepts, practical examples, and self-assessment questions. The book will begin by looking at how
to structure the app and look at the relevant pieces, such as database and security, before integrating
all the different parts together to build a complete web product.

Who this book is for


Developers with experience of a mixture of frontend and backend development will be able to put
their knowledge to work with the practical guide in this book. The book will give them the know-how
to glue together their skills and allow them to build a complete stack web application.

What this book covers


Chapter 1, Building the Database and Model, looks at building our database for our sample application.
We will also explore different ways to communicate with databases using Golang.
Chapter 2, Application Logging, considers how designing an application requires examining it internally
without going through reams of code, and the only way to do this is by logging. We will learn how
to do this by running a centralized logger that will host all of our logging information. We will also
learn how to log from inside our application.
Chapter 3, Application Metrics and Tracing, considers how having logging applied inside our application
will assist in troubleshooting issues when the application is running. The other thing that helps is
information about the interaction of the different components inside our application, which we will
also look at in this chapter.
Chapter 4, Serving and Embedding HTML Content, sees us begin work on implementing the REST
endpoints needed for our financial application. The first version of the app will show simple content
rendered by the backend.
Chapter 5, Securing the Backend and Middleware, notes that we need to secure our application so
that we can ensure users see only the data that they should. We will discuss some of the ways we can
protect our endpoints using cookies, session management, and other types of middleware available.
Chapter 6, Moving to API - First, starts by laying the groundwork for frontend applications to consume
our data. We’ll introduce marshaling/unmarshaling data into custom structures and see how to set
up JSON-consuming endpoints and use cURL to verify.
xiv Preface

Chapter 7, Frontend Frameworks, discusses the state of web development, introduces the React and
Vue frameworks, and sees us employ them to create a simple app that's similar to our previous one.
Chapter 8, Frontend Libraries, examines how to leverage tools and libraries to help us, as full stack
developers, work fast!
Chapter 9, Tailwind, Middleware, and CORS, has us securing our app and getting it talking to our
Go-powered backend.
Chapter 10, Session Management, focuses on session management while introducing state management
with Vuex and how to structure apps based on user permissions.
Chapter 11, Feature Flags, introduces feature flags (sometimes called feature toggles) as a technique
deployed to enable/disable certain features of the application as required, depending on a given
condition. For example, if a newly deployed application containing a new feature has a bug and we
know it will take time for the bug to be fixed, the decision can be made to turn off the feature without
deploying any new code to do so.
Chapter 12, Building Continuous Integration, notes that while building applications is a big part of the
puzzle, we need to be sure that what the team builds can be validated and tested properly. This is where
continuous integration comes in. Having a proper continuous integration process is super important
to ensure that everything deployed to production has been tested, verified, and checked securely.
Chapter 13, Dockerizing an Application, notes that while developing an application is one side of the coin,
the other side is to make sure that it can be deployed and used by our end user. To make deployment
simpler, we can package applications such that they can be run inside a container. Operationally, this
allows applications to be deployed in the cloud from anywhere.
Chapter 14, Cloud Deployment, shows how deploying applications to a cloud environment is the last
step in delivering features for the end user to use. Cloud deployment is complex and sometimes quite
specific to particular cloud vendors. In this chapter, we will focus on deploying applications into the
AWS cloud infrastructure.

To get the most out of this book


You will need the following installed on your computer: Node.js (version 16 or above), Docker (or
Docker Desktop), the Golang compiler, and an IDE such as GoLand or VSCode.

Software/hardware covered in the book Operating system requirements


Golang 1.16 and above macOS, Linux, Windows (via WSL2)
Docker macOS, Linux, Windows (via WSL2)
An IDE (VSCode or GoLand) macOS, Linux, Windows
Preface xv

If you are using the digital version of this book, we advise you to type the code yourself or access
the code from the book’s GitHub repository (a link is available in the next section). Doing so will
help you avoid any potential errors related to the copying and pasting of code.

Download the example code files


You can download the example code files for this book from GitHub at https://github.com/
PacktPublishing/Full-Stack-Web-Development-with-Go. If there’s an update to
the code, it will be updated in the GitHub repository.

Download the color images


We also provide a PDF file that has color images of the screenshots and diagrams used in this book.
You can download it here: https://packt.link/EO4sG.

Conventions used
There are a number of text conventions used throughout this book.
Code in text: Indicates code words in text, database table names, folder names, filenames, file
extensions, pathnames, dummy URLs, user input, and Twitter handles. Here is an example: “We call
next.ServerHTTP(http.ResponseWriter, *http.Request) to continue and indicate
successful handling of a request.”
A block of code is set as follows:

go func() {
...
s.SetAttributes(attribute.String(“sleep”, “done”))
s.SetAttributes(attribute.String(“go func”, “1”))
...
}()

Any command-line input or output is written as follows:

[INFO] 2021/11/26 21:11 This is an info message, with colors


(if the output is terminal)

Bold: Indicates a new term, an important word, or words that you see onscreen. For instance, words in
menus or dialog boxes appear in bold. Here is an example: “You will get a Login unsuccessful message.”
xvi Preface

Tips or important notes


Appear like this.

Get in touch
Feedback from our readers is always welcome.
General feedback: If you have questions about any aspect of this book, email us at customercare@
packtpub.com and mention the book title in the subject of your message.
Errata: Although we have taken every care to ensure the accuracy of our content, mistakes do happen.
If you have found a mistake in this book, we would be grateful if you would report this to us. Please
visit www.packtpub.com/support/errata and fill in the form.
Piracy: If you come across any illegal copies of our works in any form on the internet, we would
be grateful if you would provide us with the location address or website name. Please contact us at
[email protected] with a link to the material.
If you are interested in becoming an author: If there is a topic that you have expertise in and you
are interested in either writing or contributing to a book, please visit authors.packtpub.com.

Share Your Thoughts


Once you’ve read Full-Stack Web Development with Go, we’d love to hear your thoughts! Please click
here to go straight to the Amazon review page for this book and share your feedback.
Your review is important to us and the tech community and will help us make sure we’re delivering
excellent quality content.
Preface xvii

Download a free PDF copy of this book


Thanks for purchasing this book!
Do you like to read on the go but are unable to carry your print books everywhere? Is your eBook
purchase not compatible with the device of your choice?
Don’t worry, now with every Packt book you get a DRM-free PDF version of that book at no cost.
Read anywhere, any place, on any device. Search, copy, and paste code from your favorite technical
books directly into your application.
The perks don’t stop there, you can get exclusive access to discounts, newsletters, and great free content
in your inbox daily
Follow these simple steps to get the benefits:

1. Scan the QR code or visit the link below

https://packt.link/free-ebook/9781803234199

2. Submit your proof of purchase


3. That’s it! We’ll send your free PDF and other benefits to your email directly
Part 1:
Building a Golang Backend

In Part 1, we will build the backend components for our sample application. We will build the database
with the models for the Go backend of our application. We will also build secure REST API endpoints
that will have logging and tracing functionalities.
This part includes the following chapters:

• Chapter 1, Building the Database and Model


• Chapter 2, Application Logging
• Chapter 3, Application Metrics and Tracing
1
Building the Database
and Model
In this chapter, we will design the database that our sample application will use. We will walk
through the design of the database and look at some of the tools that we are going to use to help us
on our database design journey. We will be using the Postgres database and will look at how to run
it locally using Docker. What is Docker? In simple terms, Docker is a tool that allows developers to
run a variety of applications such as the database, the HTTP server, system tools, and so on – locally
or in the cloud. Docker removes the need to install all the different dependencies required to use a
particular application such as a database, and it makes it easier to manage and maintain applications
than installing on bare metal in both local and cloud environments. This is possible using Docker
because it packages everything into a single file similar to how a compressed file contains different
files internally.
We will learn how to design a database that supports the features that we want to build, such as
the following:

• Creating an exercise
• Creating a workout plan
• Logging in to the system

We will also explore tools that will help in automatic code generation based on SQL queries, which reduces
the amount of database-related code that needs to be written to a large extent. Readers will learn to use
the tool to also auto-generate all the relevant CRUD operations without writing a single line of Go code.
In this chapter, we’ll be covering the following:

• Installing Docker
• Setting up Postgres
• Designing the database
4 Building the Database and Model

• Installing sqlc
• Using sqlc
• Setting up the database
• Generating CRUD with sqlc
• Building the makefile

Technical requirements
In this book, we will be using version 1.16 of the Go programming language, but you are free to use
later versions of Go, as the code will work without any changes. To make it easy, all the relevant files
explained in this chapter can be checked out at https://github.com/PacktPublishing/
Full-Stack-Web-Development-with-Go/tree/main/Chapter01. To work on the
sample code in this chapter, make sure you change the directory to Chapter 1 – Full-Stack-
Web-Development-with-Go/chapter1. If you are using Windows as a development machine,
use WSL2 to perform all the different operations explained in this chapter.

Installing Docker
In this book, we will be using Docker to do things such as running databases and executing database
tools, among others. You can install either Docker Desktop or Docker Engine. To understand more
about the difference between Docker Desktop and Engine, visit the following link: https://
docs.docker.com/desktop/linux/install/#differences-between-docker-
desktop-for-linux-and-docker-engine. The authors use Docker Engine in Linux and
Docker Desktop for Mac.
If you are installing Docker Desktop on your local machine, the following are the links for the different
operating systems:

• Windows – https://docs.docker.com/desktop/windows/install/
• Linux – https://docs.docker.com/desktop/linux/install/
• macOS – https://docs.docker.com/desktop/mac/install/

If you want to install Docker binaries, you can follow the following guide: https://docs.docker.
com/engine/install/binaries/.
Setting up Postgres 5

Setting up Postgres
The database we chose for the sample application is Postgres; we chose Postgres over other databases
because of the wide variety of open source tools available for building, configuring, and maintaining
Postgres. Postgres has been open source from version 1 since 1989 and it is used by big tech startups
worldwide. The project has a lot of community support in terms of tools and utilities, which makes it
easier to manage and maintain. The database is suitable for small all the way to big replicated data stores.
The easiest way to run it locally is to run it as a Docker container. First, use the following command
to run Postgres:

docker run --name test-postgres \


-e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres

The command will run postgres on port 5432; if by any chance you have other applications or
other Postgres instances listening to this port, the command will fail. If you need to run Postgres on a
different port, change the -p parameter (for example, -p 5555:5432) to a different port number.
If successful, you will see the container ID printed out. The ID will differ from what is shown here:

f7bdfb7d2c10c5f0c9227c9b0a720f21d3c7fa65907eb-
0c546b8f20f12621102

Check whether Postgres is up and running by using docker ps. The next thing to do is use the
psql-client tool to connect to Postgres to test it out. A list of the different Postgres client tools
available on different platforms can be found here: https://wiki.postgresql.org/wiki/
PostgreSQL_Clients.
We will use the standard postgres psql tool using Docker. Open another terminal and use the
following Docker command to run psql:

docker exec -it test-postgres psql -h localhost -p 5432 -U


postgres -d postgres

What we are doing is executing the psql command inside the running Postgres container. You will
see output such as the following, indicating that it has successfully connected to the Postgres database:

psql (12.3, server 14.5 (Debian 14.5-1.pgdg110+1))


WARNING: psql major version 12, server major version 14.
         Some psql features might not work.
Type "help" for help.

postgres=#
6 Building the Database and Model

On a successful connection, you will see the following output. Note that the warning message mentions
server major version 14 – this is to indicate that the server version is newer than the current psql
version as per the documentation (https://www.postgresql.org/docs/12/app-psql.
html). The psql client will work without any problem with the Postgres server:

psql (12.3, server 14.0 (Debian 14.0-1.pgdg110+1))


WARNING: psql major version 12, server major version 14.
         Some psql features might not work.
Type "help" for help.
postgres=#

Exit psql to go back to the command prompt by typing exit.


The following is some guidance on common errors when trying to connect to the database:

Error Message Description


psql: error: could not connect The password specified when running Postgres
to server: FATAL: password does not match with the password passed in
authentication failed for user using psql. Check the password.
“postgres”
psql: error: could not connect to server: could The IP address that you use to connect to Postgres
not connect to server: Host is unreachable is wrong.

With this, you have completed the local setup of Postgres and are now ready to start looking into
designing the database.

Designing the database


In this section, we will look at how to design the database to allow us to store information for the
fitness tracking application. The following screenshot shows a mockup of the application:
Designing the database 7

Figure 1.1 – Screenshot of the sample application

Looking at these functionalities, we will look at designing a database structure that will look like the
following entity relationship diagram:

Entity relationship diagram


An entity relationship diagram shows the relationships of entity sets stored in a database.
8 Building the Database and Model

Figure 1.2 – Entity relationship diagram of our fitness application

Let’s drill further into each table to understand the data that they contain:

Table Name Description


Users This table contains user information for login purposes. Passwords will be stored
as a hash, not plaintext.
Images This table contains images of exercises that users want to do. This table will store all
the exercise images that the user uploads.
Exercises This table contains the name of the exercise that the user wants to do. Users will
define what kind of exercise they want to do.
Sets This table contains the number of sets of each exercise that the user wants to do.
Workouts This table contains the workouts that the user wants to do. Users define a workout
as a combination of exercises with the number of sets that they want to do.
Installing sqlc 9

The trade-off we are making to store images in the database is to simplify the design; in reality, this
might not be suitable for bigger images and production. Now that we have defined the database
structure and understand what kind of data it will store, we need to look at how to implement it. One
of the major criteria that we want to focus on is to completely separate writing SQL from the code;
this way, we have a clear separation between the two, which will allow higher maintainability.

Installing sqlc
We have defined the database structure so now it’s time to talk a bit more about the tool that we are
going to be using called sqlc. sqlc is an open source tool that generates type-safe code from SQL; this
allows developers to focus on writing SQL and leave the Go code to sqlc. This reduces the development
time, as sqlc takes care of the mundane coding of queries and types.
The tool is available at https://github.com/kyleconroy/sqlc. The tool helps developers
focus on writing the SQL code that is needed for the application and it will generate all the relevant code
needed for the application. This way, developers will be using pure Go code for database operations.
The separation is clean and easily trackable.
The following diagram shows the flow that developers normally adopt when using the tool at a high level.

Figure 1.3 – Flow to use sqlc to generate Go code

All SQL code will be written in .sql files, which will be read and converted by the sqlc tool into the
different Go code.
10 Building the Database and Model

Download and install SQL binary by using the following command:

go install github.com/kyleconroy/sqlc/cmd/sqlc@latest

Make sure your path includes the GOPATH/bin directory – for example, in our case, our path looks
like the following:

…:/snap/bin:/home/nanik/goroot/go1.16.15/go/bin:/home/nanik/go/
bin

If you don’t have GOPATH as part of the PATH environment variable, then you can use the following
command to run sqlc:

$GOPATH/bin/sqlc
Usage:
  sqlc [command]

Available Commands:
  compile     Statically check SQL for syntax and type
  errors
  completion  Generate the autocompletion script for the
  specified shell
  generate    Generate Go code from SQL
  help        Help about any command
  init        Create an empty sqlc.yaml settings file
  upload      Upload the schema, queries, and configuration
  for this project
  version     Print the sqlc version number

Flags:
  -x, --experimental   enable experimental features (default:
false)
  -f, --file string    specify an alternate config file
(default: sqlc.yaml)
  -h, --help           help for sqlc

Use "sqlc [command] --help" for more information about a command.


At the time of writing, the latest version of sqlc is v1.13.0.
Random documents with unrelated
content Scribd suggests to you:
La presenza del muto nell’Avru non tornava gradita ad alcuno, poichè
poneva inciampo alle intenzioni di Giuseppe, teneva in continua
agitazione i due vecchi, e impediva alla Gavina di mostrarsi benevola
col cugino. Essa lo aveva ben detto alla madre; «finchè il muto mi
vorrà bene, io non sarò mai d’altri, poichè non voglio che soffra!»
E per vero era incomprensibile il sentimento che avvicinava Gavina a
Bastiano! Era pietà, riconoscenza, rimorso, o paura? Forse un po’ di
tutto. Da qualche tempo l’improvvisa comparsa del muto faceva in lei
uno strano effetto. Dinanzi a lui rimaneva come paralizzata, subendo
il fascino di quelle nere pupille che la fissavano, come la vipera fissa
l’uccelletto per ammaliarlo. Ma perchè, poi? l’ignorava! Sapeva solo
d’essere schiava di quell’uomo — e gli ubbidiva ciecamente come se
lo riconoscesse per suo Signore. Non aveva paura, ma gli voleva
bene, la sdegnava la sua presenza, ma si sentiva inquieta quando lo
sapeva lontano.
Gavina, ormai, non comprendeva sè stessa. Giunse persino a
credersi dominata dallo spirito infernale — e invocò il perdono di Dio,
nel dubbio ch’ella fosse dannata. Pregò, stancò il Cielo — ma nessun
santo le tolse dal cuore il misterioso sentimento che la turbava.
A Giuseppe avevano taciuto le minaccie di Bastiano e gli accordi
presi co’ parenti. Nè Anton Stefano, nè sua moglie, avevano creduto
conveniente informarlo dell’accaduto. Le circostanze erano gravi: il
vecchio non era troppo alieno dall’accordare al muto la mano della
sua figlia: la madre però, donna prudente, si era incaricata
dell’assestamento delle cose e pensava a trar profitto della
situazione.
Il muto, dal suo canto, non supponeva le cose inoltrate come lo
erano: credeva anzi che Giuseppe ignorasse sempre le sue intenzioni
a riguardo di Gavina.

*
Dal giorno che la vecchia gli aveva restituito i doni, il muto non si era
mai trovato da solo a sola con la fanciulla; poichè la fanciulla aveva
saputo trovar modo di sfuggirlo — come sfuggiva Giuseppe, di cui
era seriamente innamorata.
Dacchè Bastiano aveva fatto ritorno all’Avru, si era notato un
cambiamento nelle sue abitudini. Non scherzava più nè rideva come
prima; sedeva in un canto del piazzale, e lavorava tranquillamente
non preoccupandosi di nulla — neppure delle insidie che potevano
venirgli tese come bandito. Ma da questo lato aveva sempre una
misteriosa sorvegliante: Gavina — la quale, quantunque in
apparenza distratta, non dimenticava mai di volgere uno sguardo
all’ingiro, per far la guardia al suo protetto.
Una sera, mentre le donne erano raccolte nello stazzo, la moglie di
Anton Stefano aveva trovato modo di appiccar discorso con
Giuseppe, e lo aveva tratto seco, per la piccola viottola che
conduceva all’ovile, poco distante.
Giuseppe quella sera era molto preoccupato; e la futura suocera ben
sapeva il motivo della sua inquietudine.
— Cos’hai, Giuseppe? — le disse, fingendo un’aria distratta.
— Sono annoiato.
— Un po’ di pazienza, figliuolo mio! Le cose si appianeranno.
— Temo che la Gavina non mi voglia bene!
— Timori sciocchi! la Gavina non pensa che a te — e te ne darei le
prove più convincenti, se delicatezza di madre non mi consigliasse di
tacere.
— Quel muto che non vuol abbandonare lo stazzo m’indispone...
m’irrita!
— Che vuoi? è un povero bandito che tutti siamo in dovere di
proteggere.
— Mancano forse altri stazzi in Gallura? Perchè lo abbiamo sempre
fra i piedi?
— Pazienza, figliuolo! Bastiano finirà per andarsene.
— Pare però che ne dimostri poca voglia.
— Si stancherà di venirvi.
— E... se non si stancasse?
— Allora si troverà il modo di farlo stancare.
La suocera pronunciò queste parole con un tono così secco, che
Giuseppe si fermò di botto, e la fissò in volto.
— E qual modo?
La suocera lanciò un’occhiata al nipote, e si strinse nelle spalle.
Giuseppe capì — o credette capire. Capiva che non bisognava render
la suocera responsabile di certi avvenimenti.
Camminarono insieme per un buon tratto di strada ma senza
discorrere. Quel silenzio non faceva che far maturare nel cervello di
Giuseppe l’idea che vi era stata gettata, come a caso, dalla futura
suocera. L’eco delle ultime parole della vecchia non si era perduto
nello spazio: si ripercuoteva ancora nelle orecchie dell’amante.
Giuseppe era sopra pensiero. Grosse goccie di sudore grondavano
dalla sua fronte: ed egli le asciugava col fazzoletto. La vecchia finse
di far cadere ad arte il discorso sopra ad altri argomenti — ma
Giuseppe non sentiva; esso andava ruminando quella idea, quasi
rivoltandola da tutte le parti, come per trovarvi il lato più comodo
per realizzarla.
Dopo un lungo silenzio, la vecchia domandò a Giuseppe se nelle sue
terre di Bortigiadas aveva seminato molto grano, e Giuseppe, che
non sentiva nulla, le rispose cupo, con altra domanda.
— Ditemi... il muto ha proprio giurato di non offendere la vostra
famiglia?
— Sì — rispose la vecchia; e siccome capì che il pensiero di Giuseppe
non era uno scrupolo di coscienza, riprese: — però i parenti del
muto non richiesero da noi un ugual giuramento.
— E come mai hanno potuto omettere una formalità così
importante?
— Ma!... chi lo sa?
Continuarono a passeggiare, fecero ritorno a casa ma non
pronunciarono nessun’altra parola sul muto.
Avevano detto abbastanza — e forse Giuseppe credette capire più di
quanto la vecchia aveva voluto dirgli. Il geloso cugino pensava per
proprio conto, ma voleva creare un pretesto per mettere in pace gli
scrupoli della coscienza.

XII.
Si rompe ogni indugio

Era l’ora di stanchezza e di melanconia, in cui si ristà dal lavoro;


quell’ora che non è giorno, nè notte troppo tardi per lavorare —
troppo presto per andare a letto; l’ora in cui i grilli cantano con più
sentimento e in cui le civette e i gufi della Gallura cominciano la
monotona serenata degli sbuffi e dei fischi cadenzati; l’ora che invita
le madri a preparar la cena, e le figlie a ricambiare una stretta di
mano con l’innamorato.
Una quiete serena regnava per le campagne dell’Avru.
Anton Stefano e Giuseppe si erano allontanati per visitare alcuni
terreni, verso l’Adu di Sarzughe. La mamma, con le serve, era in
cucina, intenta a impastar la farina; le due figlie maggiori si
pettinavano sul limitare dell’uscio e Gavina si era recata nel
cortiletto, per spiccare dalle corde i pannellini che il sole con tutto
comodo aveva rasciugato nelle sue dodici ore di viaggio.
Bastiano, seduto all’estremità del piazzale, era quasi solo. Col fucile
fra le ginocchia e col volto fra le mani, pareva riflessivo, annoiato. La
vecchia per un po’ di tempo lo aveva tenuto a bada; poi lo aveva
piantato lì senza tanti riguardi, per accudire alle faccende
domestiche. Voleva fargli capire che la sua presenza cominciava ad
essere incresciosa, e che se veniva tollerato lo era solo per cristiana
misericordia.
Il muto non era così gonzo da non avvedersi della diversità di
trattamento che riceveva in quella casa. Capiva benissimo che nello
stazzo era di troppo, ma si era rassegnato a subire qualunque
umiliazione, pur di non rinunziare alla visita di Gavina. — Giacchè
ogni altro conforto gli era negato.
La fanciulla dal suo canto, non faceva che contraccambiargli il saluto
— senza trattenersi con lui, come per lo passato. Ella aveva disposto
le cose in modo, che non le rimanesse un minuto di libertà. Era
sempre affaccendata in occupazioni, create lì per lì per darle il
pretesto di star lontana dal muto.
Bastiano fingeva non accorgersi di nulla; sorrideva mestamente al
sorriso di Gavina, ma provava una stretta al cuore.
Stanco finalmente di rimaner solo nel piazzale, egli si alzò
lentamente si accostò all’uscio dello stazzo vi cacciò dentro la testa,
e mandò dalla gola un urlo. Quell’urlo era la buona sera ch’ei soleva
dare alla famiglia, quando lasciava lo stazzo.
La vecchia con le maniche della camicia rimboccate era venuta in
sulla soglia per restituire il saluto a Bastiano; ma era subito rientrata
in casa, perchè vi si faceva il pane, e non poteva abbandonare la
pasta.
Il bandito prese a destra, verso Aggius; fece il giro dello stazzo, e
passò dinanzi al cortiletto, dove Gavina ritirava i panni dalle corde.
La vide, e si fermò a contemplarla.
Gavina non aveva sentito le pedate del muto nè poteva immaginare
che in quella sera l’ospite lasciasse lo stazzo prima dell’ora.
Dopo aver alquanto riflettuto, Bastiano si diresse pian piano verso di
lei, e le si fermò dinanzi.
L’inaspettata apparizione fece trasalire Gavina; ma non ebbe il tempo
nè credette conveniente allontanarsi da lui. Chinò gli occhi a terra, si
lasciò cadere le braccia lungo il corpo, e stette immobile — come se
aspettasse una condanna dall’uomo ch’ella aveva involontariamente
lusingato co’ sorrisi e le attenzioni. Gavina teneva sempre la testa
bassa; non guardava il muto, ma sentiva il fascino di quegli occhi
lampeggianti che le metteva un brivido in tutta la persona. Il bandito
non fece altro che allungare la mano verso di lei, e col pollice e
l’indice le pizzicò dolcemente il lobo dell’orecchio, come per chiederle
conto degli orecchini che vi mancavano.
La fanciulla comprese quanto il muto voleva dirle, levò gli occhi su
lui, quasi per implorare pietà; e con le mani giunte, fissando il muto
con uno di quegli sguardi che di consueto lo disarmavano, gli fece
intendere che la perdonasse; che lei non ci aveva colpa che lo
avrebbe amato sempre... ma come un fratello.
Ma Bastiano non faceva che guardarla negli occhi, dimenticando le
promesse fatte e gli avvertimenti di Anton Stefano e della moglie.
La belva era domata. Bastiano si avvide ben tosto che aveva bisogno
di allontanarsi da quella donna per gustare tutte le voluttà dell’odio.
Dinanzi a lei non provava che amore — soltanto amore.
Fra le stranezze del suo sentimento, ve n’era una che non sapeva
spiegare: egli non aveva mai nudrito odio nè rancore per Gavina —
cercava sempre in altri le cause della sua infelicità, non mai nella
figlia di Anton Stefano.
Finalmente — temendo di venir sorpreso da qualcuno, o di
commettere qualche imprudenza — il muto stese la mano a Gavina,
come per darle e ricevere un saluto — un addio. La fanciulla dopo
aver esitato, si decise a mettere la sua bianca manina in quella
ruvida di Bastiano — e allo stesso tempo portò il grembiale agli
occhi, per asciugarsi le lacrime che cadevano copiose.
Allora il muto, con dolce violenza si recò alle labbra quella mano
prigioniera, e v’impresse un bacio infuocato.
Ad un tratto però, Gavina levò la testa. La sua fisonomia si era
d’improvviso trasfigurata: i suoi occhi scintillavano di gioia: le sue
labbra tremanti si erano composte ad un ineffabile sorriso, mentre le
sue orecchie tese parevano carezzate da una musica celeste.
Che cosa era avvenuto?
Bastiano ebbe un lampo di speranza!
Ma l’infelice si era ingannato! L’emozione di Gavina, che lo rendeva
pazzo di gioia, avrebbe dovuto invece gettarlo nella disperazione.
La timida fanciulla aveva udito la voce di Giuseppe, il quale tornava
dall’Adu di Sarzughe in compagnia del padre — e quella voce aveva
la virtù di accenderle il sangue. Il suo Giuseppe cantarellava una
strofetta che suonava per lei rimprovero.

Bedda, paichì tanti peni


Senza muttiu mi dai?
Sarà forsi paichì m’hai
Siguru in li tò cateni?

Pallida, spaventata, misurando la gravità della sua imprudenza,


Gavina tentò svincolare la sua mano dalla mano del muto; ma il
muto non volle lasciare la fanciulla senza dirle coi segni:
— Non devi amar nessuno! perchè sarei capace di uccidere l’uomo
che ti facesse sua!
Gavina mandò un grido d’orrore, si svincolò da quella mano
d’acciaio, e fuggì verso lo stazzo.
Bastiano era sordo — nè aveva udito la canzone di Giuseppe.
Acciecato dalla passione, si era lusingato del turbamento di Gavina;
credeva l’insensato, che l’amore si destasse nel cuore della fanciulla,
mentre invece esso andava spegnendosi.
Col cuore pieno di speranze, riprese la viottola tortuosa che
conduceva alla valle di San Gavino....
Il canto di Giuseppe si era bruscamente interrotto.
Tanto Anton Stefano, quanto il suo futuro genero, avevano veduto
nella penombra la Gavina correre spaventata verso lo stazzo; e poco
dopo il muto che se ne allontanava frettoloso, prendendo la viottola
dell’orticello. Entrambi immaginarono la ragione di quella fuga, e ne
provarono dispetto e gelosia. L’uno però non comunicò all’altro
l’impressione ricevuta. Giuseppe calmo in apparenza, disse al vecchio
che era suo desiderio rientrare nell’Avru dalla parte del piazzale, non
volendo incontrarsi col muto, e difatti prese la scorciatoia. Anton
Stefano tirò dritto per la sua strada, volendo invece andare incontro
al muto.
Gli tagliò infatti la strada, e gli si piantò dinanzi. Bastiano fu costretto
a fermarsi.
— Donde vieni? — gli disse con un gesto e con piglio burbero Anton
Stefano.
Il muto allungò la mano, e gli indicò lo stazzo.
— Non vuoi dunque capire che le tue visite sono importune?
Il muto allungò il collo e aprì la palma delle mani per
domandargliene la ragione.
— Perchè mia figlia è fidanzata con Giuseppe, ed è tempo che tu
smetta le molte corbellerie che hai per la testa!
— E che faccio a tua figlia? — continuò Bastiano sempre co’ suoi
gesti abituali.
— Fai che m’indisponi il fidanzato, mi spaventi la figliuola, e mi turbi
la casa, dove non siamo più padroni di vivere come ci pare e piace!
— E così... non devo più venire nello stazzo?
— No — fece Anton Stefano, dondolando l’indice della mano destra.
— E se io venissi?
Anton Stefano, infastidito, fece col piede il gesto di dargli un calcio.
— Hai capito, finalmente? Non ti voglio più trovare nello stazzo. È la
seconda volta che ti ho avvertito; alla terza saprò come regolarmi!
— Mi ucciderete forse?!
— In casa mia non ti voglio nè morto nè vivo! Intendi?!
E senz’altro dire, nè aspettare risposta, Anton Stefano piantò il muto
in mezzo alla viottola e s’incaminò verso lo stazzo.
Il muto si volse due volte per guardare il vecchio che si allontanava;
indi si cacciò nel sentiero, come un disperato.
L’addio dato a Gavina, la vista del rivale, le minaccie del vecchio, gli
avevano fatto salire il sangue al cervello.
Continuò la strada con la testa china camminando a balzi, con un
tintinnio nelle orecchie, col fiele sulle labbra e coll’affanno nel cuore.
Giuseppe non era rientrato nello stazzo per la porta del piazzale,
come aveva detto al suocero. Aveva fatte un lunghissimo giro,
coll’intento di tagliar la strada al muto, verso la vallata.
Il cugino di Gavina era furente. Già da qualche mese egli si era
contenuto, vinto dalle preghiere di Anton Stefano, ma ormai
l’aspettare più a lungo gli pareva vigliaccheria. Aveva sopportato
abbastanza per amor della cugina i capricci del sordo-muto: e
sebbene fosse sicuro dell’affetto di lei pure non era tranquillo. Nella
condotta di Gavina vedeva una timidezza tale, che lo inquietava, e lo
rendeva suo malgrado geloso di quel disgraziato, che credeva capace
di qualunque tiro.
Egli ben lo ricordava: la suocera un giorno si era lasciata sfuggire
una frase molto significante; — se il muto non si stancherà di
frequentare lo stazzo, si cercherà un mezzo per farlo stancare.
La vista di Gavina che fuggiva, e del muto che la seguiva a breve
distanza, gli fecero perdere la ragione: era sulle furie, e voleva
approfittare del momento propizio. Era sicuro che Bastiano gli
tendeva un’insidia, e pensò di prevenire il colpo.
Sedette fra due macchie di lentischio, poste sopra un poggio, dove la
viottola faceva gomito. Per di là doveva passare il sordo-muto ed egli
lo aspettò. Era trafelato per la corsa fatta, ma vi era arrivato in
tempo....
Dieci minuti dopo si udì una detonazione.
Bastiano Tansu — che aveva oltrepassata di cinquanta passi la meta
— sentì all’orecchio il fischio d’una palla. Agile come un capriolo, fece
due salti avanti e si voltò. — Si udì un altro sparo, e una seconda
palla andò a colpire il calcio del suo fucile, e glielo ruppe.
Questa volta, però, Bastiano credette ravvisare il suo nemico che
saltava una siepe, e gli mandò dietro una palla, che non lo colse.
L’ira che acciecava i due rivali, e l’ora tarda, avevano mandato a
vuoto i loro colpi.
Bastiano seguì con gli occhi l’uomo che si allontanava, guardò il
calcio rotto del suo fucile e compose le labbra ad un riso infernale.
— Non ti ringrazio di avermi salvata la vita — pensò con rabbia —
perchè della vita son stanco. Ti ringrazio, perchè poni in pace la mia
coscienza. Miserabili! — aggiunse, minacciando con la mano l’Avru —
voi mi avete sciolto dal più insensato de’ giuramenti!
E continuò la strada incamminandosi verso gli stazzi della Trinità
d’Agultu.

XIII.
Vendetta

Era la notte del 5 al 6 luglio del 1857.

· · · · · · · · · · · · · · · ·

A passi lenti, chiuso ne’ suoi pensieri camminava per ore ed ore,
senza sapere ove andasse.
Si aggirava inquieto intorno allo stazzo dell’Avru; ma finiva per
ritornare ad uno speco, chiuso fra tre massi di granito, per poter
fissare il pallido lume che vedeva sfavillare laggiù, in mezzo alle
tenebre: stella funesta che annunciava una vendetta — punto
luminoso che pareva additasse una vittima da colpire.
Dal giorno che Anton Stefano lo aveva coperto d’insulti; dal giorno
che Giuseppe gli aveva spezzato il calcio del fucile, facendogli fuoco
addosso, Bastiano non aveva più voluto metter piede in alcuno
stazzo: nè in quello dell’Avru, nè in altri.
— Ormai son solo! — ei pensava — Non ho più sposa, non ho più
amici, non ho più parenti. La sposa si è tolta dalle orecchie i miei
orecchini per dirmi che tutto era finito; l’amico mi ha scacciato dalla
sua casa come un cane; i parenti han fatto lega co’ miei nemici per
perdermi. Han tutti congiurato la mia morte, dunque son solo!
E da quel giorno il muto aveva giurato odio alla sposa, agli amici, e
più di tutti ai parenti: — ai parenti che gli avevano strappato il
giuramento di non recare offesa alla famiglia di Anton Stefano, senza
reclamare ugual giuramento dalla parte avversa. L’omissione di
questa formalità poteva nascondere un perfido disegno, e riuscirgli
fatale. Era mai presumibile che i parenti avessero dimenticata una
promessa che garantiva la sua vita? O piuttosto, nell’ometterla, non
avevano essi cercato un mezzo più facile di disfarsi di lui, perchè
stanchi di sopportarlo? Eppure erano stati loro la causa prima d’ogni
sua sventura! Cieco strumento dei Vasa nell’odio che nutrivano per i
Mamia, per essi si era macchiato di sangue umano. Ecco la
ricompensa che gli davano.
Rabbia, dispetto, vendetta: — erano questi i sentimenti che si
combattevano nell’anima del muto nella notte che precedette l’alba
del 6 luglio!
Chi aveva potuto armare il braccio del suo rivale? Anton Stefano e
sua moglie! — così ragionava Bastiano. — Essi soli avevano
congiurato la sua morte. Mancava loro un braccio punitore — e lo
avevano trovato in Giuseppe, a cui si concedeva la mano di Gavina in
premio d’un assassinio. « — E i miei parenti plaudirono alla trama
infernale! Dopo aver approfittato della mia generosità, mi gettano
ora in un canto, come uno strumento inservibile. E mi sta bene!»
E Gavina?
Al pensiero della figlia di Anton Stefano le smanie del muto parevano
calmarsi; egli dimenticava gli odii, le vendette e i rancori, per non
pensare che a lei. Richiamava alla mente il giorno felice in cui Gavina
gli sedeva al fianco sotto l’ombra del cespuglio spinoso, e al ricordo
di quel braccio nudo, sul quale aveva impresso un bacio ardente,
sentiva il sangue affluirgli al cuore.
Ad un tratto i suoi pensieri presero un altro indirizzo. Gli pareva di
veder Giuseppe, più fortunato di lui, stringersi al petto la bella cugina
per baciarla in bocca. Allora digrignava i denti; levava al cielo i due
pugni minacciosi, e si dava a correre come un disperato, volendo
quasi fuggire quella visione infernale, che lo perseguitava dovunque.
Il suo odio, come i suoi pensieri, si scatenavano allora contro i due
vecchi, che riteneva unica causa della sua infelicità.
— Se Anton Stefano avesse voluto, Gavina sarebbe stata mia! Fu lui
che si lasciò dominare dalla moglie; da colei che mi ha preso a
gabbo: che mi ha restituito i doni, e che ha concesso la propria figlia
al primo venuto, a patto che mi uccidesse! Su lei sola, dunque,
dovrebbe ricadere tutta la mia collera; ma io non sarò così vile da
macchiarmi del sangue di una femminuccia. Voglio colpirla, sì, nel
cuore, ma in modo ch’essa viva per poter conoscere la mano che l’ha
colpita. Le nozze di Gavina hanno da essere lugubri: il giorno
dell’abbraccio non dev’essere per alcuno un giorno di gioia —
dev’essere per tutti un giorno di lutto!
E così pensando gettava uno sguardo terribile sullo stazzo; perocchè
in mezzo alle tenebre che regnavano nella sua mente, egli non
vedeva che quel lume lontano che altri forse avrebbe scambiato con
gli astri del firmamento — non però lui che ben sapeva discernere le
stelle del cielo dai fuochi della terra!
Erano stati per lui due giorni di agonia, quelli che precedettero
quell’alba funesta! Bastiano vedeva tutto fosco; il cielo gli si
presentava sotto un diverso aspetto, la terra aveva per lui nuovi
linguaggi: la natura, invece di dargli calma, pareva volesse
suggerirgli pensieri sinistri. Il giorno prima aveva errato nella foresta
dell’inferno — e forse l’Inferno aveva soffiato nella sua anima.
Tutto gli parlava di morte.
Strane paure, di cui non sapeva darsi ragione, gli si addensavano in
cuore. Gli pareva che ogni cespuglio, ogni crepaccio nascondessero
una creatura umana; che la stessa solitudine fosse popolata di
lugubri fantasmi.
Tutto, a lui d’intorno aveva vita — tutto aveva una parola.
Quando attraversava qualche gola i grossi macigni gli apparivano
come giganti minacciosi che aspettassero un soffio di vento per
piombargli addosso — quando poneva il piede sulle pianticelle
vermiglie che crescono a grappoletti sul muschio o sui licheni del
granito, gli pareva di calpestare sangue aggrumato [25]; quando
s’internava nelle foreste dei sugheri, trasaliva dinanzi ai tronchi rossi
degli alberi a cui era stata tolta la corteccia. Avrebbe giurato che
quelle quercie insanguinate storcessero le braccia per dolersi delle
loro piaghe — oppure che gridassero vendetta contro gli uomini che
le avevano assassinate.
E pensava raccapricciando:
— Dovunque passa, il Gallurese lascia traccia di sangue, — anche sui
graniti e sulle piante!

*
Il lumicino si era spento, e lo stazzo dell’Avru era immerso nelle
tenebre. Tutta la famiglia di Anton Stefano riposava — ma il muto
vegliava per loro.
Accovacciato nello speco, ed in preda ad un tremito nervoso,
Bastiano passò la notte a guardare le stelle, finchè le vide sparire ad
una ad una.
I primi bagliori del giorno nascente cominciarono a tingere le creste
dei monti d’un color scialbo.
Bastiano era stanco, pallido, intirizzito, ma non staccava gli occhi
dalle casette dell’Avru, che cominciavano a rischiararsi a poco a
poco.
Ad un tratto la porta dello stazzo si schiuse, e un uomo comparve
sulla soglia.
Era il pastore Anton Stefano che aveva lasciato le coltri per esplorare
il tempo. Era l’ora in cui le sue cure lo chiamavano alla campagna e il
muto lo sapeva, perchè pratico delle abitudini di quella famiglia.
Al disotto dello speco che serviva di vedetta a Bastiano era un
sentiero che conduceva ad un chiuso. Per di là doveva passare il
povero vecchio.
Un’ora dopo il sole gettava i suoi sprazzi luminosi sulla campagna,
che pareva destarsi alla vita.
Anton Stefano accese la pipa, montò sulla sua cavalla, s’incamminò,
passo passo, per la viottola che rasentava la collina.
Il muto fremette. La vista di quell’uomo produsse in lui un effetto
singolare. Mentre da un canto sentì riaccendersi nell’anima l’ira e la
vendetta, dall’altra gli tornarono in mente l’affetto e la generosità di
quel vecchio pastore, che un dì lo aveva raccolto, protetto,
alimentato....
Un velo di sangue offuscò la sua ragione, e sentì mancarsi. Aveva un
tremito alle mani, ed un cupo ronzìo alle orecchie.
Aveva sempre colpito le sue vittime con freddo coraggio... e questa
volta si sentiva pusillanime.
Chiuse gli occhi spaventato di sè stesso — sperando quasi che il
pastore potesse salvarsi oltrepassando la mèta. Li riaprì lentamente
dopo alcuni minuti... e guardò.
Anton Stefano trovavasi sotto di lui — a tiro del suo fucile.
Bastiano era pallido, tremante.
Gli parve che uno spirito infernale fosse entrato nel suo corpo, e che
operasse nel suo spirito indipendentemente dalla volontà.
Egli guardava a sè dinanzi, come inebetito, non opponendo alcuna
resistenza alla forza misteriosa che ridestava i suoi istinti di belva.
Il fucile passò dalle sue ginocchia alle sue mani; ne montò il grilletto,
lo spianò, puntò... e chiuse nuovamente gli occhi, quasi sperando
che il colpo andasse a vuoto.
Si udì una detonazione.
Anton Stefano ebbe appena il tempo di girare la testa per sapere
dond’era partito il colpo. Vide il suo feritore lassù, in piedi fra due
cespugli, con gli occhi e la bocca spalancati.
Mandò un grido acuto, portando la mano destra al petto... Barcollò,
si contorse, tentò afferrarsi alla criniera della cavalla, ma cadde a
terra gridando aiuto per due volte.
Il muto, svelto come un capriolo, era sparito fra i macigni ed i
lentischi.

*
Allo sparo dell’arma ed alle grida del ferito, le donne, Giuseppe ed i
servi, uscirono dallo stazzo. Essi presentirono l’accaduto quando
videro la cavalla di Anton Stefano che tornava sola dall’Avru. La
povera bestia era tornata indietro, quasi ad annunziare alla famiglia
la disgrazia toccata al suo padrone.
In un baleno si recarono tutti presso al caduto, che si contorceva,
tentando invano di puntellare una mano a terra per rizzarsi.
Furono pianti, urli, grida che straziavano l’anima.
Il vecchio fu sollevato alquanto. Aveva il viso color della cera, l’occhio
vitreo, le labbra insanguinate. Volse intorno gli occhi, stranamente
spalancati, cercando quasi di darsi ragione dell’accaduto.
— Chi ti ha colpito? Parla! parla! — gli chiedevano con ansiosa
premura i servi!
— Il muto, non è vero? — esclamarono insieme Giuseppe ed i
pastori, già resi feroci dal pensiero della vendetta. E avvicinarono
con avidità le loro orecchie alla bocca del morente per raccogliere
coll’ultimo respiro il nome dell’uccisore.
Il vecchio volse in giro gli occhi vitrei, e li fissò a lungo sul volto della
moglie. Finalmente con un supremo sforzo pronunciò queste parole:
— Date uno scudo a San Gavino... Mi ha ucciso il muto... Dovevamo
prevederlo!
Non disse altro.
La scena che accadde in seguito è più facile immaginarla che
descriverla. Le figlie, la moglie, le serve urlavano disperatamente
strappandosi i capelli e assistettero raccapricciando ad un’agonia
straziante che durò due ore.
Uno dei più rispettabili pastori della Gallura, caro a tutti per bontà di
cuore, per nobiltà di carattere e per onestà di costumi, era stato
tolto dal mondo. Lo stesso Pietro Vasa, quando apprese l’accaduto,
esclamò con risentimento:
— Per compensare la morte di Anton Stefano non basterebbe
l’uccisione di diciotto uomini!
PARTE QUARTA
FINALE

I.
Sulla china del monte

Erano trascorsi dieci mesi.


La campagna, palpitante sotto le prime carezze della primavera, si
era tutta ricoperta di fiori, quasi sposa feconda che sorrida
all’amante.
Era l’ora dello sconforto, del silenzio, della solitudine. La natura,
stanca, parea cercasse il riposo.
I monti prendevano colori foschi, fantastici; il mare lontano, sbiadito,
pareva confondersi col cielo, nell’ampia distesa che divide l’isola
Rossa da Castelsardo. Il sole era da poco calato dietro all’isolotto
dell’Asinara, e lunghe nuvole infuocate listavano ad occidente
l’orizzonte. Quella luce sanguigna tingeva di rosso tutte le vette dei
monti, e fusa coll’azzurro purissimo del cielo produceva quella nebbia
violacea e vaporosa che dà al crepuscolo della sera un’intonazione
calda, melanconica.
La solitudine era profonda. Non si vedeva alcuna foglia muoversi
poichè nessun vento spirava. Solamente il timo e le altre erbe
aromatiche, recavano in giro i loro profumi, destati dalle ombre che
calavano lente. Le selve degli elci sembravano grandi macchie nere,
compatte; i graniti mandavano l’ultimo scintillìo sotto i raggi
infuocati, che andavano impallidendo. Le nuvole sottili che listavano
l’orizzonte, da rosse si erano fatte violacee — da violacee turchine. E
la natura diventava sempre più triste, più fosca, più misteriosa.
Le forme dei monti, dei graniti, e dei folti lentischi apparivano sotto
profili incerti, indefiniti; e i colori si confondevano insieme,
perdendosi in isfumature leggere, o cariche.
La canzone di qualche pastore gallurese, il quale guidava le mandrie
all’ovile, si era perduta in lontananza, insieme al tintinnìo monotono
delle campanelle.
Un uomo, tutto solo in quel deserto silenzioso, attraversava lo spazio
che separa le colline di Petra Màina dal monte di Cucurenza.
Camminava lento lento, con passo incerto — col passo stanco del
proscritto che si dà in braccio ad un cieco destino, senza lotta e
senza tema d’insidie.
La notte lentamente calava, ed egli camminava sempre col proposito
di fermarsi dove avrebbe trovato un giaciglio che lo riparasse
dall’umido della sera. Non aveva casa, non aveva famiglia, motivo
per cui nessuno poteva aspettarlo.
La campana della parrocchia d’Aggius suonava l’ave Maria, e quei
rintocchi lontani, portati dalla brezza serale su quelle alture, si
perdevano in un fievole lamento.
Quell’uomo, forse, avrebbe pregato all’annunzio dell’Ave Maria — ma
egli era sordo, e non udiva la campana; era muto e non sapeva
pregare.
Bastiano — poichè era lui — levava di tanto in tanto gli occhi, quasi
misurando la distanza che lo separava dal monte di Cucurenza, a cui
pareva diretto.
Il monte aveva preso una tinta nera, e la sua vetta spiccava
nettamente nel limpido cielo infuocato che le serviva di sfondo.
Tratto tratto il muto si voltava per gettare un’occhiata al colle di
Petra Màina o alla catena dei monti d’Aggius, di cui vedeva appena le
punte di tramontana.
Una forza misteriosa pareva spingerlo verso la vetta del monte, sul
quale saliva; ma un pio desiderio, un ricordo lontano, un sentimento
doloroso gli faceva volgere la testa per salutare quelle due montagne
da cui si allontanava la crocetta e Petra Màina. Tutta la sua vita si
era svolta là, fra quelle due punte che gli parlavano d’Aggius e
dell’Avru, della patria e dell’amore — della madre e dell’amante, le
sole donne che lo avevano amato sulla terra.
Bastiano pareva chiedere ai monti d’Aggius la benedizione di sua
madre — e ai monti dell’Avru il perdono della sua Gavina.
Sogni! sogni! — La madre in quell’ora riposava nel silenzio del
sepolcro — e la Gavina forse posava il capo sul petto del suo
Giuseppe!
Ormai lo sapeva: Gavina non poteva esser più sua. Egli stesso aveva
spezzato l’ultimo filo di speranza. Fra lui e la cara fanciulla sorgeva
minacciosa l’ombra d’un vecchio canuto che gli rinfacciava l’ospitalità
tradita. E Gavina non poteva più stendere la mano ad un assassino
— a colui che le aveva ucciso il padre!
Bastiano era già arrivato alla metà del monte. Saliva lentamente,
svogliato, senza fretta, come se poco gli premesse arrivarci presto o
tardi. Poteva andare incontro a un agguato — o poteva anche
sfuggirlo: poco gli premeva. Non aveva premura, tutto il tempo era
suo, e nessuno poteva chiedergliene conto.
Quell’essere umano come un punto nero, si era confuso nelle ombre
vaporose del monte.
Saliva, saliva sempre, volgendosi ad ogni istante per salutare le
punte di Petra Màina, che spiccavano ancora in tinte rosee su cielo
nero. Quelle di Aggius non le vedeva più perchè si erano nascoste
dietro il Monte Spina. Prima dell’amore, era sparita dai suoi occhi la
patria!
Strano contrasto! A ponente un cielo limpido, sereno; a levante le
nuvole si addensavano minacciando un uragano.
Il muto giunse finalmente al culmine di Cucurenza. Uscito appena
dal seno tenebroso del monte, il suo cappuccio accuminato si
disegnò sul fondo rosso del cielo. Dalle falde del cappotto usciva la
canna del suo fucile, ch’egli portava sotto il braccio. — Veduta da
lontano, quella figura pareva il mezzo busto di un nero cappuccio,
disegnato nel fondo trasparente di un cielo luminoso.
Quando raggiunse il culmine, stette alcuni minuti immobile, colla
testa rivolta verso le punte d’Aggius e dell’Avru, ch’egli salutava per
l’ultima volta poi parve sprofondarsi a poco a poco finchè non si vide
il solo cappuccio accuminato. Poco dopo anch’esso si abbassò... e
scomparve.
La bruna vetta del monte tornò a distinguersi nettamente sul limpido
sfondo del cielo.
Dov’era andato Bastiano? era forse disceso nell’altro versante del
monte, oppure si era fermato sulla spianata dove sorge la chiesetta
di San Giuseppe? — Era forse un’ambascia senza nome che lo
spingeva lassù, a chiedere il perdono dei suoi peccati? Oppure aveva
proseguito il suo cammino fino a Paduledda, o a quella Cala falsa,
dove nel 1671 furono tratti in inganno il marchese di Cea e i suoi
compagni, dal traditore Don Giacomo Alivesi?
Le nuvole salivano sempre, e l’azzurro del cielo spariva a grado a
grado sotto le loro spire.
La notte aveva tutto cancellato — tutto avvolto nelle sue ombre:
l’uomo ed il monte!

· · · · · · · · · · · · · · · ·

Il terribile, il feroce bandito che dovunque aveva seminato lo


scompiglio e il terrore era finalmente scomparso al di là di
Cucurenza.
Gli abitanti tutti della Gallura, con grido unanime, avevano sempre
imprecato al mostro, al dannato, al maledetto.
Ma chi mai era penetrato nel buio sepolcrale di quella coscienza che
non s’era rivelata che a Dio? Chi mai aveva saputo leggere in
quell’anima tribolata, per incidere una condanna infamante sul libro
della storia? Gli uomini non certo. Il loro Codice, forse? No: il muto
era fuori della legge, com’era fuori dal mondo; perchè le leggi sono
fatte per gli uomini e Bastiano non era un uomo!
Colui che giudica questi disgraziati alla stregua della propria
educazione, forte dei sani principi appresi dall’esempio della famiglia
e dell’insegnamento della scuola, non può farsi un giusto concetto
del loro valore — e ben di rado sa trovar una parola di compatimento
pietoso, in favore di una creatura che, per avversità di fortuna o di
destino, ha sempre vissuto nelle tenebre di una feroce ignoranza.
La società ha creato il maestro ed il giudice; il primo perchè insegni
le buone regole del vivere civile — il secondo perchè applichi gli
articoli del codice ai trasgressori delle leggi sociali. Ma il muto, a cui
il giudice applicava le pene, aveva egli fruito, o poteva fruire degli
insegnamenti del maestro? — A qual coscienza doveva attingere
Bastiano i sentimenti nobili — egli nato sordo e muto, cresciuto nella
miseria e nell’ozio, gettato in mezzo ai boschi, e condannato a vivere
ramingo con l’odio nel cuore e l’urlo della fiera sulle labbra? Qual
concetto poteva egli formarsi dei diritti e dei doveri sociali?
I diritti ed i doveri li aveva ben esercitati con lui la giustizia umana,
quando per punirlo lo aveva perseguitato di balza in balza, di monte
in monte. Ma, non so se il miglior vanto della legge consista proprio,
come si crede, nella superba scritta incisa sopra il banco dei giudici!
Se è vero che la legge è uguale per tutti, è vero altresì che non tutti
sono uguali davanti alla legge; e la ragione potrebbe esser questa;
che il Codice è uno e gli uomini sono molti!
D’altra parte bisogna pur convenire, che il Codice penale è clemente
coi sordo-muti, e infatti coll’art. 92 li assimila ai giovani maggiori di
14 e minori di 18 anni, e commuta generalmente la pena di morte in
quella della reclusione per anni quindici! E vi ha di più: risparmia loro
la proibizione dell’uso della parola, che forma il principale supplizio
dei reclusi!
Bastiano era come il granito dei suoi monti. Al silenzio che lo
circondava non aveva risposto che col silenzio. Nessuno più lo
comprendeva, ed egli non se ne dolse. Dopochè si era dileguata la
speranza dell’amore, non sentì più il bisogno d’essere compreso.
Nel suo cuore senza speranze, come quella notte senza stelle, era
sceso un silenzio sepolcrale.
Bastiano ubbidiva ciecamente al destino.
Ed era scomparso nell’ombra al di là del monte nero.

*
Appena scomparso il muto tre uomini uscirono da uno dei crepaci di
granito che sono alle falde di Cucurenza. Erano tutti armati di fucile,
e col cappuccio tirato sugli occhi.
Ciascuno di essi — il giorno prima — era partito da un punto diverso:
da Bortigiadas, da Aggius e dalla Trinità di Agultu. Si erano trovati
insieme la mattina seguente: verso sera avevano attraversato le
vallate di Conchedda e di Chiligheddu, tra Muntlju di li Culzi, e il rio
Pirastro, e la vista di Bastiano li aveva colpiti in un modo singolare,
tanto che, istintivamente sentirono il bisogno di celarsi, per non
essere veduti. Si sarebbe detto che l’improvvisa comparsa del muto,
rispondesse, a completare un piano da lungo tempo meditato.
Fra quei tre uomini furono scambiate a voce bassa le seguenti
parole, che io riporto fedelmente, lasciando al lettore, la cura di
decifrarne il misterioso significato, a me ignoto:
— Pare proprio il destino — disse l’uno.
— Oppure il diavolo — soggiunse l’altro.
— Dunque?... esclamò il terzo con l’impazienza di chi vuol troncare
ogni chiacchera per venire ad una conclusione.
— Dunque è intesa.
— A quando?
— A domani, se non avrò intoppi.
— Dove?
— Non lo so. Forse alla Trinità — forse allo Stagnone — forse a Littu
di Zòccaru!
— Come?
— Ciò mi riguarda.
— È giusto. Dove hai attinto le informazioni necessarie?
— A Tempio.
— Perchè non ad Aggius?
— Perchè in Aggius le nevi si sciolgono molto prima che a Tempio.
— E vuol dire?...
— Che ad Aggius fa più caldo di Tempio.
— Ho capito. Io per tanto ritornerò in paese.
— Ad Aggius?
— Sì. Ditemi però: nel caso... chi di voi mi avviserà?
— Io no, perchè sono incaricato di recarmi sotto Castel Doria per
riferire sul mio operato.
— Allora sarò io — disse il secondo. — Domani dovrò trovarmi sul
monte della Crocetta, dove ho un appuntamento con un aggese.
— Ti aspetterò in paese.
— Dimenticate ch’io sono un fuoruscito?
— Come farai dunque?
— Aggius è alle falde della Crocetta.
— Ebbene?
Quest’uomo allora abbassando la voce, come se temesse che i
graniti di Cucurenza gli facessero la spia, spiegò il suo disegno.
— Ben trovata!
— Siamo dunque d’accordo.
— Una pietra nel pozzo.
E i tre uomini si separarono. Due di essi fecero il giro del monte da
parti opposte; il terzo tornò indietro, e a passi frettolosi prese la
direzione d’Aggius.

II.
Il Gran Tamburo

All’indomani l’alba fu più tarda ad affacciarsi ai colli di Calangianus.


Neri nuvoloni correvano il cielo, sospinti da un vento furioso di
tramontana.
Era uno degli ultimi giorni di marzo. Le punte del Giugantino,
ricoperte di neve, spiccavano nettamente nel cielo nerissimo, il quale
somigliava ad un manto funereo steso sulla Gallura.
Lontan lontano udivasi un urlo cupo, prolungato, lamentoso. Pareva
l’urlo d’una lupa che chiamasse al covo i lupicini, per metterli al
sicuro dalla tempesta imminente, annunziata da un improvviso
acquazzone.
Le aguzze creste dei monti d’Aggius — che prima parevano sfidare
l’ira degli elementi — erano ad un tratto scomparse sotto una nuvola
nera. Avresti detto che sulle punte maledette si covasse un delitto
che si voleva nascondere all’occhio degli uomini. Il diavolo si
compiace di lavorare nel mistero degli uragani.
Il sole, durante la giornata, non era riuscito a fare uno strappo al
denso velo che ricopriva la volta celeste — ma l’orizzonte, a ponente,
era solcato da spessissimi lampi. Gli uomini della campagna
assicuravano che la sera sarebbe stata uguale al mattino, e la notte
assai più tempestosa della sera. Ond’è che ognuno avea curato di
mettere in salvo i propri armenti, ritirandoli negli ovili.
Gli aggesi erano rientrati nelle loro case, e si erano rinchiusi per
mettersi al sicuro dalla collera di Dio — e da quella degli uomini, più
temibile ancora. I bambini si erano rintanati in fondo alle stanze; le
vecchie mormoravano una preghiera per gli assenti invocando tutti i
santi del paradiso ad ogni lampo che faceva capolino dalle fessure
delle porte e delle finestre.

*
Attorno a pochi tizzi che fumavano crepitanti sul focolare d’una
casetta, posta all’estremità superiore del villaggio, stavano raccolte
parecchie persone, componenti una famiglia.
La padrona di casa, piuttosto giovine e alquanto malaticcia, era già a
letto, insieme coi suoi due bambini; la vecchia nonna, settantenne, si
riscaldava dinanzi al fuoco; ed il capo della famiglia — un uomo sui
trent’anni, dalla barba nera e dai capelli lunghi — era in piedi vicino
a un cassettone antico, intento a ripulire le canne del suo fucile;
perchè la ruggine non le danneggiasse. — I buoni aggesi non
potevano dimenticare il loro fucile: era l’arma favorita, e sapevano
che bisognava accarezzarla ogni tanto, per rendersela amica. Erano
tali gli odi d’allora, che quasi si diffidava del proprio fucile!
Il tuono brontolava lontano; e la vecchia, ch’era seduta in un canto,
co’ piedi sopra la cenere e col corpo chino sulle brace, non faceva
che recar la scarna mano alla fronte, per farvi replicatamante il
segno della croce, invocando ad ogni istante santa Barbara.
In quella famiglia notavasi come un’inquietezza paurosa. Non si
osava parlare per timore di provocare il temporale.
Il capo della famiglia cercava infondere coraggio agli altri; egli si
provava a sgridare le donne ed i bambini: ma in fondo era più
impressionato di tutti. I suoi movimenti nervosi tradivano l’interna
inquietudine, da cui pareva dominato.
I tuoni si facevano sempre più forti, e brontolavano sempre, come
impazienti, ringhiosi. Il temporale si avvicinava. I lampi fendevano di
tanto in tanto le nubi che si addensavano sul villaggio, e mettevano
in mostra le punte aguzze della Crocetta, del Fraìle e di Tumeusoza,
le quali apparivano improvvisamente sul nero fondo del cielo, tinti
dal colore del sangue.
E la vecchia fremeva, rosariando, accoccolata sulla cenere. Si faceva
piccina piccina — quasi sperando di sottrarsi all’ira celeste, col
raggomitolarsi.
L’uomo dalla barba nera e dai capelli lunghi continuava a sfregare le
canne del suo fucile con uno straccio intinto d’olio, e chiudeva gli
occhi quando i lampi listavano di fuoco le fessure della porta e delle
due finestre. La moglie con voce tremante rassicurava i bambini, i
quali avevano cacciato la testa sotto le coltri ed i guanciali.
Il vento che ululava al di fuori pareva il gemito di un sofferente che
chiedesse ospitalità per la notte. La fiammella della lucerna ad olio
serpeggiava, mossa dall’aria che penetrava dalle fessure delle
imposte; e tutti la fissavano; temendo che si spegnesse.
All’urlo del vento si frammischiava quello del tuono, che muggiva con
maggior insistenza.
— Santa Barbara! — ripeteva la vecchia, scuotendo le pallottoline del
suo rosario.
— Volete finirla, nonna? — aveva esclamato l’uomo dalla barba nera,
impazientito. — I vostri guaiti non fanno che maggiormente
spaventare mia moglie e i bambini. Lasciate che gli elementi urlino.
Avete forse paura del tuono?
— Del tuono? — ripetè la vecchia; e lasciò uscire dalle labbra un
gemito lungo. Voleva ancora parlare, ma le tremavano le mascelle
come a persona colta dai brividi della terzana. Ella piantò i suoi occhi
negli occhi dell’uomo barbuto, continuò a fissarlo, senza aprir bocca.
— Ebbene?... e che volete dirmi, adesso? Avete forse sonno?
La vecchia, senza rispondere alla domanda del genero mormorò
tutta tremante con un filo di voce:
— Non è il tuono!
— Sarà il vento.
— Non è il vento!
— Allora sarà il cane che ulula.
— Non è il cane, non è il vento, non è il tuono!
Alla strana esclamazione la moglie ed il marito fissarono la vecchia
con curiosa sorpresa; e quest’ultimo, ristando dal lavoro esclamò
impazientito.
— E che cosa è dunque?
— Tendete l’orecchio e ascoltate — ripetè la vecchia
raggomitolandosi, e tirandosi i due lembi della gonnella sul petto,
come per nascondervisi.
Tutti tesero l’orecchio e stettero attenti.
L’urlo prolungato, lamentoso, si fece udire più distinto.
— È il vento che soffia fra le punte di Tumeusoza e del Fraìle — disse
l’uomo alzando le spalle e rimettendosi al lavoro.
— V’ingannate tutti! — esclamò allora la vecchia, con forza e a bassa
voce — è il gran tamburo!!
— Il Gran tamburo?! ripetè l’uomo vivamente, non potendo celare un
movimento di soddisfazione. — Ne siete proprio sicura?
— Sì: è l’avviso misterioso che parte dai graniti maledetti. Non è il
vento che fischia sul monte Crocetta — è lo spirito delle tenebre che
vorrebbe abbattere lassù la croce di ferro!
Tutti tacquero. Benchè sapessero che la vecchia era molto
superstiziosa, pure le sue parole, in quell’ora, con quella tempesta,
produssero su loro uno strano effetto.
— Pregate — proseguì la vecchia — pregate, perchè l’ira celeste
pesa sul nostro villaggio; pregate per l’anima di un disgraziato
colpito da morte violenta. Noi siamo piccoli, ma la misericordia di Dio
è grande; i giusti sono pochi, ma i nostri peccati sono molti!
L’uomo dalla barba nera si strinse nelle spalle, ma sentivasi in preda
ad un’inquietitudine che non riusciva a dominare. Camminava da un
capo all’altro della stanza, e gettava frequenti occhiate alla porta
come se aspettasse o temesse qualcuno.
I tuoni si facevano sempre più spessi — la vecchia pregava a voce
alta.
— Pare che il temporale stia per iscoppiare.
La vecchia prese la parola, interrompendo un’Ave Maria:
— Il temporale è scoppiato. Non sentite le misteriose parole che
volano per l’aria? Ascoltate o peccatori.
Si fece nuovamente silenzio.
Non si udiva nulla, al difuori di quel brontolìo cupo lontano,
continuato.
— Ebbene? è il tuono! — disse la donna ch’era a letto.
Non è tuono — continuò solennemente la vecchia. — Sono le parole
del diavolo: — Aggius meu, Aggius meu, e candu sarà la dì chi ti
zz’aggiu a pultà in buleu?
Nessuno rispose alla vecchia, la quale riprese la recita dell’Ave Maria,
dal punto ove l’aveva interrotta.
Dopo un breve silenzio, la moglie dell’uomo barbuto esclamò, quasi
parlando a sè stessa:
— Dove sarà Francesco? Voglia Iddio che il temporale non l’abbia
colto in cammino!
— Via le paure! — rispose l’uomo dalla barba nera. — Francesco non
è più un bambino: egli si sarà fermato allo stazzo. A tredici anni si ha
abbastanza giudizio per non mettersi in viaggio con simile tempo!
Mezz’ora dopo, il temporale irrompeva. L’acqua cadeva a scrosci sul
tetto della casa; e il forte scoppio d’un tuono atterrì le due donne e i
bambini i quali mandarono acute grida.
Allo stesso tempo fu picchiato replicatamente alla porta.
L’uomo dalla barba nera, impallidì.
— Non aprire, non aprire! — gridò la moglie spaventata, ponendosi a
sedere sul letto, e stendendo le braccia verso il marito.
— Misericordia di noi! — urlò la vecchia.
Si tornò a picchiare con più forza e con più insistenza.
— Aprite! aprite! — gridò una voce al di fuori.
— È Francesco! — esclamarono tutti in coro; e l’uomo andò a
togliere la spranga, dall’uscio, e fece entrare Francesco, e rinchiuse
prestamente la porta.
Un giovinetto sui tredici anni entrò nella stanza tutto smarrito,
bagnato dalla pioggia e dal sudore. Egli ansava, poichè era venuto di
corsa.
— Perchè metterti in viaggio con questo tempo?
Il fanciullo aveva il respiro affannoso, e non potè subito rispondere al
fratello maggiore.
— Ebbene?
— Il temporale mi colse in cammino, a un ora e mezza da Aggius —
rispose Francesco dopo alcuni minuti.
— E perchè non affrettare il passo per rifugiarti nello stazzo?
Il fanciullo non rispondeva.
— Tu mi sembri agitato. Che hai?
— Ho veduto... il diavolo!
— Il diavolo!? — esclamarono in coro le donne e l’uomo dalla barba
nera; e la vecchia cacciò un urlo, celando la faccia tra le mani.
— Chi ti ha messo in testa simili corbellerie? — gli domandò il
fratello.
— No, vi dico — era proprio lui — il diavolo in carne ed ossa!
— Raccontaci un po’....
— Taci, taci! — gridò la vecchia.
— Finitela, nonna! pare che questa sia la notte del diavolo!
E il fanciullo, tutto tremante, raccontò l’accaduto nel modo seguente:
« — Io m’incamminavo verso lo stazzo di Bonaita quando,
oltrepassato appena il rio Turrali, sentii delle pedate dietro di me; mi
volsi, e vidi un uomo lungo lungo, col cappuccio sul viso e col fucile
sotto il braccio. Mi parve che egli venisse dalle falde del monte della
Crocetta. Allora affrettai il passo per isfuggirlo, ma egli raddoppiò il
suo, come se volesse raggiungermi. Spaventato della solitudine in
cui mi trovavo, mi diedi a correre; ma quell’uomo mi gridò per due
volte;
« — Fermati!
«Mi sentii tremare le ginocchia; la paura mi aveva inchiodato lì, nè
potei muovermi. L’uomo non tardò a raggiungermi.
«Io abbassai gli occhi, nè osai guardarlo in faccia.
« — Dove vai? mi domandò.
« — Vado allo stazzo — risposi.
« — Sei aggese?
« — Sì.
« — Ebbene; torna in Aggius. Dirai al paese che il Diavolo ha portato
via il corpo e l’anima di uno scellerato.
«Ciò detto quell’uomo scomparve.
— Non l’hai tu ravvisato? — domandò l’uomo dalla barba nera al
fanciullo.
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