0% found this document useful (0 votes)
11 views85 pages

Foundation Dynamic Web Pages With Python Create Dynamic Web Pages With Django and Flask 1st Ed David Ashley PDF Download

The document is a book titled 'Foundation Dynamic Web Pages With Python: Create Dynamic Web Pages With Django And Flask' by David Ashley. It covers various dynamic HTML page creation systems, including CGI, SSI, Flask, and Django, comparing their strengths and weaknesses. The book also provides example programs to assist readers in choosing the appropriate system for their needs.

Uploaded by

whaleruama
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
0% found this document useful (0 votes)
11 views85 pages

Foundation Dynamic Web Pages With Python Create Dynamic Web Pages With Django and Flask 1st Ed David Ashley PDF Download

The document is a book titled 'Foundation Dynamic Web Pages With Python: Create Dynamic Web Pages With Django And Flask' by David Ashley. It covers various dynamic HTML page creation systems, including CGI, SSI, Flask, and Django, comparing their strengths and weaknesses. The book also provides example programs to assist readers in choosing the appropriate system for their needs.

Uploaded by

whaleruama
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/ 85

Foundation Dynamic Web Pages With Python Create

Dynamic Web Pages With Django And Flask 1st Ed


David Ashley download

https://ebookbell.com/product/foundation-dynamic-web-pages-with-
python-create-dynamic-web-pages-with-django-and-flask-1st-ed-
david-ashley-22417576

Explore and download more ebooks at ebookbell.com


Here are some recommended products that we believe you will be
interested in. You can click the link to download.

Foundations Of Dynamic Economic Analysis Optimal Control Theory And


Applications 1st Edition Michael R Caputo

https://ebookbell.com/product/foundations-of-dynamic-economic-
analysis-optimal-control-theory-and-applications-1st-edition-michael-
r-caputo-54577672

Attracted To Conflict Dynamic Foundations Of Destructive Social


Relations Dynamic Foundations Of Destructive Social Relations 1st
Edition Robin R Vallacher

https://ebookbell.com/product/attracted-to-conflict-dynamic-
foundations-of-destructive-social-relations-dynamic-foundations-of-
destructive-social-relations-1st-edition-robin-r-vallacher-4252206

Aci 3513r04 Foundations For Dynamic Equipment Reapproved 2011 Aci


Committee 351

https://ebookbell.com/product/aci-3513r04-foundations-for-dynamic-
equipment-reapproved-2011-aci-committee-351-5033492

Soil Dynamics And Foundation Modeling Offshore And Earthquake


Engineering 1st Edition Junbo Jia Auth

https://ebookbell.com/product/soil-dynamics-and-foundation-modeling-
offshore-and-earthquake-engineering-1st-edition-junbo-jia-auth-6840756
3d Motion Of Rigid Bodies A Foundation For Robot Dynamics Analysis 1st
Ed Ernesto Olgun Daz

https://ebookbell.com/product/3d-motion-of-rigid-bodies-a-foundation-
for-robot-dynamics-analysis-1st-ed-ernesto-olgun-daz-7321512

Proceedings Of Geoshanghai 2018 International Conference Advances In


Soil Dynamics And Foundation Engineering 1st Ed Tong Qiu

https://ebookbell.com/product/proceedings-of-
geoshanghai-2018-international-conference-advances-in-soil-dynamics-
and-foundation-engineering-1st-ed-tong-qiu-7328026

Foundations In Grammatical Evolution For Dynamic Environments 1st


Edition Ian Dempsey

https://ebookbell.com/product/foundations-in-grammatical-evolution-
for-dynamic-environments-1st-edition-ian-dempsey-4193626

Foundations Of Complex Systems Nonlinear Dynamic Statistical Physics


Information And Prediction Ws Gregoire Nicolis

https://ebookbell.com/product/foundations-of-complex-systems-
nonlinear-dynamic-statistical-physics-information-and-prediction-ws-
gregoire-nicolis-1014716

The Dynamic Self In Psychoanalysis Neuroscientific Foundations And


Clinical Cases 1st Edition Spagnolo

https://ebookbell.com/product/the-dynamic-self-in-psychoanalysis-
neuroscientific-foundations-and-clinical-cases-1st-edition-
spagnolo-34759468
Foundation
Dynamic Web
Pages with Python
Create Dynamic Web Pages with
Django and Flask

David Ashley
Foundation Dynamic
Web Pages with
Python
Create Dynamic Web Pages
with Django and Flask

David Ashley
Foundation Dynamic Web Pages with Python

David Ashley
Austin, TX, USA

ISBN-13 (pbk): 978-1-4842-6338-9 ISBN-13 (electronic): 978-1-4842-6339-6


https://doi.org/10.1007/978-1-4842-6339-6

Copyright © 2020 by David Ashley


This work is subject to copyright. All rights are reserved 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.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Celestin Suresh John
Development Editor: James Markham
Coordinating Editor: Divya Modi
Cover designed by eStudioCalamar
Cover image designed by Pixabay
Distributed to the book trade worldwide by Springer Science+Business Media New York, 1
New York Plaza, Suite 4600, New York, NY 10004-1562, USA. Phone 1-800-SPRINGER, fax (201)
348-4505, e-mail [email protected], 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 information on translations, please e-mail [email protected]; for
reprint, paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook
versions and licenses are also available for most titles. For more information, reference our Print
and eBook Bulk Sales web page at www.apress.com/bulk-sales.
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/
978-1-4842-6338-9. For more detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
This book is dedicated to Debbie and Jim. A brother never
had a better sister and brother-in-law.
Table of Contents
About the Author���������������������������������������������������������������������������������ix

About the Technical Reviewer�������������������������������������������������������������xi


Acknowledgments�����������������������������������������������������������������������������xiii
Introduction����������������������������������������������������������������������������������������xv
Preface: Document Conventions�������������������������������������������������������xvii

Chapter 1: Introduction to Web Servers�����������������������������������������������1


Glossary of Terms�������������������������������������������������������������������������������������������������1
The Apache Web Server����������������������������������������������������������������������������������������2
Nginx Web Server��������������������������������������������������������������������������������������������������5
Apache Tomcat Server������������������������������������������������������������������������������������������6
Configuring the Apache Web Server���������������������������������������������������������������������6
Organizing Your Web Server��������������������������������������������������������������������������������26
Operating System Links��������������������������������������������������������������������������������26
Apache Directives������������������������������������������������������������������������������������������27
Summary������������������������������������������������������������������������������������������������������������27

Chapter 2: HTML Pages and CSS���������������������������������������������������������29


HTML Tags�����������������������������������������������������������������������������������������������������������29
Document and Metadata Tags�����������������������������������������������������������������������31
The Text Tags�������������������������������������������������������������������������������������������������32
Grouping Content Tags����������������������������������������������������������������������������������33
Sectioning Tags���������������������������������������������������������������������������������������������34

v
Table of Contents

Creating Tables����������������������������������������������������������������������������������������������35
Creating Forms����������������������������������������������������������������������������������������������36
Embedding Content Tags�������������������������������������������������������������������������������37
CSS Elements������������������������������������������������������������������������������������������������������38
CSS Selectors������������������������������������������������������������������������������������������������40
Border and Background Properties���������������������������������������������������������������43
Box Model Properties������������������������������������������������������������������������������������46
Text Properties�����������������������������������������������������������������������������������������������47
Transition, Animation, and Transform Properties�������������������������������������������48
Other Properties��������������������������������������������������������������������������������������������50
Organizing HTML and CSS Documents���������������������������������������������������������������50
Simple HTML and CSS Pages������������������������������������������������������������������������52
A Complete HTML and CSS Page������������������������������������������������������������������������57
Creating a Library of HTML Page Segments�������������������������������������������������������65
Summary������������������������������������������������������������������������������������������������������������69

Chapter 3: Using CGI and Python��������������������������������������������������������71


Your First cgi-bin Program����������������������������������������������������������������������������������71
CGI Program Strategy������������������������������������������������������������������������������������������75
Setting Up the html_lib Parts������������������������������������������������������������������������������76
A Portable and Maintainable CGI Program����������������������������������������������������������78
More Partial HTML Skeletons������������������������������������������������������������������������������84
Hyperlink HTML Skeletons����������������������������������������������������������������������������84
A More Complicated Hyperlink Example�������������������������������������������������������94
Calling and Passing Data to a CGI Program������������������������������������������������������100
The GET Method������������������������������������������������������������������������������������������101
The POST Method����������������������������������������������������������������������������������������107

vi
Table of Contents

Another POST Method with HTML Text Data������������������������������������������������112


Using POST with a dropdown Box���������������������������������������������������������������115
Cookies in CGI���������������������������������������������������������������������������������������������������117
Sending Cookies from the Server����������������������������������������������������������������117
Retrieving Cookies���������������������������������������������������������������������������������������119
Summary����������������������������������������������������������������������������������������������������������120

Chapter 4: Using SSI and Python������������������������������������������������������123


Getting Started��������������������������������������������������������������������������������������������������123
The config SSI Directive������������������������������������������������������������������������������������125
The echo SSI Directive��������������������������������������������������������������������������������������129
The exec SSI Directive��������������������������������������������������������������������������������������130
The fsize SSI Directive��������������������������������������������������������������������������������������135
The flastmod SSI Directive��������������������������������������������������������������������������������138
The include SSI Directive����������������������������������������������������������������������������������140
Additional SSI Directives�����������������������������������������������������������������������������������142
The SSI set Directive�����������������������������������������������������������������������������������142
The SSI Conditional Directives���������������������������������������������������������������������147
Summary����������������������������������������������������������������������������������������������������������158

Chapter 5: Using Flask and Jinja������������������������������������������������������159


WSGI and Flask�������������������������������������������������������������������������������������������������160
Installing and Testing WSGI�������������������������������������������������������������������������160
Installing and Testing Flask�������������������������������������������������������������������������166
Jinja2����������������������������������������������������������������������������������������������������������������171
Summary����������������������������������������������������������������������������������������������������������181

vii
Table of Contents

Chapter 6: Django�����������������������������������������������������������������������������183
Django and WSGI�����������������������������������������������������������������������������������������������183
Configuring and Testing Django������������������������������������������������������������������������185
Django and Templates���������������������������������������������������������������������������������������191
Using a Database with Django��������������������������������������������������������������������������198
Summary����������������������������������������������������������������������������������������������������������199

Chapter 7: Comparing CGI, SSI, Flask, and Django���������������������������201


Installation and Configuration���������������������������������������������������������������������������201
CGI Installation and Configuration���������������������������������������������������������������202
SSI Installation and Configuration���������������������������������������������������������������202
Flask Installation and Configuration������������������������������������������������������������203
Django Installation and Configuration���������������������������������������������������������203
Python Usage����������������������������������������������������������������������������������������������������204
CGI Python Usage����������������������������������������������������������������������������������������204
SSI Python Usage����������������������������������������������������������������������������������������205
Flask Python Usage�������������������������������������������������������������������������������������205
Django Python Usage����������������������������������������������������������������������������������206
Template Processing�����������������������������������������������������������������������������������������206
CGI Template Processing�����������������������������������������������������������������������������206
SSI Template Processing�����������������������������������������������������������������������������207
Flask Template Processing��������������������������������������������������������������������������207
Django Template Processing�����������������������������������������������������������������������207
Database Access�����������������������������������������������������������������������������������������������207
Rest APIs�����������������������������������������������������������������������������������������������������������208
Summary����������������������������������������������������������������������������������������������������������208

Index�������������������������������������������������������������������������������������������������209

viii
About the Author
David Ashley is a technical writer for
SkillSoft where he specializes in open source,
particularly Linux. As a member of the Linux
Fedora documentation team he recently led
the Libvirt project documentation and wrote
the Python programs included with it. He
has developed in 20 different programming
languages during his 30 years as a software
developer and IT consultant, including
more than 18 years at IBM and 12 years with
American Airlines.

ix
About the Technical Reviewer
Akshay Saini is Mumbai-based tech book
reviewer with several years’ experience in IT as
a software developer specializing in Python.
Recently he has developed new product
solutions for the media and entertainment
industry for clients such as Olympic
Broadcasting Services (OBS), ViacomCBS,
and Sportcast.
Reviewing and writing a tech book has
always been on his bucket list, and with this book it became a reality.
He is a tech lover and spends much time developing software to build a
better future for society.

xi
Acknowledgments
I would like to acknowledge the people who contributed their time and
efforts to this book. There are just too many to list here, but I would
especially like to acknowledge all the people at Apress who helped put this
book together.

xiii
Introduction
This book compares some of the best-known dynamic HTML page
creation systems. It includes some older systems such as CGI and SSH as
well as newer systems such as Flask and Django. Each system is examined
and compared with the other systems to discover each of their strengths
and weaknesses.
This should give you a basis for choosing the correct system for your
dynamic HTML page needs. For each system, I will provide example
programs so that if you are not experienced with a system, you can get a
taste of what building an application with it is like.

xv
Preface: Document
Conventions
This book uses several conventions to highlight certain words and phrases
and draw attention to specific pieces of information. The convention used
depends on the type of information displayed.

Computer Commands
Computer commands are usually presented in a bold font such as in the
following example:
The Unix command ls run from the command shell is used to
present a list of files and directories.

Filenames
Filenames are usually presented in monospaced text such as in the
following example:
To see the contents of the file report.txt use the command cat
report.txt.

 rogramming Language Elements


P
and Literals
Programming language elements include such things variable names, literals,
constants, symbols, tokens, functions, class names, and other objects.

xvii
Preface: Document Conventions

Literal data is taken directly from a computer screen or a computer


language literal value and is usually presented in monospaced text such as
within the following example:
The following line is the output from running ls:

en-US Makefile publican.cfg

Computer Output and Source Code


Computer output data is taken directly from a computer screen and
usually presented in monospaced text such as in the following example.
This information is usually set off from the rest of the text.

books        Desktop   documentation  drafts  mss    photos   stuff  svn
books_tests  Desktop1  downloads      images  notes  scripts  svgs

Source-code listings are also set off from the rest of the text, as shown
in Listing P-1.

Listing P-1. This Is a Source Code Listing

from __future__ import print_function


import sys
import libvirt

conn = libvirt.open('qemu:///system')
if conn == None:
    print('Failed to open connection to qemu:///system', \
          file=sys.stderr)
    exit(1)
conn.close()
exit(0)

xviii
Preface: Document Conventions

Notes and Warnings


Finally, we use three visual styles to draw attention to information that
might otherwise be overlooked.

Note Notes are tips, shortcuts, or alternative approaches to the


task at hand. Ignoring a note should have no negative consequences,
but you might miss out on a trick that makes your life easier.

Important Important boxes detail things that are easily missed:


configuration changes that apply only to the current session, or
services that need restarting before an update will apply. Ignoring a
box labeled “Important” will not cause data loss but may cause
irritation and frustration.

Warning Warnings should not be ignored. Ignoring warnings will


most likely cause data loss.

xix
CHAPTER 1

Introduction to Web
Servers
This chapter introduces web servers, the services they provide, and how
they work. This information is essential to web developers so they can
make proper use of their web server and provide the best web experience
to their users.
All web servers use the same building blocks to serve up web pages
to the user. While we could look at all the available web servers, it really is
not necessary since they all are designed around the same building blocks.
Instead, we will concentrate on the Apache web server since it is the most
popular. All the other web servers use the same building blocks and design
principles as the Apache server.

G
 lossary of Terms
When delving into technical information, it is important that you
understand the terminology used. For that reason, please review the
following web server terms:

• Common Gateway Interface (CGI): This describes a


process that serves up a dynamic web page. The web
page is built by a program provided by the web server

© David Ashley 2020 1


D. Ashley, Foundation Dynamic Web Pages with Python,
https://doi.org/10.1007/978-1-4842-6339-6_1
Chapter 1 Introduction to Web Servers

administrator. A common set of information is available


to the program via the program’s environment.

• Hypertext Transport Protocol (HTTP): This is a set


of rules used to describe a request by the user to the
web server and the returned information. The request
and the reply must follow strict rules for the request
to be understood by the server and for the reply to be
understood by the user’s browser.

• Hypertext Markup Language (HTML): This code is used


to build a web page that is displayed by a browser, and
the Apache web server is used to serve the web page to
users (clients). There are several versions of this code,
but we will be using the latest version (5.0) in this book.

• Cascading Style Sheets (CSS): These sheets define the


styles to be used by one or more web pages. These
styles are used to define fonts, colors, and the size of a
section of text within a defined area of the HTML page.

These terms should give you a good starting point for discussing how
a web server works. All of these terms will receive wider attention and
definition throughout this book.

The Apache Web Server


The Apache web server (today this is known formally as the HTTP Server)
dates back to the mid-1990s when it started gaining widespread use. The
web server is a project of the Apache Software Foundation, which manages
several projects. There are currently more than 200 million lines of code
managed by the foundation for the Apache web server. The current release
as of this writing is 2.4.41.

2
Chapter 1 Introduction to Web Servers

Starting with Apache version 2.0, Apache uses a hook architecture to


define new functionality via modules. We will study this in a subsequent
chapter.
When you first look at hooks, they will seem a little complicated, but in
reality, they are not since most of the time you are only modifying Apache
a little. This will reduce the code you need to write to implement a hook to
a minimum.
The Apache web server uses a config file to define everything the
server needs to know about all the hooks you want to include in Apache.
It also defines the main server and any virtual servers you want to include.
In addition, it defines the name of the server, the home directory for the
server, the CGI directory to be used, any aliases needed by the server, the
server name, any specific handlers used by that server, the port to be used
by the server, the error log to be used, and several other factors.
Once configuration is complete, the Apache server is now ready to
supply files to a client browser. This is called the request-response cycle.
For each request sent by the browser to the server, the request must travel
through the request-response cycle to produce a response that is sent
back to the browser. While this looks simple on the surface, the request-­
response cycle is both powerful and flexible. It can allow programs you
create, called modules, to modify both the request and the response in
many flexible ways. A module can also create the response from scratch
and can include inputs from resources outside of Apache, such as a
database or other external data repository.
Figure 1-1 shows the request-response loop of Apache plus the startup
and shutdown phases of the server.

3
Chapter 1 Introduction to Web Servers

Figure 1-1. The Apache request-response loop

4
Chapter 1 Introduction to Web Servers

Modules not only can be used in the request-response cycle but in


other portions of Apache such as during configuration, shutdown/cleanup,
processing security requests, and other valuable functions. As you can see,
modules allow flexible and powerful methods to be created by the server
administrator to help with providing a great experience for their users.
Modules are not the only way to create dynamic web pages. Another
way is by invoking available Apache services that can call an external
program to create the page. The CGI process is usually invoked to supply
this service, but there are other ways as well. Each of these ways will be
examined in this book. It will be up to you to decide the best methodology
for use in your environment.
The shaded request/response loop can have several forms. One such
form is as a loop inside one of several processes under Apache. Another is
running the loop as a thread inside a single process under Apache. All of
these forms are designed to make the most efficient process of responding
to a request that an operating system may provide.
The Keep-Alive loop is for HTTP 2.0 requests if supported by the web
server. It allows the connection to stay open to the client until all requests
have been processed. The loop here describes how a single request is
processed by Apache. If the web server is not running HTTP 2.0 requests,
then each request/response will close the connection once the response
has been sent.

Nginx Web Server


The Nginx server was designed as a low-cost (in terms of system
requirements) alternative to the Apache server. Probably the biggest
difference between Nginx and Apache is that Nginx has an asynchronous
event-driven architecture rather than using multiple threads to process
each request. While this can provide predictable performance under high
loads, it does come with some downsides. For instance, a request can end

5
Chapter 1 Introduction to Web Servers

up waiting in the queue longer than the request attempt will survive on the
network; i.e., the requester can give up before the request is ever processed
if there are too few processing routines. While this problem is not exclusive
to this server, it does still exist.
Recently the Nginx server has become popular within the community
because of its smaller footprint and flexible design. However, since many
of the principles that we will use to describe the Apache server also apply
to the Nginx server, I will not delve deeply into Nginx and will discuss it
only when differences between the two servers are important, especially in
regard to dynamic web page design.

Apache Tomcat Server


The Apache Tomcat server is written in Java, which makes it difficult
to compare to the more standard web servers. While some principles
of dynamic web page design are similar, there are many differences.
Therefore, and because it’s less commonly used than Apache and Nginx, I
will not attempt to cover it in this book.

Configuring the Apache Web Server


The Apache web server has a single main configuration file and a number
of optional configuration files. The main file is named httpd.conf, and it
controls which optional files are loaded as well as the location where they
can be found. It also specifies the global features used by the server.
Listing 1-1 shows an unedited version of the httpd.conf file. Following
the listing, I will describe the sections that need to be modified to give you
a usable configuration file.

6
Chapter 1 Introduction to Web Servers

Listing 1-1. The Unedited httpd.conf File

#
# This is the main Apache HTTP server configuration file.  
It contains the
# configuration directives that give the server its
instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed
information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# See the httpd.conf(5) man page for more information on this
configuration,
# and httpd.service(8) on using and configuring the httpd service.
#
# Do NOT simply read the instructions in here without
understanding
# what they do.  They're here only as hints or reminders.  
If you are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify
for many
# of the server's control files begin with "/" (or "drive:/"
for Win32), the
# server will use that explicit path.  If the filenames do
*not* begin
# with "/", the value of ServerRoot is prepended -- so
'log/access_log'

7
Chapter 1 Introduction to Web Servers

# with ServerRoot set to '/www' will be interpreted by the


# server as '/www/log/access_log', where as '/log/access_log'
will be
# interpreted as '/log/access_log'.

#
# ServerRoot: The top of the directory tree under which the
server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to specify a local
disk on the
# Mutex directive, if file-based mutexes are used.  If you wish
to share the
# same ServerRoot for multiple httpd daemons, you will need to
change at
# least PidFile.
#
ServerRoot "/etc/httpd"

#
# Listen: Allows you to bind Apache to specific IP addresses
and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

8
Chapter 1 Introduction to Web Servers

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was
built as a DSO you
# have to place corresponding `LoadModule' lines at this
location so the
# directives contained in it are actually available _before_
they are used.
# Statically compiled modules (those listed by `httpd -l') do
not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf

#
# If you wish httpd to run as a different user or group, you
must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run
httpd as.
# It is usually good practice to create a dedicated user and
group for
# running httpd, as with most system services.
#
User apache
Group apache

9
Chapter 1 Introduction to Web Servers

# 'Main' server configuration


#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost>
containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

#
# ServerAdmin: Your address, where problems with the server
should be
# e-mailed.  This address appears on some server-generated
pages, such
# as error documents.  e.g. [email protected]
#
ServerAdmin root@localhost

#
# ServerName gives the name and port that the server uses to
identify itself.
# This can often be determined automatically, but we recommend
you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP
address here.

10
Chapter 1 Introduction to Web Servers

#
#ServerName www.example.com:80

#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
    AllowOverride none
    Require all denied
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not
working as
# you might expect, make sure that you have specifically
enabled it
# below.
#

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this
directory, but
# symbolic links and aliases may be used to point to other
locations.
#
DocumentRoot "/var/www/html"

#
# Relax access to content within /var/www.

11
Chapter 1 Introduction to Web Servers

#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

# Further relax access to the default document root:


<Directory "/var/www/html">
    #
    
# Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch
ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* ---
"Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and
important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in
.htaccess files.
    # It can be "All", "None", or any combination of the
keywords:
    #   Options FileInfo AuthConfig Limit
    #

12
Chapter 1 Introduction to Web Servers

    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

#
# DirectoryIndex: sets the file that Apache will serve if a
directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

#
# The following lines prevent .htaccess and .htpasswd files
from being
# viewed by Web clients.
#
<Files ".ht*">
    Require all denied
</Files>

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a
<VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a
<VirtualHost>

13
Chapter 1 Introduction to Web Servers

# container, that host's errors will be logged there and not here.
#
ErrorLog "logs/error_log"

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn

<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    #
    # The location and format of the access logfile (Common
Logfile Format).
    # If you do not define any access logfiles within a
<VirtualHost>
    # container, they will be logged here.  Contrariwise, if
you *do*

14
Chapter 1 Introduction to Web Servers

    
# define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog "logs/access_log" common

    #
    # If you prefer a logfile with access, agent, and referer
information
    # (Combined Logfile Format) you can use the following
directive.
    #
    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that
used to
    
# exist in your server's namespace, but do not anymore. The client
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar

    #
    
# Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    
# If you include a trailing / on /webpath then the server will
    
# require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.

15
Chapter 1 Introduction to Web Servers

    #
    # ScriptAlias: This controls which directories contain
server scripts.
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as
applications and
    # run by the server when requested rather than as documents
sent to the
    # client.  The same rules about trailing "/" apply to
ScriptAlias
    # directives as to Alias.
    #
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

</IfModule>

#
# "/var/www/cgi-bin" should be changed to whatever your
ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    #
    # TypesConfig points to the file containing the list of
mappings from
    # filename extension to MIME-type.
    #

16
Chapter 1 Introduction to Web Servers

    TypesConfig /etc/mime.types

    #
    # AddType allows you to add to or override the MIME
configuration
    # file specified in TypesConfig for specific file types.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding allows you to have certain browsers
uncompress
    
# information on the fly. Note: Not all browsers support this.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # If the AddEncoding directives above are commented-out,
then you
    
# probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    #
    # AddHandler allows you to map certain file extensions to
"handlers":
    # actions unrelated to filetype. These can be either built
into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options"
directive.)
    #

17
Chapter 1 Introduction to Web Servers

    #AddHandler cgi-script .cgi

    # For type maps (negotiated resources):


    #AddHandler type-map var

    #
    # Filters allow you to process content before it is sent to
the client.
    #
    # To parse .shtml files for server-side includes (SSI):
    # (You will also need to add "Includes" to the "Options"
directive.)
    #
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

#
# Specify a default charset for all content served; this enables
# interpretation of all content as UTF-8 by default.  To use the
# default browser choice (ISO-8859-1), or to allow the META tags
# in HTML content to override this choice, comment out this
# directive:
#
AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    #
    # The mod_mime_magic module allows the server to use
various hints from the
    # contents of the file itself to determine its type.  The
MIMEMagicFile

18
Chapter 1 Introduction to Web Servers

    # directive tells the module where the hint definitions are
located.
    #
    MIMEMagicFile conf/magic
</IfModule>

#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall may be used to deliver
# files.  This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults if commented: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
EnableSendfile on

# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

19
Chapter 1 Introduction to Web Servers

We will look at each directive used in this file individually starting with
the ServerRoot directive.

ServerRoot "/etc/httpd"

This directive indicates the root where all the server’s global files are
located. This includes all the configuration files, the log files, and the error
files.
The next directive is the Listen directive, and it specifies the TCP/IP
port that the server will listen on.

#Listen 12.34.56.78:80
Listen 80

The Listen directive shown earlier specifies that port 80 should be


used as the listening port on the default IP address.
The next directive specifies where the necessary global modules
should be loaded from.

Include conf.modules.d/*.conf

This Include directive specifies the location of the configuration files


that will load the global modules. What is specified here is a subdirectory
off the ServerRoot directory. Only files in this subdirectory with an
extension of .conf will be loaded and thus also the modules actually
loaded from them. There are multiple configuration files because the
modules are divided into different categories and can thus be included or
excluded easily.
The next directives are the User and Group directives.

User apache
Group apache

The User directive specifies what userID Apache should run under,
and the Group directive specifies what groupID it should run under. While
this may not seem important, it actually is, especially when running more

20
Chapter 1 Introduction to Web Servers

than one server. Each server may need to be running under a different
userID and groupID to work properly. If you are running multiple servers,
then consider moving the userID and groupID to the individual server
configuration files.
All the following directives set up the values used by the “main” server,
which responds to any requests that aren’t handled by a <VirtualHost>
definition. These values also provide defaults for any <VirtualHost>
containers you may define later in the file.
All of these directives may appear inside <VirtualHost> containers,
in which case these default settings will be overridden for the virtual host
being defined.
The next directive specifies where you want problems with your server
to be emailed.

ServerAdmin root@localhost

The ServerAdmin directive should be changed to an email address


under the server administrator that has the authority to handle problems
with the Apache server.
The next directive specifies the name known to the DNS server used by
the machine running the Apache server.

ServerName www.example.com:80

You should note that not only the name should be specified but
also the listening port. The port does not have to be unique if you are
running multiple servers on the same TCP/IP address and port. For more
information concerning this kind of configuration, you should refer to the
Apache documentation.
The next section is extremely important!

<Directory />
    AllowOverride none
    Require all denied
</Directory>

21
Chapter 1 Introduction to Web Servers

Do not modify this section unless you know exactly what you are doing.
My suggestion is to never modify it. This protects your root file system
from snoopers by removing read access from all Apache users (not system
users) to the root directory. If you intend to modify this section, you should
consult with your security team first.
The next directive, DocumentRoot, specifies the root of all the files on
your server, or at least most of them. There are some exceptions that we
will run into later.

DocumentRoot "/var/www/html"

You can point the DocumentRoot directive anywhere you want on your
file system, but it is suggested that it should always be local within the root
file system so that during startup of the server this location will always be
visible.
The next section relaxes access to the content of the DocumentRoot:

<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

The previous DocumentRoot directive pointed our server to the root of


our document file system. Now we have to relax the access to that point so
the server can have access to the files. This section of code gives all access
rights to the server.
We actually need additional access rights, so the following gives us
those rights:

Options Indexes FollowSymLinks


AllowOverride None

The Options directive in this case allows a listing of all the files to
be sent to the user just in case an index.html file does not exist. It also

22
Chapter 1 Introduction to Web Servers

forces the server to follow symbolic links even if they point outside the
DocumentRoot tree.
The next directive is used to specify the name of the file that will be
fetched should one not be specified by the user.

DirectoryIndex index.html

In this case, the name of the file is index.html.


The following lines prevent the .htaccess and .htpasswd files from
being viewed by clients:

<Files ".ht*">
    Require all denied
</Files>

The following directive specifies the name and location of the error log:

ErrorLog "logs/error_log"

When the server needs to log an error, this is where it will be placed.
Next, we want to at least control what errors get logged.

# Possible values include: debug, info, notice, warn, error, crit,


# alert, emerg.
#
LogLevel warn

The possible values here are debug, info, notice, warn, error, crit,
alert, and emerg in order from lowest to highest. Only the level you specify
plus higher levels will be logged; all lower levels will be ignored.
The next section contains several directives specifying the format that
log messages will appear in:

<IfModule log_config_module>

23
Chapter 1 Introduction to Web Servers

The formats are specified in C’s sprintf format. These formats are
relatively straightforward and easily understood. Also specified in this
section are the name and location of the access log. The directives in
this section are executed only if the corresponding module is loaded
previously.
The next section uses the Alias module to further alias other
subdirectories.

<IfModule alias_module>

This module created fake entries in the Apache document directory


tree, which can be referred to by the user. An example of this is the /cgi-­
bin subdirectory, which can hold programs to be executed by the user’s
browser to produce a dynamic HTML page. The directives in this section
are executed only if the corresponding module is loaded previously.
The following section sets the characteristics for the /cgi-bin
subdirectory:

<Directory "/var/www/cgi-bin">

The directives in this section make whatever programs are within the
/cgi-bin subdirectory executable and readable for the user browser.
The next section adds default actions for certain file types that can be
executed by the browser if it is supported by the browser.

<IfModule mime_module>

There are a number of actions based on file type(s) specified here. The
directives in this section are executed only if the corresponding module is
loaded previously.
When the server provides output to the browser, we need a default
character set to use in case the HTML page does not specify one.

AddDefaultCharset UTF-8

24
Chapter 1 Introduction to Web Servers

The previous directive sets the UTF-8 character set as the default
character set to be used by all web pages when no character set is explicitly
set within the web page.
The next section gives hints to the server about various file types:

<IfModule mime_magic_module>

The mod_mime_magic module allows the server to use various hints from
the contents of the file itself to determine its type. The directives in this
section are executed only if the corresponding module is loaded previously.
The next section enables the operating system to return a file to the
client:

#EnableMMAP off
EnableSendfile on

On systems that support it, memory-mapping or the sendfile


syscall may be used to return files to the browser. This usually
improves server performance but must be turned off when serving from
a networked-mounted file system or if support for these functions is
otherwise broken on your system.
Lastly, additional configuration files may be included.

IncludeOptional conf.d/*.conf

If the Apache server is supporting one or more virtual machines, then


this location will usually contain a file for the configuration of each virtual
machine. All the directives usually contained in one of these files have
been shown previously, although you may find they contain additional
directives to support functions needed by one or more virtual machines.
As you can see, Apache supports many directives to configure the
server, many of which have not been discussed in this chapter. A really
good Apache reference manual is required to make full use of the power of
the server. Later in this book we look at some additional directives for use
in our discussion of dynamic web pages.

25
Chapter 1 Introduction to Web Servers

Organizing Your Web Server


This topic, while at first glance appears to be simple, is actually fraught
with potential problems of your own making. It is so easy to fall into traps
when organizing a website that this topic deserves special treatment.
The problems that you can create for yourself all revolve around
security. In the previous section, the default configuration points the
DocumentRoot to a location that in the beginning looks pretty safe because
it is mostly empty. The problem comes when you point the DocumentRoot
to some other spot on your file system. Apache has no idea if you have just
created a problem for yourself.
We need to examine the potential problems that you can make for
yourself both now and in the future.

Operating System Links


Operating system links (created with the ln command) create a shortcut
to another part of the file system. While this may seem like a nice way
to build certain parts of your file system for use by Apache, you should
be extremely careful when doing so. Not only can links bring in some
features you would otherwise have to duplicate, but they can also bring in
unintended files that either might be sensitive from a security point of view
or not readable by the Apache user (that can be good or bad depending on
the circumstances).
Remember also that when you bring other parts of the file system into
Apache’s root, you may or may not have administrative privileges on that
part of the file system. This means others can make changes to the file
system that might have an adverse impact on your expectations.
Ownership of files being brought into Apache’s purview can also be
a problem. Apache may not be able to read these files, so that needs to
be evaluated for your circumstances. Also, ownership of these files can

26
Chapter 1 Introduction to Web Servers

change at any time, and that may have a negative impact on the usability of
your site.
Lastly, new files may be added at any time, and older files may be
deleted at any time. You may or may not get notifications about these
additions/deletions, but they could have impacts on your website and
need to be evaluated before they occur, not after.

Apache Directives
The Apache directives Alias and ScriptAlias are similar to the operating
system ln command in that they bring in other parts of the local file
system to the file system created by Apache. The only real difference is that
the Alias and ScriptAlias directives are logical and not physical; i.e.,
only Apache can see them, and they do not really exist in the file system.
But from the perspective of the web administrator, they have the same
potential problems as real links. All the problems listed in the previous
section also apply to these directives.

Summary
This chapter introduced you to web servers in general with specific focus
on the Apache web server. I also introduced you to some web server
concepts as well as some topics specific to Apache.
I introduced you to Apache’s configuration file and described the
required and optional features available to the administrator when
configuring Apache.
Lastly, I introduced you to some potential problems you may run into
when organizing your website’s file system.

27
CHAPTER 2

HTML Pages and CSS


This chapter is all about Hypertext Markup Language (HTML) and the
corresponding Cascading Style Sheets (CSS) language. This is just an
introduction, and it is highly recommended that you obtain specialized
references on both of these topics to gain a complete understanding of
how these languages work together to present information to the user.
The HTML language has a long history going back to the 1970s. It
is what is known as a tag language. It uses special tags within the text
within your HTML page to identify different kinds of text. There are tags
to identify paragraphs, numbered lists, definition lists, headings, tables,
forms, images, and many other parts.
The CSS language actually comes in two forms. The first form of the
language is attached to HTML tags as attributes. The second form of the
language is as a stand-alone document that completely describes how the
document is to be formatted. We will describe this in more detail later in
this chapter.

H
 TML Tags
HTML tags have a long history going back to the Generalized Markup
Language (GML) tag system invented by IBM. GML was the result of
modernizing an earlier language that described both the formatting of
a document and the style of the document. In the early days of printing
hardware, there was not much differentiation between the printer and the

© David Ashley 2020 29


D. Ashley, Foundation Dynamic Web Pages with Python,
https://doi.org/10.1007/978-1-4842-6339-6_2
Chapter 2 HTML Pages and CSS

formatting of a document. But as the number and variations of printers


increased, the need to separate the style of the document from identifying
the elements of a document increased dramatically. By the beginning of
the 1980s, there were hundreds of different kinds of printers including
character-, line-, and laser-based. This increase really exploded during the
1980s.
This explosion of printing hardware required a rethinking of content
versus style. In this way, a style can be tuned to an output device while
the content remains unchanged. The IBM GML language evolved during
the 1980s into the Standardized General Markup Language (SGML) tag
language. This was a relatively short-lived standard as it was hard to learn,
extensive, and practically unusable to write documents of any kind. But
it did become the basis for two child languages: HTML and XML. These
two languages used many of the concepts pioneered in SGML and left out
anything not really needed for their purpose.
HTML has gone through several revisions since its first release in
the early 1990s. Currently, we are at version 5.0 of HTML. This version
has taken on a few characteristics of the XML language and added
comprehensive use of CSS to form a language that is easy to use and code
for even neophytes. The number of tags has been kept to a minimum, and
they are easy to remember. There are any number of reference books to
help you learn to code your documents with HTML and CSS, but they have
a limitation in that they usually show you how to write relatively simple
HTML pages. What they do not concentrate on is how to write dynamic
web pages, i.e., pages that can change based on input from the user or the
data itself.
Although CSS is undeniably integral to HTML, this book will only
cover the basics of that integration. Any CSS reference will cover the same
material in more detail, and I will leave that to you to learn.

30
Chapter 2 HTML Pages and CSS

Document and Metadata Tags


Table 2-1 summarizes the document and metadata tags. These tags are
used to describe the superstructure of your document’s HTML page. These
tags provide information to the browser concerning the document, define
the styles, and specify any scripts used by the document.
Many of the descriptions were taken from other sources on the Web
and elsewhere. Any mistakes in the text are mine alone.

Table 2-1. The Document/Metadata Tags


Tag Description Type

<base> Sets the base for all relative URLs. Metadata


<body> Denotes the contents of the document. N/A
<DOCTYPE> The first tag that should appear in your N/A
document. It denotes the document type to
identify it to the browser. This not a real HTML
tag, just an identifier.
<head> Contains the document metadata. N/A
<html> Indicates the start of HTML in a document. N/A
<link> Defines a relationship with an external resource. Metadata
<meta> Provides information about the document. Metadata
<noscript> Contains content that will be displayed when Metadata/phrasing
scripting is disabled or unavailable in the
browser.
<script> Defines a script block, either inline or in an Metadata/phrasing
external file.
<style> Defines a CSS style. Metadata
<title> Sets the title for the document. Metadata

31
Chapter 2 HTML Pages and CSS

The Text Tags


The text tags are applied to content to give basic structure and meaning.
Table 2-2 summarizes these tags.

Table 2-2. The Text Tags


Tag Description Type

<a> Creates a hyperlink. Phrasing/flow


<appr> Denotes an abbreviation. Phrasing
<b> Offsets a span of text without additional emphasis or Phrasing
importance.
<br> Denotes a line break. Phrasing
<cite> Denotes the title of another work. Phrasing
<code> Denotes a fragment of computer code. Phrasing
<del> Denotes text that has been removed from the document. Phrasing/flow
<dfn> Denotes the definition of a term. Phrasing
<em> Denotes a span of text with emphasis. Phrasing
<style> Defines a CSS style. Metadata
<i> Denotes a span of test that is of a different nature than Phrasing
the surrounding content, such as a word from another
language.
<ins> Denotes text that has been inserted into the document. Phrasing/flow
<kbd> Denotes user input. Phrasing
<mark> Denotes content that is highlighted because of its Phrasing
relevance in another context.
(continued)

32
Chapter 2 HTML Pages and CSS

Table 2-2. (continued)

Tag Description Type

<q> Denotes content quoted from another source. Phrasing


<rp> Denotes parameters for use with the <ruby> tag. Phrasing
<rt> Denotes a notation for use with the <ruby> tag. Phrasing
<ruby> Denotes notation to be placed above or to the right of Phrasing
characters in a logographic language.
<s> Denotes text that is no longer accurate. Phrasing
<samp> Denotes output from a computer program. Phrasing
<small> Denotes fine print. Phrasing
<span> A generic tag that does not have any semantic meaning Phrasing
of its own. Use this tag to apply global attributes without
imparting additional semantic significance.
<strong> Denotes text that is important. Phrasing
<sub> Denotes subscript text. Phrasing
<sup> Denotes superscript text. Phrasing
<time> Denotes a time and/or date. Phrasing
<u> Offsets a span of text without additional emphasis or Phrasing
importance.
<var> Denotes a variable from a program or computer system. Phrasing
<wbr> Denotes a place where a line break can be safely placed. Phrasing

Grouping Content Tags


The tags in Table 2-3 are used to associate related content into groups.

33
Chapter 2 HTML Pages and CSS

Table 2-3. The Grouping Tags


Tag Description Type

<blockquote> Denotes a block of content quoted from another source. Flow


<dd> Denotes a definition with a <dl> tag. N/A
<div> A generic element that does not have any predefined Flow
semantic significance. This is the flow equivalent of the
<span> tag.
<dl> Denotes a description list that contains a series of terms Flow
and definitions.
<dt> Denotes a term within the <dl> tag. N/A
<figcaption> Denotes a caption for a <figure> tag. N/A
<figure> Denotes a figure. Flow
<hr> Denotes a paragraph-level thematic break. Flow
<li> Denotes an item in a <ul>, <ol>, or <menu> tag. N/A
<ol> Denotes an ordered list of items. Flow
<p> Denotes a paragraph. Flow
<pre> Denotes content whose formatting should be preserved. Flow
<ul> Denotes an unordered list of items. Flow

S
 ectioning Tags
The tags in Table 2-4 are used to break down the content so that each
concept, idea, or topic is isolated.

34
Chapter 2 HTML Pages and CSS

Table 2-4. The Section Tags


Tag Description Type

<address> Denotes contact information for a document or article Flow


<article> Denotes an independent block of content Flow
<aside> Denotes content that is tangentially related to the surrounding Flow
content
<details> Creates a section the user can expand to get additional details Flow
<footer> Denotes a footer region Flow
<h1-h6> Denotes a heading level Flow
<header> Denotes a heading region Flow
<hgroup> Hides all but the first of a set of headings from the document Flow
outline
<nav> Denotes a significant concentration of navigation elements Flow
<section> Denotes a significant concept or topic Flow
<summary> Denotes a title or description for the content in an enclosing N/A
<details> tag

C
 reating Tables
The tags in Table 2-5 are used to create tables or show data in a grid.

35
Chapter 2 HTML Pages and CSS

Table 2-5. The Table Tags

Tag Description Type

<caption> Adds a caption to a table N/A


<col> Denotes a single column N/A
<colgroup> Denotes a group of columns N/A
<table> Denotes a table Flow
<tbody> Denotes the body of the table N/A
<td> Denotes a single table cell N/A
<tfoot> Denotes a footer for a table N/A
<th> Denotes a single header cell N/A
<thead> Denotes a header for the table N/A
<tr> Denotes a row of table cells N/A

C
 reating Forms
The tags in Table 2-6 are used for creating HTML forms you can use to
obtain input from the user.

Table 2-6. The Form Tags


Tag Description Type

<button> Denotes a button that will submit or reset the form. Phrasing
This can also be used as a generic button.
<datalist> Defines a set of suggested values for the user. Flow
<fieldset> Denotes a group of forms tags. Flow
<form> Denotes an HTML form. Flow
(continued)

36
Exploring the Variety of Random
Documents with Different Content
heen werkte, fout op fout makend. Of als hij, groote lummel van elf
jaar, nog maar steeds de tafels niet onder de knie kon krijgen, en me
geen antwoord wist te geven op m'n vraag, hoeveel 7 keer 8, of 9
keer 6 was. 'k Geloof, dat de heele klas volkomen mijn meening
deelde, dat Piet „heel erg dom” was, maar dat je op de heele wereld
geen betere jongen zou kunnen vinden.
Toch was er nog één leervak, waarbij ik altijd op Piet z'n volle
aandacht kon rekenen. En dat was: bij het zingen.
Op de eerste zangles ontdekte ik het al. Ze mochten zelf om de
beurt een van de liedjes kiezen, die ik ze in de vorige klas geleerd
had. En natuurlijk koos er eentje al heel gauw: „Duifjes, met uw
blanke veeren”. Waarom „natuurlijk?” Omdat ze merkten dat ik 't zelf
nooit koos. Toch had ik 't ze eerst geleerd en vond ik het zelf ook
een lief liedje, maar ze „zakten” onder 't zingen zoo geweldig, dat 't
niet om aan te hooren was. En mijn stem had niet altijd de kracht,
om ze op de goede hoogte te houden: er wordt veel gevergd van je
keel, als je voor de klas staat. Daarom zong ik 't niet graag met ze.
En als ze 't zelf kozen, dan liet ik ze in Godsnaam maar zakken en
zette ieder nieuw coupletje weer een terts hooger in; want dat was
zoowat het „verval”.
„Vooruit dan maar”, dacht ik dien dag ook weer en gaf den toon
voor ze aan. De zittenblijvers kenden 't blijkbaar ook, ze zongen ten
minste mee. Maar al bij den eersten regel werd m'n aandacht
getroffen door een nieuw geluid in 't gemengde koor, een hooge,
heldere stem, die zuiver den toon hield en 't heele koortje droeg.
Verrast bleef ik luisteren. Van wien kwam die stem? Van een van
de zittenblijvers? Dat moest ik eens gauw onderzoeken. 'k Liep
stapje voor stapje de jongensrijen door, terwijl m'n klas, zonder in 't
minst gezakt te zijn, het 2de coupletje inzette: „Waait het al te hard
daar buiten....” Opeens, daar had ik den zanger: Vlak naast zijn bank
bleef ik staan, om beter te kunnen genieten. Wat een mooie stem
had die jongen!
Hijzelf had er in 't minst geen erg op, dat ik naar hem stond te
luisteren. Verdiept in zijn eigen gezang, zelf genietend van den
helderen klank, zat hij voor zich uit te staren, als een vogel op een
tak, die alles om zich heen vergeet in de vreugde der zoete
melodieën en schallende trillers.
„'k Moet hem ook eens alleen hooren”, dacht ik. En toen 't liedje
uit was, riep ik hem voor de klas.
„Jij houdt zeker veel van zingen, he? Ken je nog een liedje, dat de
andere juffrouw jullie geleerd heeft? Dan mag je 't ons eens
voorzingen.”
Een beetje aarzelend en verlegen eerst, zette hij z'n liedje in.
Jongens schamen zich gauw, om te zingen, behalve natuurlijk als 't
straatliedjes zijn. Maar al bij de eerste woorden geraakte hij weer
onder de betoovering van de muziek en zong zonder de minste
verlegenheid verder.
'k Geloof, dat ook de klas merkte, dat 't „mooi” was. Ze luisterden
aandachtig, mij af en toe eens aankijkend, als om te vragen, of ik 't
ook mooi vond. Nergens zag ik ook maar een zweem van spot, dat
die lange jongen daar met zoo'n ernst zulk een kinderachtig liedje
stond te zingen.
Wat mijzelf betrof, 'k was met mijn gedachten plotseling verplaatst
in de Groote Dom te Keulen. Jaren geleden had ik daar den dienst
eens bijgewoond en was in extase geraakt bij 't plotseling invallen
van 't jongenskoor. Die zuivere, hooge jongensstemmen, met hun
eigenaardig schel timbre, nu hoorde ik ze weer. En met volle teugen
genoot ik van 't gezang van mijn „koorknaap”, zooals ik hem meteen
in gedachten doopte.
Nog ben ik niet aan het eind met m'n loftuitingen op Piet.
Al heel gauw merkte ik, dat de jongen voor alles, behalve dan
voor leeren, uitstekend bruikbaar was.
Voor schooltijd begon het:
„Piet, kun jij eens een plaat voor me opzoeken?”
Dan glom z'n heele gezicht al.
„Dan moet je eerst naar den meester van de elfde klas gaan, die
weet je toch wel te vinden?”
Een stomme hoofdknik, vol ongeduld.
„En daar vraag je den sleutel van de platenkist, die hiernaast op
het portaal staat. En dan moet er een plaat in wezen, met een
ooievaar, die op zijn nest staat; en een andere ooievaar vliegt door
de lucht. Kun je 't goed onthouden?”
Weg was hij al, om na een paar minuten triomfantelijk met de
bedoelde plaat terug te komen.
„Prachtig, Piet! Heb je de kist weer gesloten en den sleutel
teruggebracht?”
't Was altijd in orde. In dat opzicht was hij zijn leeftijd eerder
vooruit dan ten achter.
Geen dag ging er voorbij, dat hij me niet op een of andere wijze
van dienst was. Er was b.v. een jongen, die te veel rauwe stoofperen
gegeten had, en wiens maag er op een gegeven oogenblik, midden
onder de les, de brui aan gaf. Dadelijk zocht mijn oog m'n altijd
gewillig factotum.
„Och Piet, wil jij even meegaan, om hem eens netjes af te
wasschen? En haal je dan wat zand om hier overheen te strooien?
Ja, de bank wil je wel even met de spons afnemen, he? Maar daarna
frisch uitspoelen, Piet!”
Kwam de perensnoeper weer binnen, en zag hij nog bleek en
glazig, dreigend met recidive, dan was het:
„Zeg, Piet, je moest den hoofdonderwijzer eens gaan opzoeken.
Neem Jantje maar mee, en vraag, of je hem even naar huis mag
brengen.”
En dan kon ik er heel gerust op zijn, dat Jantje veilig bij zijn
moeder zou belanden.
Moesten de inktpotten bijgevuld of schoongemaakt worden, tot
wien kon ik mij beter wenden dan tot Piet? Met het grootste plezier
bleef hij er een half uur voor na, en verrichtte het onsmakelijk
baantje handig en vlug. 'k Geloof dat hij, ook zonder de reep
chocolade, die 'k vond dat hij dan toch ten minste wel hebben
mocht, tevreden om half vijf naar huis zou gegaan zijn.
Z'n groote onmisbaarheid bleek me echter pas, toen het
kachelweer werd. Voor kachels aanmaken en -houden had hij een
beslist talent. En na een paar dagen liet ik dien tak van dienst dan
ook met de meeste gerustheid in zijn handen.
„Piet, kijk eens, of er niet wat bij de kachel moet.”
„Ja juffrouw, d'r mot een beetje bij. Maar de emmer is leeg. Ik zal
maar een bakkie gaan halen.” En dan sjouwde hij een vollen drager
cokes uit het kolenhok aan.
Een ander keer was het: „Juffrouw, hij leit leelijk. D'r mot een
stukkie turref op. Zal ik maar effies naar het turfhok gaan? Wacht, 'k
zal me lei meenemen, dat dee ik bij de vorige juffrouw ook altijd.”
En dan kwam hij met z'n lei volgestapeld met stukjes losse turf en
een paar minuten later snorde m'n kachel weer, zonder dat ik er
naar omgekeken had.
Zoo liep het halfjaar ten einde en 't werd weer „verhooging”.
In gemeenschappelijk overleg besloten 't Hoofd en ik, dat Piet dit
keer maar mee over moest. 't Was wel net met de hakken over de
sloot, maar je kon hem toch niet langer in de vierde laten. En
misschien zou het zijn ijver en eerzucht nog wat aanwakkeren, dat
hij nu „verhoogd werd”.
Den laatsten dag kwam z'n moeder me bedanken voor „het
genoten onderwijs.” 't Brave mensch verbeeldde zich beslist, dat ze
mij heel dankbaar moest wezen. „Ja juffrouw, Piet heeft het me zelf
verteld, als u niet zoo uw best op hem gedaan hadt,....”
Met gepaste bescheidenheid hoorde ik dien lofzang aan. In m'n
hart echter stelde ik ondertusschen de balans op.
Op de eene schaal kwam al het plezier, dat ik steeds van Piet had
gehad: de surveillance van m'n jongens in 't speelkwartier, het
„dragen” van m'n koor, zijn solozang, de boodschappen, de
inktkokers, 't aanhouden van de kachel. Op de andere lag enkel 't
poovere beetje wetenschap, dat ik hem had kunnen bijbrengen.
Och Piet, wat sloeg de schaal aan jouw kant toen diep door!
ELSJE.
„.... en toen ze weer wakker werden, waren ze heel verbaasd dat
hun Vader en Moeder er niet meer waren. Ze sprongen overeind, om
ze te gaan zoeken en ze riepen zoo hard ze konden: „Va-a-der!” en
„Moe-oe-der!”, dat het door het heele bosch weergalmde. Maar
antwoord kregen ze niet. Toen werden ze toch wel een beetje
ongerust. Waar konden Vader en Moeder gebleven zijn? En weer
riepen en schreeuwden ze, en ze keken naar alle kanten uit, of ze
hen nog niet zagen aankomen. Maar—alles tevergeefs.
„Toen begon hun hartje toch wel heel hard te kloppen, want ze
voelden zich zoo eenzaam in dat groote bosch. De oudsten hielden
hun tranen nog in en bleven maar roepen, al beefden hun
stemmetjes ook. Maar de kleintjes snikten en schreiden zoo luid ze
konden, terwijl zij.....”
„O, juffrouw, ik ben zoo bang,” klinkt opeens een schril stemmetje,
dwars door m'n vertelling heen.
't Is Elsje. Ze staat overeind in haar bank, de oogen wijd open van
ontzetting. Voor dit gevoelige hartje zijn zooveel angst en spanning
te zwaar om te dragen.
Door de klas gaat een gemompel van teleurstelling. Hé, dat flauwe
kind ook weer! 't Werd nu juist zoo mooi! En ze kijken me smeekend
aan, om mij te bezweren, me er toch niet aan te storen. Ze lezen de
woorden van m'n lippen en de temperament-volsten roepen: „Hé
juffrouw, gaat u nou verder.”
Maar eerst moet ik m'n kleine Elsje wat geruststellen.
„Je kent het verhaaltje toch,” zeg ik. „Je weet toch wel, dat ze
naar Klein Duimpje gaan, en dat die er wel raad op weet. Luister nu
maar stil, dan zul je hooren, dat 't goed afloopt.”
„O juffrouw, ik vind het zoo naar! Mag ik dan zoolang bij u komen
staan, tot het uit is?”
Haar twee kleine handjes omklemmen de mijne, haar hoofdje
duwt ze in de plooien van m'n boezelaar. Zoo, dicht tegen mij
aangedrukt, voelt ze wat troost en bescherming en nu kan ze het
sprookje weer verder aanhooren.
Als 't goed gaat, als Klein-Duimpje dank zij de witte steentjes zijn
weg terug vindt, heft ze haar kopje weer op, ziet me vol spanning
aan. En als het hutje weer bereikt is en Vader en Moeder omhelzen
de verloren gewaande kinderen, dan stralen haar lieve oogen me vol
vreugde tegen, maar ook vol dankbaarheid, omdat ik het zoo goed
laat afloopen.
Maar voor de andere kinderen begint het nu pas. Immers, nu
komt het tweede bedrijf, met de broodkruimels. „En dan kunnen ze
den weg niet terugvinden. En dan verdwalen ze! En dan, dan wordt
het donker!”
Voor mij ligt hier altijd het hoogtepunt van het drama. De verdere
avonturen, ze zijn angstaanjagend en verschrikkelijk; het verblijf in
de woning van den reus, die „kindertjes eet”, je moet er niet aan
denken; als hij „menschenvleesch ruikt” en overal zoeken gaat, dan
kunnen er koude rillingen over je rug loopen. Maar toch, 't zijn
sprookjes-avonturen, ieder kind weet in z'n hart, dat reuzen en
menscheneters niet bestaan, en dat het dus ook niet „echt gebeurd”
is. Terwijl de beklemming, die van het groote, in avondschemering
gehulde bosch uitgaat, het gevoel van hulpeloosheid en angst voor
allerlei dreigende gevaren zoo reëel is, dat het ons volwassenen nog,
den adem kan doen stokken.
Daarom weid ik bij die episode altijd wat langer uit; de donkere
schaduwen, de krakende tak, de geluiden in de verte, het fladderen
van den nachtuil, alles krijgt z'n beurt, totdat we ten slotte allemaal
met verademing het roode lichtje tusschen de donkere stammen
zien verschijnen, en met een diepe zucht de huivering van ons
afschudden, de huivering, die toch zoo'n genot was.
Alleen die eene klas, waartoe Elsje hoorde, die heeft Klein
Duimpje niet gehad, zooals 't behoort. Toen ik voelde, hoe die
ijskoude handjes trilden, hoe het lieve kopje zich in namelooze angst
tegen mij aandrukte, alsof 't bij mij bescherming zocht, toen heb ik
het roode lichtje maar gauw laten verschijnen, veel te vroeg
eigenlijk. En de vrouw van den reus is dat keer een
allerbeminnelijkste gastvrouw geweest en de reus zelf een beetje
brommerige, maar toch niets kwaadsbedoelende opa. De vreugde
van de behouden thuiskomst echter, die heb ik met de el
uitgemeten.
En toch was die heele water-en-melk Klein Duimpje nog veel te
gepeperde kost voor m'n kleine, lieve Elsje. Want nooit zag ik
gevoeliger kindje.
Ik weet nog, dat ik eens een jongen zijn griffels afnam, waarmee
hij, na herhaalde waarschuwingen, toch weer zat te spelen. 'k Was
zelf nog jong en streng en ik wou de straf eens terdege
indrukwekkend maken. Daarom zei ik: „En nu krijg je ze ook niet
terug. Ik weet nog wel heel arme kinderen, die altijd goed oppassen.
Aan die zal ik ze geven.”
„O juffrouw,” kwam daar opeens het hooge stemmetje van Elsje,
„geeft u ze aan arme kindertjes? Mag ik er dan ook een paar bij
doen; ik kan er best wat missen.”
Met een handjevol griffels kwam ze uit haar bank gestapt, en—
weg was het indrukwekkende van m'n straf. Het leek eerder een
belooning nu, iets uitverkorens, dat mogen geven aan „arme
kindertjes.”
Lief klein ding! Tegelijk met je mooiste griffels heb je me toen een
paedagogische les gegeven, die ik nooit heb kunnen vergeten!

Door den invloed van de school en den omgang met de andere


kinderen leerde ze zich op den duur wel wat beheerschen. Maar een
overgevoelig zieltje was en bleef ze. Toch was 't geen moeilijk kind
in de klas, want met een blik was ze te regeeren.
Soms kon ze wel eens opgewonden of luidruchtig zijn en moest ze
zich uiten in gebabbel of gelach. Maar als ik dan zei, met een tikje
verwijt in stem en blik: „Zeg Els, hoe heb ik het nu met je, vandaag?
Je maakt het me zoo lastig!” dan kreeg ze een kleur als vuur en
probeerde dadelijk weer kalm en oplettend te worden.
Het moederlijk gevoel was ook vroeg bij haar ontwikkeld: het liefst
speelde ze met de allerkleinsten. En werd zoo'n nieuwelingetje op de
speelplaats soms eens omver geloopen, dan was zij de eerste die
het zag en te hulp snelde. Met de grootste zorg werd het kleintje
dan opgeraapt en afgeveegd, getroeteld en getroost. En kreeg ze
dan nog de vereerende opdracht, om hem onder de kraan wat af te
wasschen, dan stapte zij heen met haar beschermeling aan de hand
en 't was, als liep zij over rozen.
Maar o wee, als er eentje wat hard te vallen kwam, en het werd
een buil, een geschaafde knie of een bloedneus! Dan had ik alle
moeite, haar in 't spoor te houden. Meest redde ik den toestand met
een grapje: „Kind, bewaar je tranen nog even, morgen gaat hij pas
dood.” Of: „Straks komt de zieken-auto voor. Els mag meerijden op
den bok, maar eerst moet ze even lachen.”
Een blikken keteltje was ze: gauw heet en gauw koud.

„En juffrouw?” vroeg het Hoofd, toen hij even in de klas moest
wezen, „hebt u 't ze al verteld?”
„Nee m'nheer,” zei ik haastig, in de hoop, dat ik het gevaar nog
afwenden kon, „dat heeft nog wel even den tijd.”
Maar hij scheen me niet te begrijpen, en zei: „Nu dan zal ik het ze
maar eens vertellen.”
Breed en vierkant plaatste hij zich midden voor de klas, leunde
met beide handen op de voorste bank en overzag de rijen met een
veldheersblik.
Als een electrische stroom ging het door de kinderen; ze voelden 't
allemaal: er kwam wat, en 't was slecht nieuws. Hulpeloos keken ze
eerst naar mij en toen weer naar het strenge gezicht van den
hoofdonderwijzer.
Nadat hij op deze wijze stemming gemaakt had, begon hij pas te
spreken. Zijn stem had de plechtige klank, die ieder onderwijzer er
bij gepaste gelegenheden in weet te leggen:
„Kinderen, jullie mag je juffrouw nog wel eens goed aankijken.
Want—ze gaat bij ons vandaan, naar een andere school, een heel
eind hier uit de buurt.”
Even wachtte hij; toen kwam, verpletterend als een een
doodvonnis, de klap op de vuurpijl: „Aanstaanden Zaterdag is ze hier
voor 't laatst.”
Met een zekere spanning liet ik mijn blik over de klas gaan, want
ik was toch benieuwd, hoe ze het zouden opnemen.
Neen hoor, ik had me niet in ze vergist: ze vonden het naar. Er lag
iets van verwijt in hun blik; ik hoorde: „He, juffrouw!” en „Wat
jammer!” roepen.
Maar opeens klonk van Elsje's plaats een luide uitroep, haast een
schreeuw:
„Nee meneer, nee, nee!”
Heftig schudde zij het hoofdje, keek den grooten man woedend
aan. Toen zochten haar oogjes mij, en daarbij werd haar blik zacht
en smeekend:
„Nee, he juffrouw?”
En toen ik niets anders wist te doen, dan enkel maar zachtjes van
ja te knikken, toen wierp ze zich voorover op haar bank en begroef
het hoofd in beide handen onder luid geschrei.
Nu is schreien altijd aanstekelijk. Ik weet zeker, dat er zonder Elsje
geen traan vergoten zou zijn. Maar nu ze haar zoo erbarmelijk
hoorden huilen, werden de gevoeligsten onder mijn meisjes toch ook
een beetje aangedaan. Zeker vonden ze het, nu ze er goed over
nadachten, toch eigenlijk ook wel heel erg. En de een na de ander
haalde de waterlanders voor den dag en begon een deuntje te
schreien.
Jongens huilen niet, en zeker niet, als ze al negen of tien jaar zijn.
Dus lachten ze een beetje spottend naar elkaar, om die „flauwe
schapen”, maar het lachen ging toch niet heelemaal van harte en
zelfs zagen bij een paar de oogen bedenkelijk rood.
Het Hoofd stapte de klas uit, het aan mijn beleid overlatend, hoe
ik het schreiende troepje weer tot rede zou brengen. Bij de deur
knikte hij nog eens, echt voldaan: hij had bloed gezien.
Ik ging voor de klas zitten, zocht mijn overredendste toon uit en
begon met ze te praten. Dat ik het ook niet prettig vond, maar dat
er niets aan te doen was. En dat ze vast wel een aardige juffrouw
terug zouden krijgen, of misschien wel een meester! En als ze me nu
die laatste dagen nog eens echt plezier wilden doen, dan moesten ze
nu niet langer schreien, maar goed gaan opletten.
Vooral het laatste hielp. Ze droogden hun tranen, vouwden devoot
de handjes en keken me braaf aan: „Zitten we zoo zoet genoeg?”
Alleen Elsje was niet tot bedaren te brengen. En omdat ik uit
ervaring wist, dat iedere verdere poging haar nog maar meer van
streek zou maken, liet ik haar stil aan haar lot over. En ik gaf een
zucht van verlichting, toen eindelijk de bel ging en ze, nog steeds
snikkend, in de rij mee liep.

Toen kwam de laatste ochtend.


De kinderen hadden het blijkbaar thuis verteld. De meesten waren
„op hun Zondagsch.” Sommige brachten bloemen voor mij mee, of
hun portretje.
Het deed me toch even aan. Ik had daartoe trouwens niet veel
noodig, want ik was zelf een beetje onder den indruk van het
naderend afscheid.
Het was mijn eerste „vaste” klas geweest. Daarvóór had ik in veel
klassen gewerkt, eerst als kweekeling, toen als volontair, eindelijk als
„tijdelijke”. Maar dat was toch allemaal nog niet je ware. Je moest je
richten naar de onderwijzeres van wie de klas hoorde, en, wat 't
voornaamste was, je wist, dat je over een paar weken de kinderen
toch weer verlaten zou. Neen aan zoo'n „tijdelijke” klas, daar wilde
je je niet te veel aan hechten.
Maar toen werd ik voor „vast” benoemd en trof toevallig de
nieuwe cursus en „de kleintjes”. Zoo kwamen we dus dien eersten
dag samen in een nieuwe omgeving, vol hoop en verwachting en
met frissche idealen. Geen wonder, dat we dus dadelijk een band
hadden.
Ik heb geploeterd en gewerkt met die klas en natuurlijk ook heel
wat geblunderd. Maar ik blaakte van lust en ijver. Het Hoofd had er
schik in en liet me begaan. Vroeg ik om zùlke schriftjes of dàt soort
pennen, ik kreeg ze. Zelfs het mooie nieuwe stel leesboeken, waar ik
zoo naar verlangde, ofschoon de andere nog best bruikbaar waren.
Voor mijn Sinterklaas bouwde hij een estrade, waar een echte
bisschop tevreden mee geweest zou zijn en haalde toen uit zijn
woning, die naast de school lag, zijn eigen fluweelen armstoel. En
dan kon hij me soms eens wijs toeknikken en zeggen: „Ik mag het
wel, dat idealisme van de jeugd; ik ben alleen benieuwd, hoe lang je
't zult houden.”
En die zelfde klas had ik nu al haast drie jaar, toen ik
overgeplaatst werd. Natuurlijk was er wat mutatie in geweest, maar
toch niet zoo heel veel, want de school lag in een uithoek van de
stad, waar de ouders niet zoo vaak verhuizen. En het scheiden was
een heel ding voor me.
Ik wou dien laatsten morgen dan ook niet gewoon mijn rooster
volgen en daarom begon ik, met ieder een schoon blaadje papier te
geven.
Toen zei ik: „Nu moet je bovenaan eerst je naam schrijven, want
die blaadjes zal ik bewaren als een herinnering aan jullie. En dan
mag je zelf kiezen, wat je het liefste doen gaat: de sommen van het
bord maken, of een taallesje, of een les uit je leesboek
overschrijven. 't Is mij precies eender; als je 't maar op z'n
allermooist doet.”
In een oogenblik waren ze vol wijding aan het werk. En ik had de
handen vrij om m'n kast op te ruimen, m'n eigendommen bij elkaar
te zoeken, kortom, alles voor de verhuizing gereed te maken. Toen
deelde ik nog wat plaatjes en andere voor den dag gekomen
schatten uit, liet de blaadjes ophalen, boeken, penhouders enz. uit
de kastjes opbergen en zoo kregen we den tijd vóór het
speelkwartier om.
Na het spelen had ik nog ruim een uur. En dien tijd had ik
bestemd voor de „fuif”. Ik haalde een paar groote zakken lekkers uit
m'n tasch en zei: „Kinderen, nu ga ik tot slot trakteeren en een mooi
verhaal vertellen. Wat zeggen jullie van zoo'n gezelligheid?”
Maar ik had buiten m'n Elsje gerekend. Ze had zich den heelen
morgen goed gehouden, maar nu ik van trakteeren en vroolijkheid
sprak, werd het haar te machtig. Verwijtend keek ze mij aan en haar
oogen vulden zich met tranen.
„Lieve hemel, kind, doe me dat niet aan,” dacht ik bij mezelf.
En gauw, om het onheil nog te bezweren, zette ik een der zakken
voor haar neer.
„Kijk eens, wat een lekkere koekjes! Wil jij die eens netjes voor
me uitdeelen? Je gaat maar net zoo lang rond, tot alles op is. Maar
er niet van snoepen, hoor!”
Jawel, ik had goed grapjes maken. Daar lag haar hoofdje alweer
op de bank, de beide armen eromheen, terwijl het heele lijfje
schokte van 't snikken.
Met een zucht gaf ik de zak aan een ander kind. Maar ik wou me
nu eens niet door dat kleine overgevoelige ding van de wijs laten
brengen. Ten slotte gebeurde er toch geen onheil. Over een paar
maanden zouden ze waarschijnlijk toch in andere handen zijn
overgegaan. En ik wist vooruit, dat de meesten a.s. Maandag
vriendelijk tegen m'n opvolgster zouden lachen. En als ze maar een
beetje slag had, om hun harten te winnen, dan was ze binnen
veertien dagen meester van het terrein.
Dus asjeblieft de stemming er in gehouden!
„Daar,” zei ik, tegen een dikke jongen, met vrij schoone handen.
„Jij de borstplaatjes. Maar kinderen, houdt 'm in de gaten, want ik
zie aan z'n neus, dat hij de dikste voor zich zelf wil uitzoeken.”
Toen het uitdeelen klaar was, begon ik m'n verhaal. Natuurlijk had
ik gezorgd voor een „komische film,” zooiets van een aap, die het
heele huis op stelten zet met zijn streken, of van een heel dommen
knecht bij een rijken, ouden heer, iets, waar kinderen niet van
kunnen tot bedaren komen van de pret. Den vorigen avond, toen ik
het opgezocht had, was ik zeer tevreden geweest over mijn vondst
en had me er een groot succes van voorgesteld.
Maar, het lag zeker aan mijn vertellen, dien ochtend, of aan de
kleine snikkende gedaante, het hoopje troostelooze ellende daar op
de derde bank: de fuifstemming, ze wou niet komen, hoe ik me ook
inspande. En met de aandacht voor mijn vertelling stond het meer
dan treurig. Enkele meisjes hadden den zakdoek te voorschijn
gehaald en zaten daarmee ijverig in hun oogen te wrijven, andere
knabbelden op hun koekjes of staarden het raam uit. De meesten
zaten me suffig aan te kijken, maar luisterden blijkbaar toch niet.
Want als er „gelachen” moest worden, keken ze eerst even
verstrooid op en lachten dan witjes mee.
Nooit heb ik zóó verteld! Het was net een nachtmerrie. En het
ergste was, dat mijn horloge blijkbaar met de booze geesten
samenspande: het wou maar niet vooruit. Eerst talmde het
afschuwelijk met half twaalf aan te wijzen. En toen het eindelijk op
half twaalf stond, toen wou het er ook niet weer vandaan. Het was
om dol te worden.
En zoo vertelde ik mijn verhaaltje af, onder het „succes d'estime”
van mijn toehoorders. Toen het eindelijk uitging als een nachtkaars,
wees mijn horloge tien minuten over half twaalf! Nog twintig
minuten dus.
Hoe ik ze heb omgekregen, weet ik niet meer. Ik liet de kinderen
al hun mooiste liedjes nog eens zingen, maar zelfs dat gaf niet
meer: de pittigste melodietjes lijsden en sleepten ze, dat het niet om
aan te hooren was en ik bij mezelf dacht: Dat zijn nu de resultaten
van drie jaar zangonderwijs.
En toen eindelijk—toen ik de hoop al begon op te geven—ging de
bel! Ik was zoo doodop, dat ik niets anders wist te bedenken dan:
„Nou kinderen, 't ga jullie goed hoor! En doe maar flink je best bij de
nieuwe juffrouw.”
Ik ging bij de gangdeur staan om ze één voor één goeiendag te
zeggen. Sommigen had ik wel graag eens willen pakken, maar ik
wou geen onderscheid maken. Op de beurt gaven ze me een
handje, keken me even aan, drukten soms even hun snoetje tegen
mijn hand of gaven me hun twee handjes tegelijk. En daarbij kreeg
ik allerlei betuigingen van trouw en genegenheid en „dat ze bij de
nieuwe juffrouw goed zouden oppassen.”
Het allerlaatst kwam mijn kleine Els aangesloft, moe-geschreid en
òp van al de emotie. Ik nam het kleine behuilde gezichtje in mijn
twee handen en probeerde het op te heffen, maar ze wou me niet
aankijken: de natte wimpers bleven op haar wangen liggen. Toen
bukte ik bij haar neer en zei, dat ze nu een groote, verstandige meid
moest wezen, en dat ze vast een veel lievere juffrouw terug zou
krijgen. Maar ik weet niet, of ze me verstond. Toen ik haar na een
paar lieve woordjes losliet, zakte haar hoofdje weer voorover en zoo,
met afhangende schoudertjes, haar tasch bungelend langs haar
beenen, sjokte ze de gang door.
Er was nog een, die 't zag. Het Hoofd stond als gewoonlijk bij de
straatdeur en toen ik het rampzalige figuurtje nog even nakeek, ving
ik zijn blik op.
Met een ruk keerde ik me om. Hem ging 't in ieder geval niet aan.
In de leege klas was het kil en doodsch nu. Vlug pakte ik mijn
eigendommen bij elkaar, toch opgelucht, dat het nu achter den rug
was. Het afscheid van mijn collega's kon kort zijn: met de enkele,
voor wie ik sympathie had opgevat, bleef ik de kennis toch
aanhouden.
Ziezoo, ik was zoo ver. Even nog een laatste afscheidsblik langs de
bankenrijen....
En toen opeens zag ik iets, dat me, ondanks mijn zelfbedwang,
toch de tranen in de oogen deed springen:
Op Elsje's bank lag een kleurig hoopje lekkers. Mijn „traktatie”, die
had ze versmaad!
ARIE BOMBARIE.
„Ja juffrouw, u hoeft me d'r eigenlik niks van te zeggen, ik kan me
best begrijpen, wat u met 'm uitstaat. 'k Zeg van de week nog tegen
me man, die juffrouw van de school, zeg ik, dat mensch raakt al dr
zonden an die jongen kwijt. Hoe u 't klaarspeelt om 'm vijf uur op
een dag stil te houden, daar staat mijn verstand bij stil. Ik voor mijn
zie geen kans, hem vijf minuten op z'n stoel te plakken; zóó heb ik
m'n hielen gedraaid, of hij smeert 'm weer, de straat op. En een
brutale mond, dat hij opzetten kan! Van al de andere vier samen,
heb 'k niet zooveel last als van dat kind alleen.”
Ze had me na vieren bij school opgewacht, moeder Van Ekeren,
om eens te vragen, „hoe 't nou met Arie ging, op school!” Maar
nauwelijks had ik m'n mond open gedaan, of ze was me in de rede
gevallen met een stortvloed van woorden, om haar overvol
moederhart eens uit te storten.
„Weet u wat ik wel eens denk?” ging ze voort, en aan het dalen
van haar stem en haar geheimzinnig gezicht kon ik merken, dat er
een confidentie in aantocht was, „toen hij komen moest, werd net
me moeder ziek. An 't hart had ze 't, ziet u. En toen heb ik wat
verlangd, om nog es naar dr toe te gaan! Maar ik kon niet weg he, 'k
zat hier met vier kleine kinderen en eentje op de komst, breek daar
maar ineens uit. En 't was nog niet eens naast de deur. Moeder
woonde heel in Groningen. Nou, en toen is ze dan ook gestorven,
zonder dat ik 'r nog eens gezien heb. Niet eens op de begrafenis ben
ik geweest, want 't liep net op 't laatst met me; veertien dagen later
werd 't kind geboren. En nou denk ik altijd, dat 't schaap die onrust
van me meegekregen heit. Me man lacht me dr om uit, maar wat
zegt u nou, juffrouw?”
Ja wat zou ik zeggen? Als onderwijzeres raak je gewend aan heel
wat zonderlinge vragen: „Of 't nou heusch komt, doordat me man
vroeger bij de huzaren heeft gediend, dat al de kinderen zulke
kromme beenen hebben” en „of ze nou die kale plek op Jantje z'n
hoofd nog niet eens met Haarlemmer olie zou insmeren?” Maar deze
kwestie was me nog nooit voorgelegd en 'k zei dus maar op goed
geluk, dat het „best mogelijk” was. Maar bij mezelf dacht ik: Als 't
alleen door de ziekte van z'n grootmoeder komt, dat die jongen
zoo'n lastpak is geworden, dan had ik 't goeie mensch toch nog
graag een jaar van volmaakte gezondheid gegund.

't Was een knap gezin, de Van Ekerens. De drie oudste jongens
waren gewone bengels, waar je niets extra mee te stellen had.
Daarop volgde het zusje, een lief zacht kind, een beetje zorgerlijk
moedertje. En dan werd de rij gesloten door onze Arie, die dus
volgens z'n moeder erfelijk belast was met haar onrust. Maar
volgens welke geheimzinnige wet hij al de ondeugendheid geërfd
had, van z'n drie broertjes samen, en al de brutaliteit die z'n vader,
een beleefd, onderdanig schoenmakertje, z'n heele leven te weinig
had gehad? En wie van z'n voorouders hem dat plagerige in zijn aard
had meegegeven, die trek om ieder, dien hij aandurfde, het leven
lastig te maken?
't Was een verbazend moeilijk kind in de klas. Had je er gemiddeld
vijf zoo, dan zou je 't baantje er aan moeten geven. 'k Vergeleek
hem in gedachten vaak bij een jong stiertje, zoo woest en
ontembaar was hij. 't Had een van de beste leerlingen kunnen zijn,
want hij had een uitstekend verstand, maar hij verkoos geen vijf
minuten achtereen op te letten of z'n best te doen. Maakte hij bv.
een taallesje, dan was 't opmerkelijk, het verschil te zien tusschen
den eersten regel en den laatsten. Trouwens, schrijven was niet zijn
lievelingsvak, altijd brak hij de punt van z'n potlood, altijd trof hij
een griffel, dat kraste.
En toen we met pen en inkt begonnen, werd 't nog slimmer. Nu
eens „spatte die akelige pen zoo erg”, dan weer „zat er telkens een
haar aan” of „viel er zoo maar opeens een klad op z'n werk”. Dat
waren nog de dagen dat hij te regeeren was. Maar nu kon je 't ook
nog treffen, dat hij een van z'n woeste buien had. Dan smeerde hij
getroost z'n heele schrift vol, „want er was een mop op gevallen, en
dat had hij niet gezien en toen had hij er zóó met z'n hand over
gestreken.” En als hij nog maar niet met opzet propjes papier in z'n
inktkoker stopte en daarmee z'n heele bank vol knoeide, dan had ik
nog niet eens wat voor 't zeggen.
In 't speelkwartier was hij 't ergst. Je k o n hem haast niet met de
andere kinderen laten meespelen. Altijd werd 't ruzie en vechten in
zijn hoek. Bij ieder spel wou hij de lakens uitdeelen, en begon dat de
andere jongens te vervelen, en lieten ze hem niet meedoen, dan
zocht hij z'n troost in 't plagen van de kleintjes. „Juffrouw, Arie het
me pet over de schutting gegooid. Arie het me fliegmessientje
afgegapt, Arie smijt me suurtje in 't sand”, klonk het dan huilend van
alle kanten. Of hij kreeg z'n „kippekuur” en begon als een gek over
de speelplaats te hollen, zwaaiend met z'n armen en alles en
iedereen omver loopend. Geen oogen had je genoeg voor dien
jongen.
Eens kregen we een nieuweling, een oolijke kaaskop. Die had
blijkbaar z'n oogen en ooren op de rechte plaats. Met zijn oordeel
over Arie was hij tenminste gauw klaar en 't was raak ook. In 't
speelkwartier stond hij eerst even met een stuk of wat jongens te
smoezen en te gniffelen. Toen maakten ze een lange rij en
begonnen met groote stappen de speelplaats af te loopen, precies in
de maat. En daarbij riepen, neen schreeuwden ze uit volle borst:

Arie-bombarie,
Je neus staat krom!
Een dubbeltje segare
En 'n dubbeltje werom!
't Vers sloeg oogenblikkelijk in. Alle kinderen hielden op met
spelen en keken lachend toe. Toen 't voor den tweeden keer ingezet
werd, was de rij al dubbel zoo lang, 'k geloof dat de heele klas er
achteraan wilde. Maar daar had je Arie. Met z'n vuisten wou hij den
nieuweling te lijf en 'k moest er vlug tusschen komen.
„Bedaar maar” zeg ik, „'t gaat heelemaal niet op jou, want je neus
staat toch niet krom. Maar als je zoo'n vechtersbaas blijft, dan kon je
er wel eens een tik tegen krijgen, dat ze reden hadden, het te
zingen.”
En den kaaskop gaf ik den raad, dat versje maar voor z'n moeder
te bewaren, want dat ik 't niet meer hooren wou. En dat de kinderen
hier uit de klas elkaar nooit mochten plagen.
Daarmee was 't uit en 't rijmpje hoorde ik ook niet meer. Maar de
bijnaam was t e toepasselijk, te mooi. Die zat. Eerst werd hij er
woest om en gaf 't aldoor kloppartijen. Maar toen gingen ook de
jongens uit de hoogere klassen hem zoo noemen, en zelfs z'n eigen
groote broers. Toen kon hij er niet meer tegen op, hield zich groot
en lachte er om. Ja, op 't laatst werd hij er, geloof ik, zelfs trotsch
op.
En zoo bleef het Arie-Bombarie. Of liever nog voor 't gemak enkel
Bombarie.

Wie nooit voor schooltijd alleen in een leege klas is geweest, kan
zich geen voorstelling maken, van het eigenaardige rumoer, dat dan
door de open ramen naar binnen dringt. Wij ingewijden kennen het
echter zoo goed, dat wij er de fijne nuancen van leeren
onderscheiden. Zoo hooren wij b.v. al aan 't leven voor de school,
wat voor weer het buiten is. Bij mooi weer zijn de kinderen druk en
uitgelaten, bij groote hitte hoor je ze haast niet, dan hangen ze
landerig op stoepen of tegen den muur. Bij stortregen ook niet, want
dan komen ze zoo laat mogelijk, of schuilen zoo lang in een portiek
of onder een afdak. 't Stilst is het, als er ijs in de grachten ligt, dan
staan er alleen de heele kleintjes aan moeders hand en hoor je enkel
't zeurige gekles: „Och juffrouw, wat u seit? En sal ik nou is wat
segge...” Maar ligt er sneeuw, dan is 't lawaai dubbel sterk, maar 't is
een vroolijke, aardige drukte. 't Ergst is de herrie bij stormachtig
weer, dan hebben ze den wind in 't hoofd en gillen als dol door
elkaar. Dan zuchten we eens tegen elkaar en zeggen: „Hoor je ze?
Dat kan weer een dagje worden. Ik zal ze maar dadelijk de pen op
den neus zetten.”
Natuurlijk is 't rumoer ook grooter op dagen, dat ze bizonder
opgewonden zijn: bij prijsuitdeeling, met Sinterklaas, den laatsten
dag voor de vacantie, enz. En op gewone dagen kan plotseling fel
tumult losbarsten, wanneer iets de gemoederen in beroering brengt.
Och, 't hoeft heusch niet zooveel belangrijks te zijn, een kleine
vechtpartij is al voldoende. En dan moet een der onderwijzers juist
aankomen en de twee schuldigen alvast „mee naar binnen” nemen!
Dan volgen er heftige debatten, wie gelijk had en wie „begonnen” is,
waaraan zelfs de kleintjes deelnemen.
't Felst echter laaien de vlammen van hun emotie op, als de
„plietsie” er aan te pas komt. Een jongen heeft bv. een ruit
ingegooid, een deur volgekrast, een voorbijganger gemolesteerd en
nu wordt hij huilend en wel door een diender naar school gebracht,
omstuwd door de heele bende. Dan moet je ze hooren! Allen
schreeuwen ze door elkaar en ieder wil den ander weer
overschreeuwen. En er zijn zulke veelbelovende stemmetjes bij, als 't
ware „geschapen” om later met garnalen of radijs, met visch of
komkommers te venten, om „de laatste stuiptrekkinge fan 't
kappitaol” te colporteeren, of om eenvoudigweg maar een klein
twistgesprek met een buurvrouw op touw te zetten, waarbij de heele
buurt uitloopt. Wat ze dan zoo heftig te betoogen hebben? Wel, ten
eerste rijst er onmiddellijk verschil over de kwestie of beklaagde al
dan niet schuldig is aan 't hem ten laste gelegde: op z'n minst de
helft begint zonder dat zij er iets van afweten, te roepen, dat „hij het
niet eens gedaan heeft.” En dan wordt de zwaarte van de straf
overwogen: of hij vannacht op 't politiebureau zal moeten blijven?
en: of z'n vader 't zal moeten betalen?
Maar, zooals ik al zei, er hoeft volstrekt niet zoo iets ernstigs
gebeurd te zijn. 'k Ben ook wel eens bij plotseling geschreeuw
ongerust naar 't venster geloopen voor—een jongen met een
matrozenhoed op. „Hajewiet, hajewiet,” gilde de bende „een jonge
mit 'n maassieshoed!”
En dus schrok ik ook niet, toen op een middag voor schooltijd
opeens de storm weer opstak. Ik keek uit het raam, zag de kinderen
in clubjes bijeen staan, heftig betoogend en gesticuleerend, maar ze
schreeuwden zoo door elkaar, dat ik er geen woord van verstaan
kon. „Zeker een vlieg in het water gevallen”, dacht ik bij mezelf, „zoo
meteen zal ik 't wel hooren.”
't Hoofd scheen de ongewone drukte ook gemerkt te hebben: hij
zette maar gauw de deuren open.
En daar had je ze, daar kwamen ze aanstormen, holderdebolder
de trap op, elkaar duwend en stompend, om toch maar de eerste te
zijn, die 't groote nieuws aan de juffrouw komt brengen. In een prop
drongen ze de deur in, hijgend en opgewonden:
—Juffrau, Arie is oferreje.
—Hij is onder 'n auto gekomme.
—Ja juffrau, mit se hoofd dr onder.
—Nietes, mit se beene.
—Och seg, jij sting dr niet eens bij.
—Hij is dood, juffrau!
—Och ga weg.
—Welles, hij had se ooge toe, toe die meneer 'm optilde.
—Nou, dan hoeft-ie toch nog niet dood te zijn. Seg! Die is goed.
—En die meneer het 'm in de autau gedrage.
—En toe benne se met 'm weggereje.
—Waar benne se nou met 'm na toe, juffrau!
—Nou, na se moeder.
—Nietes, na 't gasthuis.
—Of na de plietsie.
—Nee hoor, na 't lijkehuisie.
Zoo schreeuwden en kibbelden ze door elkaar.
Ik voelde, dat ik wit en strak van de schrik werd. M'n hemel, dat
levendige, bewegelijke kind! Zou 't mogelijk zijn, dat die dood was!
Of, nog erger, verminkt, hulpbehoevend voor z'n verdere leven? Ik
moest er niet aan denken. 'k Zag hem vóór me, in tien verschillende
houdingen, maar altijd in beweging en ook altijd bezig iets
verbodens te doen: glijdend langs de trapleuning, klimmend in een
lantaarnpaal, dansend op 't dunste ijs, hangend achter aan de tram,
dravend dwars voor een hollend paard. Nee, 't was eigenlijk geen
wonder, dat hij een ongeluk gekregen had.
„Hoe is 't zoo gekomen?” vroeg ik. En dadelijk brak de stortvloed
weer los.
—Nou, we deeë bokkie, soo met petje-af. En toe kwam opeens die
autau de hoek om. En toe lagge onse pette dr nog. En toe is de
autau dr net bij en toe pakt Arie se pet nog gauw en toe kwam die
dr onder, soo met se hoofd voorover. En 't wiel ging sóó over se
beene! En die meneer, die stapte sellef uit, en toe hep-tie met de
sjefeur same Arie d'r in gedrage, en toe benne se weggereje”.
Ja, 'k zag het voor m'n oogen gebeuren, 'k zag de lange rij
bokspringers, 'k zag ze uiteenstuiven voor de naderende auto, en
toen moest Arie, branie als altijd, natuurlijk weer laten zien, wat h i j
wel durfde. En nu, och Heer, deze eene keer was 't mis gegaan....
En ik rilde bij de gedachte aan dat tooneel.
Den heelen middag bleef 't me bij. En met vreezen en beven
stapte ik na vieren de kleine schoenmakerswerkplaats binnen.
Daar zat vader van Ekeren met z'n blauwe voorschoot aan de tafel
bij 't raam. 't Werk lag in z'n schoot en over z'n stalen bril keek hij
vol aandacht naar z'n vrouw, die midden in 't vertrek druk stond te
betoogen. Zoodra zij me zag, riep ze uit:
„Och kijk nou es, daar heb je zn juffrouw ook. Wat een jongen, he
juffrouw, je staat er toch wat mee uit! Wil je wel gelooven, dat de
schrik me nog in me beene zit?”
En ze viel neer op een der stoelen.
Ik herademde. 't Was dus niet ernstig.
„Hoe is 't nu met hem?” vroeg ik.
„O, 't is Goddank goed afgeloopen, dit keer. Ik kom zóó van 't
gasthuis en 'k sta 't al net an me man te vertellen; de zuster zegt
tegen me:—Hij is al heelemaal thuis hier en hij heeft allemans
praats.” Nou, dat kennen we, he juffrouw, dan is hij weer boven
Jan.”
„Waar heeft hij zich eigenlijk bezeerd?”
„Ja, hij zit overal met builen en schrammen. En z'n eene voet zit in
't verband. Maar 't heeft niets te beteekenen, zeggen ze. Ze houen
'm alleen voor de sekurigheid nog wat in bed. Maar met een paar
dagen krijg ik hem weer thuis.”

Moeder van Ekeren had 't zich wel wat al te rooskleurig


voorgesteld. 't Duurde nog wel een paar weken.
En,—ik durf 't haast niet te vertellen,—maar elken dag genoot ik
van m'n rust. En de klas ook. Er kwam een kalmte over de kinderen,
waar ik me telkens weer over verbaasde. Zoo gehoorzaam en zoet
als engelen waren ze.
Tot ik op een morgen m'n Bombarie weer in de gang hoorde
schetteren. En daar stond hij al vóór me, netjes schoon gewasschen,
z'n haar in een keurige scheiding gekamd en met de traditioneele
spiksplinternieuwe blouse aan. (Dat is zede, alle kinderen die uit het
ziekenhuis komen, krijgen een nieuw kleedingstuk aan. 'k Heb 't nog
nooit anders gezien).
„Zoo, ben je daar weer?” zei ik, zoo hartelijk mogelijk. „Nou, jij blij
he, dat je uit dat gasthuis bent.”
Maar met z'n oude branie trok hij z'n schouders op.
„Huh, 't was dr wat leuk! Van de zusters moch ik alles en die eene
dokter die maakte aldoor lolletjes. En dr was zóó 'n groote steene
bouwdoos, en die kreeg i k altijd. En die meneer van de auto die het
tweemaal een groote kist druive gestuurd, heelemaal voor mijn
alleen, en toe moch ik se uitdeele, voor de heele saal.”
De kinderen stonden er met open mond omheen, en in hun oogen
las ik de bewondering en ook een beetje afgunst. Die Arie, die 't zoo
fijn had gehad! Dat kon ik toch niet goed verdragen. Ik had juist
paedagogische munt geslagen uit dit geval: „Nou zien jullie 't eens;
die Arie, die altijd zoo wild en onvoorzichtig is, nu moet hij in 't
gasthuis liggen en pijn lijden.” En toen hadden ze allemaal wijs
geknikt en ze waren diep onder den indruk geweest. En nu zou die
jongen 't weer heelemaal bederven. Dan wou ik toch eerst ook nog
een woordje zeggen.
„Nou”, begon ik, „'t was toch niet allemaal plezier. Toen je daar
onder die auto lag, toen kon je je lachen toch wel laten.”
Maar hij troefde me leelijk.
„Huh, 't dee haast niet eens pijn. En die meneer die lee me soo
fersichtig neer en hij hield se handschoene an. En toe see die tege
de sjefeur: sachies rije. En ie froeg maar als, of ik errege pijn had.
Maar 'k lee wat lekker op die sachte kusses, en hij sat sellef op 't
kleine bankie. En 't was soo prachtig binne in die autau, dr hing een
spiegeltje in en twee faasies met bloeme....”
't Leek wel de zegetocht van Asschepoester in de glazen koets.
M'n kinderen gaapten van bewondering en afgunst. En ik gaf 't maar
op.
„Kom, kijk maar eens, of je je plaats nog vinden kunt”, zei ik. En
terwijl hij door de rij liep, hoor ik hem nog verder opscheppen over
z'n autotocht. Toen liet hij zich in z'n bank zakken en besloot z'n
verhaal: „Nou hoor, emmes faan gereje!”
O, Arie Bombarie!
M I E N TJ E .
Hij was koloniaal geweest en uit Indië teruggekomen met een
stijven arm, een klein pensioentje en een medalje op z'n borst voor
'k weet-niet-hoeveel jaren trouwen dienst. Toen had hij hier een
betrekking als kantoorlooper gekregen. En, toen hij zoo tegen de
vijftig liep, was de liefde over hem gekomen.
Zij had van haar twaalfde jaar af „gediend”, had altijd „deftige
diensten” gehad, waar ze netjes werken en respect voor 't gezag
had geleerd. Een spaarbankboekje zal ze ook wel gehad hebben. En
toen over haar de liefde kwam, was ze al aardig dicht bij de veertig.
In elk geval, ze hadden geen van beiden de ouderlijke toestemming
meer noodig.
En het eenige pand hunner jonge liefde, Wilhelmina Helena en
nog wat (best mogelijk, dat ze haar naar de Koningin genoemd
hadden), kwam op een goeien morgen aan Moeders hand m'n klas
binnen.
Nog zie ik ze vóór me; 't was ook geen stel, zooals je ze alle
dagen tegenkomt. De Moeder liep mank, op een eigenaardige
resolute manier. Bij iederen stap zwaaide haar bovenlijf een eind
schuin-rechts naar achteren, maar ze kwam evengoed vooruit als
een ander en scheen er ook in 't minst geen last van te hebben. Ze
droeg een lange, wijde rok, die 't stof van den vloer bij elkaar
veegde, een soort ouderwetsche schoudermantel, waarschijnlijk een
erfstuk, en een torenhoog kapotje, waarvan de gitjes vroolijk heen
en weer schommelden bij iederen ruk van haar rechterbeen. Haar
gezicht leek van hout, 't was geelbleek en vierkant en deed me
dadelijk aan Katrijn uit de poppenkast denken. Ze zag er niet
bepaald „gemakkelijk” uit, maar tegen mij was ze suikerzoet en
uiterst beleefd, want ik vertegenwoordigde in haar oogen de
autoriteit; den Burgemeester, de Leerplichtwet, alsjeblief!
't Kind zag er nog zonderlinger uit. 't Had een donkerbruin jurkje
aan van een stijve, onmogelijke stof, een lang strak lijfje en een
ruime geplooide rok, die haast op haar schoenen hing. 't Grauwe
sluike haar was met veel water achteruitgekamd en bijeengehouden
door een ijzeren sluitkam. Maar 't meest trof me het gezichtje; och
Heer, nooit zag ik zoo'n kindergezichtje, zoo ouwelijk en triest. Uit
haar groote bruine oogen keek mij een ziel aan, die voorgoed
afstand had gedaan van 's levens blijheid en die met doffe berusting
alle verdere slagen van 't noodlot afwachtte.
Zoo kwam het tweetal voortaan elken morgen het lokaal binnen.
Pas bij haar bank liet Mientje Moeders hand los. Dan ging ze
dadelijk, stil als een muisje, naar haar plaats, vouwde de witte
handjes aan den rand en ging me zitten aankijken.
Een paar maal probeerde ik, 't haar af te leeren: „Dat hoeft niet
Mien, je mag nu nog zitten, zooals je wilt. Straks als de bel gegaan
is, zal ik nog wel waarschuwen.” Dan kwam er even een glimlach op
't groenbleeke gezichtje en gehoorzaam maakte ze haar handjes los.
Maar geen minuut later zat ze weer „in de houding.” Blijkbaar vond
ze den securen weg toch maar altijd den besten, je kon nooit eens
weten, hoe die bel soms onverwachts zou gaan. En zeker had ze ook
niet zooveel behoefte aan beweging en vrijheid als een ander kind.
Onder de les spande zij zich in met een ijver, die me soms zeer
deed. Ze was niet zoo heel vlug van begrip en ze verzuimde vaak.
Toch bleef ze bij, met groote wilsinspanning. Vooral met rekenen had
ze moeite, dan hielp ik haar nog wel even apart en dan ploeterde en
zwoegde ze zelf verder, tot ze de nieuwe sommen weer de baas
was. Maar angstig en gejaagd bleef ze, ondanks mijn herhaalde
geruststelling; vrees voor een afkeuring of voor schoolblijven hing
steeds als een dreigende wolk boven haar armzalig leventje.
Zag ik b.v. een luie, speelsche jonge dame, die liever poppetjes
teekende, dan haar sommen af te maken en zei ik dan: „Hoor eens,
al wat je niet af krijgt, mag je na twaalven maken,” dan zag ik
dadelijk, dat Mientje 't zich aantrok. Twee roode vlekjes kwamen op
haar wangen, 't mondje prevelde gejaagd cijfers: „7 en 9, 7 en 9,
eerst doe ik bij de zeven drie....” En of ik dan al zei: „Tegen jou is 't
niet bedoeld, hoor Mientje; al heb jij geeneen som af, dan mag je
toch naar huis, want 'k weet dat jij je best wel doet,” toch was ze
maar half gerustgesteld.

Ja, ze verzuimde vaak, 't stakkertje. 't Begon al na een paar


weken. Daar hoorde ik Moeders bekenden stap in de gang, en daar
kwam ze al binnen, maar Mientje had ze niet bij zich. Ze putte zich
uit in verontschuldigingen, de juffrouw moest niet denken, dat zij 't
kind zonder reden zou thuis houden, ze wist heel goed, dat dat
tegenwoordig niet mocht van de wet, trouwens 't kind ging zelf veel
te graag naar de school. Maar vannacht had ze zóó gehoest en
vanmorgen keek ze zóó koortsig uit 'r oogjes, dat ze 't niet op dr
verantwoording dorst te nemen, haar met dat gure weer er door te
sturen.
Ik verzekerde haar, dat ik overtuigd was van haar goeden wil en
beloofde haar, dat ik m'n best zou doen, het dien dag zonder Mientje
te redden. Of ze wel vaker hoestte, informeerde ik. En daar kwam ze
los.
„Och juffrouw, als 'k u dat allemaal eens vertelde. 't Wurm het er
van dr geboorte af an geleje. Toen ze zeven maanden oud was, toen
het ze zoo de slijmhoest gehad, dat 'k kompleet dacht, dat ze dr in
stikken zou. De tanden zatte vast op dr borsie, ziet u.”
Ik knikte wijs.
„Nou, en na die tijd, sóó as ze in de tocht komt, het se 't weer te
pakken. De dokter weet 't ook al precies, 'k hoef me mond niet eens
open te doen; soo as die me siet, schrijft ie al soon recepsie voor
een drank, een beste drank, soon sterke rooie, u weet misschien
wel. En daar knapt se dan soetjes-an weer van op. 'k Ga dr soo
meteen maar weer eentje bij de dokter halen.”
Welcome to our website – the perfect destination for book lovers and
knowledge seekers. We believe that every book holds a new world,
offering opportunities for learning, discovery, and personal growth.
That’s why we are dedicated to bringing you a diverse collection of
books, ranging from classic literature and specialized publications to
self-development guides and children's books.

More than just a book-buying platform, we strive to be a bridge


connecting you with timeless cultural and intellectual values. With an
elegant, user-friendly interface and a smart search system, you can
quickly find the books that best suit your interests. Additionally,
our special promotions and home delivery services help you save time
and fully enjoy the joy of reading.

Join us on a journey of knowledge exploration, passion nurturing, and


personal growth every day!

ebookbell.com

You might also like