100% found this document useful (4 votes)
32 views

PDF Vertically Integrated Architectures: Versioned Data Models, Implicit Services, and Persistence-Aware Programming 1st Edition Jos Jong Download

Data

Uploaded by

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

PDF Vertically Integrated Architectures: Versioned Data Models, Implicit Services, and Persistence-Aware Programming 1st Edition Jos Jong Download

Data

Uploaded by

xuelibougui
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/ 62

Download the full version of the textbook now at textbookfull.

com

Vertically Integrated Architectures:


Versioned Data Models, Implicit Services, and
Persistence-Aware Programming 1st Edition Jos
Jong
https://textbookfull.com/product/vertically-
integrated-architectures-versioned-data-models-
implicit-services-and-persistence-aware-
programming-1st-edition-jos-jong/

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


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

Biota Grow 2C gather 2C cook Loucas

https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-loucas/

textbookfull.com

SQL & NoSQL Databases: Models, Languages, Consistency


Options and Architectures for Big Data Management 1st
Edition Andreas Meier
https://textbookfull.com/product/sql-nosql-databases-models-languages-
consistency-options-and-architectures-for-big-data-management-1st-
edition-andreas-meier/
textbookfull.com

Advanced R Statistical Programming and Data Models:


Analysis, Machine Learning, and Visualization 1st Edition
Matt Wiley
https://textbookfull.com/product/advanced-r-statistical-programming-
and-data-models-analysis-machine-learning-and-visualization-1st-
edition-matt-wiley/
textbookfull.com

The Weierstrass Elliptic Function and Applications in


Classical and Quantum Mechanics A Primer for Advanced
Undergraduates Georgios Pastras
https://textbookfull.com/product/the-weierstrass-elliptic-function-
and-applications-in-classical-and-quantum-mechanics-a-primer-for-
advanced-undergraduates-georgios-pastras/
textbookfull.com
Galois Theory of Algebraic Equations 2nd Edition Jean-
Pierre Tignol

https://textbookfull.com/product/galois-theory-of-algebraic-
equations-2nd-edition-jean-pierre-tignol/

textbookfull.com

Coercion and the Nature of Law First Edition Kenneth Einar


Himma

https://textbookfull.com/product/coercion-and-the-nature-of-law-first-
edition-kenneth-einar-himma/

textbookfull.com

The ACP Group and the EU Development Partnership Beyond


the North South Debate 1st Edition Annita Montoute

https://textbookfull.com/product/the-acp-group-and-the-eu-development-
partnership-beyond-the-north-south-debate-1st-edition-annita-montoute/

textbookfull.com

The Age of Fragmentation A History of Contemporary


Economic Thought 1st Edition Alessandro Roncaglia

https://textbookfull.com/product/the-age-of-fragmentation-a-history-
of-contemporary-economic-thought-1st-edition-alessandro-roncaglia/

textbookfull.com

Single-stranded RNA phages-From molecular biology to


nanotechnology 1st Edition Paul Pumpens (Author)

https://textbookfull.com/product/single-stranded-rna-phages-from-
molecular-biology-to-nanotechnology-1st-edition-paul-pumpens-author/

textbookfull.com
Chest Drains in Daily Clinical Practice 1st Edition Thomas
Kiefer (Eds.)

https://textbookfull.com/product/chest-drains-in-daily-clinical-
practice-1st-edition-thomas-kiefer-eds/

textbookfull.com
Vertically
Integrated
Architectures
Versioned Data Models,
Implicit Services, and
Persistence-Aware Programming

Jos Jong
Vertically Integrated
Architectures
Versioned Data Models,
Implicit Services, and
Persistence-Aware
Programming

Jos Jong
Vertically Integrated Architectures: Versioned Data Models, Implicit
Services, and Persistence-Aware Programming
Jos Jong
AMSTELVEEN, The Netherlands

ISBN-13 (pbk): 978-1-4842-4251-3 ISBN-13 (electronic): 978-1-4842-4252-0


https://doi.org/10.1007/978-1-4842-4252-0
Library of Congress Control Number: 2018966806
Copyright © 2019 by Jos Jong
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 author 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: Louise Corrigan
Development Editor: James Markham
Coordinating Editor: Nancy Chen
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York,
233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505,
e-mail orders-ny@springer-sbm.com, or visit www.springeronline.com. Apress Media, LLC is a
California LLC and the sole member (owner) is Springer Science+Business Media Finance Inc
(SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail rights@apress.com, or visit www.apress.com/
rights-permissions.
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/
9781484242513. For more detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
I dedicate this book to the worldwide software
engineering community.
Stay curious, keep innovating, and push our
profession forward.
Table of Contents
About the Author���������������������������������������������������������������������������������ix
Acknowledgments�������������������������������������������������������������������������������xi
Preface����������������������������������������������������������������������������������������������xiii

Chapter 1: The Problem������������������������������������������������������������������������1


Never-Ending Complexity��������������������������������������������������������������������������������������2
Data Models Everywhere��������������������������������������������������������������������������������������4
Growing Insecurity������������������������������������������������������������������������������������������������5
Architectural Fog���������������������������������������������������������������������������������������������������6
Language Wars�����������������������������������������������������������������������������������������������������8
Frameworks by the Dozen����������������������������������������������������������������������������������10
Summary������������������������������������������������������������������������������������������������������������11

Chapter 2: History: How Did We Get Here?�����������������������������������������15


How and Why JSON Conquered��������������������������������������������������������������������������16
How and Why We (Used to) Love Tables��������������������������������������������������������������19
How and Why We Reverted to 3GL����������������������������������������������������������������������23
Summary������������������������������������������������������������������������������������������������������������28

Chapter 3: Analysis: What’s Going Wrong?�����������������������������������������29


To DRY or Not to DRY�������������������������������������������������������������������������������������������30
Serving Business Logic���������������������������������������������������������������������������������������33
Tiers That Divide Us��������������������������������������������������������������������������������������������36
One Level Too Low����������������������������������������������������������������������������������������������40

v
Table of Contents

Limited by Frameworks��������������������������������������������������������������������������������������41
Human Factors����������������������������������������������������������������������������������������������������44
Summary������������������������������������������������������������������������������������������������������������46

Chapter 4: Five Dogmas That Hold Us Back����������������������������������������49


We Need Three Tiers�������������������������������������������������������������������������������������������50
Layers Are Good��������������������������������������������������������������������������������������������������53
Dependencies Are Bad����������������������������������������������������������������������������������������56
Monolithic Is Ugly������������������������������������������������������������������������������������������������60
4GL Is Dead���������������������������������������������������������������������������������������������������������62

Chapter 5: The Solution: Vertical Integration�������������������������������������67


A Vertically Integrated Architecture���������������������������������������������������������������������68
A Unified Conceptual Data Model������������������������������������������������������������������������73
Implicit Services�������������������������������������������������������������������������������������������������77
A Persistence-Aware Language��������������������������������������������������������������������������79
Challenges����������������������������������������������������������������������������������������������������������82
Summary������������������������������������������������������������������������������������������������������������85

Chapter 6: The Art of Querying�����������������������������������������������������������87


It’s All About Relationships����������������������������������������������������������������������������������89
Relationships or Properties?�������������������������������������������������������������������������������94
Property Chaining���������������������������������������������������������������������������������������������101
Filters����������������������������������������������������������������������������������������������������������������108
Summary����������������������������������������������������������������������������������������������������������111

Chapter 7: The IR Model�������������������������������������������������������������������113


Unifying Ownership�������������������������������������������������������������������������������������������114
The IR Model�����������������������������������������������������������������������������������������������������118
Archiving Instead of Deleting����������������������������������������������������������������������������127

vi
Table of Contents

Associations������������������������������������������������������������������������������������������������������131
Attributes����������������������������������������������������������������������������������������������������������135
Values vs. Items������������������������������������������������������������������������������������������������136
Putting It All Together����������������������������������������������������������������������������������������141
Inheritance?������������������������������������������������������������������������������������������������������146
Summary����������������������������������������������������������������������������������������������������������151

Chapter 8: Implicit Services�������������������������������������������������������������153


Perfect Granularity��������������������������������������������������������������������������������������������154
The Service Request�����������������������������������������������������������������������������������������156
Access Control��������������������������������������������������������������������������������������������������160
Update vs. Read Services���������������������������������������������������������������������������������161
Schema Evolution vs. Service Versioning���������������������������������������������������������162
Inverse Schema Mappings��������������������������������������������������������������������������������167
Mapping Exemptions����������������������������������������������������������������������������������������172
Summary����������������������������������������������������������������������������������������������������������173

Chapter 9: Persistence-Aware Programming�����������������������������������175


Introducing Functions���������������������������������������������������������������������������������������177
About Variables�������������������������������������������������������������������������������������������������182
Control Flow and Subcontexts��������������������������������������������������������������������������183
Procedures vs. Functions����������������������������������������������������������������������������������186
Making It Perform���������������������������������������������������������������������������������������������188
Beyond the von Neumann Model����������������������������������������������������������������������192
Exploiting Referential Transparency������������������������������������������������������������������194
The Importance of Intrinsics�����������������������������������������������������������������������������196
The Contribution of Set Orientation�������������������������������������������������������������������198
Source Code Reconsidered�������������������������������������������������������������������������������199

vii
Table of Contents

The Role of Internal Memory�����������������������������������������������������������������������������206


Summary����������������������������������������������������������������������������������������������������������209

Chapter 10: User Interface Integration���������������������������������������������211


Query Aggregation��������������������������������������������������������������������������������������������213
Handling Uncommitted Data�����������������������������������������������������������������������������220
Generic Query Tools������������������������������������������������������������������������������������������230
End-User Development�������������������������������������������������������������������������������������233
Summary����������������������������������������������������������������������������������������������������������236

Index�������������������������������������������������������������������������������������������������239

viii
About the Author
Jos Jong is a self-employed independent
senior software engineer and software
architect. He has been developing software
for more than 35 years, in both technical and
enterprise environments. His knowledge
ranges from mainframes, C++, and Smalltalk
to Python, Java, and Objective-C. He has
worked with numerous different platforms
and kept studying to learn about other
programming languages and concepts. In
addition to developing many generic components, some code generators,
and advanced data synchronization solutions, he has prototyped several
innovative database and programming language concepts. He is an abstract
thinker who loves to study the fundamentals of software engineering and is
always eager to reflect on new trends. You can find out more about Jos on
his blog (https://josjong.com/) or connect with him on LinkedIn
(www.linkedin.com/in/jos-jong/) and Twitter (@jos_jong_nl).

ix
Acknowledgments
There are many people who encouraged me to push forward with my ideas
and eventually write this book. I’d like to thank all of them for inspiring
me. Colleagues who were skeptical at the time helped me to rethink and
refine certain aspects of my vision. I want to thank them for the interesting
discussions. To the members of Know-IT, a group I have been a member
of for ten years, my special thanks for all the patience you have shown
me when I was suggesting better solutions again and again in whatever
discussions we were having. I want to thank the people who read my early
drafts: my good friends Marc, Rudolf, Edwin, Winfried, Peter-Paul, and
especially Remco for doing most of the initial translations and essentially
being the first full peer-reviewer. I also would like to thank Robbert, for all
the inspirational words and for setting deadlines. And special thanks to my
sister, Marian, my parents, my good friends Ger, Wilma, Nina, Sudais, and
others who supported me.

xi
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Preface
I guess most books start with lots of half-related notes and ideas. So far,
so good. But my first notes and drawings date back 30 years. During my
studies, I learned about real databases and how they magically hide a lot of
technical details from the programmer.
With SQL, I saw the beauty of a fully thought through conceptual data
model, brought to life by a neat and powerful query language. However,
I also remember asking myself whether tables are really such a good
choice to represent data. The relational model was obviously better than
anything else out there. But influenced by other methods I studied, such
as Sjir Nijssen’s natural language information analysis method (NIAM), I
imagined data more as a network of abstract objects (facts) joined together
by relationships. In SQL, you have to specify the actual relationships, based
on attributes, with every query, again and again. And because applications
are mostly not built using SQL, every query also requires its own glue code,
to fit inside the accompanying 3GL programming language. Why? These
early thought experiments eventually became the main premise of this
book.
Why doesn’t the user interface understand the underlying data model,
so that a lot of things can be arranged automatically? Why do we program
in two, three, or four languages to build a single application? And why do
we manually have to pass around strings with pieces of keys and data, as
we do with JSON nowadays?
My inspiration to resolve these dilemmas over and over is born of
frustration, experimentation, study, and lots of discussions within my peer
group. I never was a computer scientist and, as practical as I like to be,
loved working on concrete projects. But I used every slightly more generic

xiii
Preface

challenge in any project to think and experiment with potential solutions.


It always helped me to go beyond merely passing around records
between screens, for example, with generic data reporting solutions,
code generation, when useful, and fancy synchronization solutions. I
also started studying scientific papers on related subjects. All this comes
together in this book.
In an attempt to convince people that two-tier architectures and
the ideas behind 4GL/RAD-languages deserve a second chance, I start
with a thorough analysis of where we stand. Although I agree that most
contemporary architectural principles were born out of necessity, I will
explain how they eventually led to mostly disconnected tiers that we have
to cobble together repeatedly. True, this gives us a lot of flexibility, but it
forces us to write a lot of code that could be deduced from the system’s
data model. It also results in a lot of code duplication across layers and
tiers. I believe that at least 70%–80% of what we write does not concern the
business logic the application is about.
At the same time, I recognize the problems with 4GL and RAD that
made them fail. And although it helps that platforms such as OutSystems
and Mendix reintroduced the 4GL approach under the name low-code,
I still see problems. Code generation cannot optimize for every real-life
scenario, merging lots of existing techniques sounds compatible but is very
constraining at the same time, and the versioning of external interfaces is
still troublesome, as in the nineties.
What we must pursue are fundamental new concepts that are general-­
purpose and flexible at the same time, not just trying to mimic what we
currently do manually. I would like to preach going back to the drawing
board, getting rid of the anxiety to create a totally new programming
language, build an actual compiler, and escape today’s dogmas.
I’m convinced that the second half of my book introduces, or at least
seeds, solutions to escape the current dilemmas. With a single unified
conceptual data model, we can build what I call implicit services and a
persistence-aware programming language to express only pure business

xiv
Preface

logic. I show that what has made two-tier architectures inflexible and not-­
general purpose so far is the lack of support for data model versioning and
a more conceptual approach to data modeling.
I hope my book will inspire experienced developers to explore these
ideas. I believe that the challenges will be an interesting pursuit for
computer science students. Software development is still in its infancy.
I hope that my contribution will steer us away from the endless stream of
frameworks that we see today. Trying to solve each individual problem
with a separate framework mostly brought us more complexity and
certainly did not increase developer productivity for the last decade or so.
Most of my ideas take the form of what-if proposals. That is not
because I haven’t experimented with some of them. For example, I built
a prototype to explore the persistence aware programming language that
I present. It impressed some people, but, for now, it is not a real product.
But who knows what the future will bring.

xv
CHAPTER 1

The Problem
Problems are not stop signs, they are guidelines.
—Robert H. Schuller

Like being in a swamp. That is how it must feel if you end up in a software
development team, after switching from another profession. Just when
you think you have a firm grasp of things, someone comes along with yet
another new concept, principle, or framework. You just want to finish
that one screen you’re working on. But there are larger stakes. And, to be
honest, after listening to all the arguments, you’re on the verge of being
convinced. Another framework gets added to the project.
The accumulation of frameworks year after year must pay off.
You would expect things to have gotten super easy. And yet, every time
a new team member is added, it becomes apparent that the team has
created its own little universe. The new guy or gal has to absorb all the
frameworks he or she is not familiar with and learn a whole new set of
architectural principles.
I am not talking here about commonsense principles every self-­
respecting software engineer is expected to know. The problem lies in the
never-ending avalanche of new ideas and experiments that manifest in the
form of still more new architectural principles and frameworks.

© Jos Jong 2019 1


J. Jong, Vertically Integrated Architectures,
https://doi.org/10.1007/978-1-4842-4252-0_1
Chapter 1 The Problem

As well-intended as they may be, it is impossible to master them all.


Every new person on the team has to be brought up to speed before being
able to contribute. Even the developers present when the architecture or
framework was introduced will have had lengthy discussions as to how,
what, and why of the most recent implementation. It may have been
looking very promising in PowerPoint, but reality can be tough. Once the
hatchet is buried, two factions remain. One has poured so much energy in
the defense of all the principles, it cannot let go. That faction will continue
to preach that if you apply them properly, the gains are huge. The other
faction is glad the discussion is over. It gets back to work, to get things done,
partly exercising architecture in name only.
Maybe we shouldn’t make such a fuss about this. The information and
communications (ICT) industry is in its infancy. Although we have been
developing software for several decades now, there is still so much room
for improvement that we should actually praise people for trying new
things. But this comes with pitfalls. Many initiatives could be categorized
as old wine in new bottles. We don’t need yet another implementation
of an existing concept. We need better concepts that last longer than
the typical three-to-five-year life expectancy of many frameworks and
architectural principles. We need a more fundamental approach.

Never-Ending Complexity
Developing software is a complex endeavor. While one would have
expected it to have gotten easier over time, the exact opposite seems true.
Back in the day, one could build a whole system using Turbo Pascal, C#,
Java, and some SQL. But today, before you know it, you’re once again
Googling the latest features of HTML, to see which browser does or does
not support them. Your CSS files are getting out of hand, so you start
generating them with Sass. And while you were using Angular previously,
you’re thinking about switching to React. Your CV is growing and growing.

2
Chapter 1 The Problem

One of your team members has a lot of experience with Node.js. He


makes sure to mention this every lunchtime. The idea emerges to build
that one new service with Node.js instead of with Java: “That’s one of
the benefits of microservices: to choose the best-fitting implementation
for each service.” We read about how efficient Node.js can be in
asynchronously accessing multiple external services. Naturally, some team
members, after ten years of doing Java projects, are up for something new.
They get excited!
The Java faction has not been resting on its laurels either. It left behind
a past with J2EE, Entity Beans, JSP, Hibernate, JSF, and numerous other
frameworks and concepts. But after first adopting several flavors of Spring,
the itch starts again. Someone on your team suggests implementing
certain logic using the Actor model. The proof of concept was successful.
The developers’ screens now show information about the Actor framework
more and more often. Challenge accepted.
The polyglotting school of thought embraces the idea of mastering
multiple programming languages. And, of course, it makes sense to take a
look at another programming language every now and then. You can learn
about different programming styles. And that generally makes you a better
programmer. The question, however, arises: What to do in five or ten years,
when systems built with multiple languages have to be maintained? Sure,
if you’re cynical, this can be viewed as a guarantee of job security, but it
can really burden the customer with additional costs and frustrations.
It is already difficult to find an experienced programmer, let alone a
full stack developer with knowledge of exactly the languages, concepts,
and frameworks utilized in a particular project. Naturally, part of the
increased complexity results from the fact that we expect more from the
applications we build. User interfaces today are much more advanced than
the character-based screens of yesteryear. We access data from multiple
sources, and we may have to serve millions of concurrent users. Despite all
this, most of the complexity we encounter can be attributed to an industry
that’s rapidly evolving.

3
Chapter 1 The Problem

Let’s conclude that it is nobody’s fault. We are all involved in a quest to


simplify software development, and we certainly don’t want to go back to
the old days. But the smorgasbord of concepts and techniques fragments
the industry. The Internet has enabled the exchange of knowledge but
also led to an ocean of new ideas, both good and bad. Instead of getting
simpler, building an application is getting more complex.

Data Models Everywhere


One of the creeds of software engineering is DRY—don’t repeat yourself.
However, if you take a look at the source code of any randomly selected
system, you will see repetition happening everywhere, within layers
and across layers and tiers. A huge proportion of the code we write is
essentially just retrieving, converting, and returning the exact same data
items, albeit in different contexts and in a variety of formats. Why are we
writing all that code?
At its core, virtually all software consists of storing, processing, and
displaying information. The structure of that information can be described
as entities, attributes, and relationships. Every item in such a model will be
reflected in the software you develop—in the names and types of columns
of a table; in the names of classes, getters, and setters in the data types
that those receive and return; in the JSON structures that are exchanged
with the client or other systems; and I could go on. In the UI client itself,
the data model will probably be reflected in HTML elements, JavaScript
structures, source code, and even partly in CSS styles. All this results in the
definition of a given entity, attribute, or relationship being expressed in,
let’s say, five to ten places, if not more.
This means that for every entity, attribute, or relationship added to
the system, we have to write multiple pieces of code in different layers,
probably even in different programming languages. The actual amount
may depend on the development environment at hand. However, it is

4
Chapter 1 The Problem

and remains manual labor. Adding an attribute might not be such a big
deal, but with adding entities and relationships, there is typically more
complexity involved.
The fact that a data model manifests itself in so many ways also leads
to the duplication of code taking care of validations and constraints. Users
prefer to have immediate feedback from the user interface when data
entered does not fit certain constraints. But to be sure to never store invalid
data, you want the same check to be repeated in the service layer as well.
And maybe you would even have the database check it again. Now imagine
we develop multiple UI clients (web, mobile), and we end up with three to
five places in which we do the exact same validations for which we write,
and maintain, specific pieces of code.
It is fair to say that while we mastered the art of code reuse in most
programming languages, there is still one aspect that leads to a lot of code
repetition, and that is the data model itself.

G
 rowing Insecurity
With half the planet now sharing its personal and business information
via online services, you would expect software security to be rock solid.
Instead, the number of data breaches has been on the rise for years (1,579
reported cases and 178 million accounts exposed in 2017 in the United
States alone).1
How can it be that an industry with so much money and prestige at
stake make and accept so many blunders? Undeniably, one reason is the
aforementioned ever-increasing complexity. No matter how easy it can be
to avoid a particular security threat, risks lurk at every level. Any nontrivial

1
 tatista, “Annual number of data breaches and exposed records in the United
S
States from 2005 to 2018 (in millions),” www.statista.com/statistics/273550/
data-breaches-recorded-in-the-united-states-by-number-of-breaches-
and-records-exposed/, 2018.

5
Chapter 1 The Problem

service is made up of several software components: load balancers,


hypervisors, virtual machines, operating systems, containers, application
servers, databases, frameworks, let alone its own code. It requires a lot of
joint effort from knowledgeable people to keep secure every corner of such
a software stack. A problem can arise from something as little as a bug in
the application’s source code. But a suboptimal configuration of any of the
involved components or not updating certain parts of the software stack
can also result in a huge security scandal.
Specific security risks exist in the realm of authentication and
authorization. While there are numerous standard solutions for these
mechanisms, many are still, at least partly, coded by hand, sometimes just
to avoid dependence on a third party, but also because the integration
with a standard solution may be more difficult to do. As a consequence,
the average programmer is often involved in low-level security, to a point
where it becomes notoriously unsafe.
Finally, there is the risk of URL vulnerabilities. A URL can reveal a lot about
the structure of a system. It often happens that people modify a URL and
gain access to data they are not authorized to. Once again, this problem
exists because programmers have to identify and cater to these risks
themselves.
There is obviously no excuse for being lazy about software security.
But with the current state of ICT, it is as if we are trying to keep the general
public out of private rooms in an office building that is a labyrinth of floors
and little rooms with doors and windows everywhere, while we attempt to
construct some of the key locks ourselves.

Architectural Fog
Software architecture can be both the solution and the cause of problems.
As mentioned, no matter how good the intentions of architects, they
may cast a team into a fog-laden land, and fairly often, the benefits they
promise are never realized.

6
Chapter 1 The Problem

Architecture is about having a blueprint, in the form of guidelines,


for how to construct a system. Building software is a relatively new
phenomenon. Especially because of the continuous influx of new ideas, it
is good to agree on a number of principles. First is to achieve consistency,
in the sense of avoiding every programmer doing things in his/her own
way, but also to gain advantages, in terms of scalability, performance, and
future proofing. Sadly, there are many ways in which this can get derailed.
The preferences of the particular architect play a part. If such a person
is close to the software development process, is experienced, is able to
maintain a good overview, and is able to translate this to a blueprint for
the team, there is potential for a solid foundation. Not every architect,
however, is that skilled, let alone capable of conveying a vision to the team.
Plenty of things can go wrong in this regard.
I’ve already discussed the fact that we are bombarded by so many
different architectural visions and that some architectures can fuel a
lot of debate. Take the idea of microservices, for example. Everybody
understands the wisdom of partitioning a bigger system into subsystems,
either because there are multiple owners or stakeholders or simply because
the whole is too large to be managed by a single team. But microservices
take this idea one step further, resulting in an ongoing debate on how
small, tiny, or microscopic a microservice should or must be.
Combining different architectural concepts can be another challenge.
Ideas may work in isolation, but having them work together in a
meaningful way might introduce some dilemmas. Or what if they don’t fit
a particular environment very well. Perhaps the concept is very useful for a
certain industry but way too excessive for your current project.
One could see architecture as an unsolidified framework, especially
in light of the fact that we have so much freedom with the current third-
generation programming languages (3GL), this creates a need for blueprints.
The more a language and its accompanying frameworks steer you in a
particular direction, the less need there is for an architectural story.

7
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Chapter 1 The Problem

The freedom to choose a different architecture for each project is cool


and exiting. However, when it comes to quickly building robust and secure
systems, it’s rather sad that every team has to reinvent the wheel.

Language Wars
Software exists by virtue of programming languages. So, you would expect
them to improve every year, to help us out with all the issues mentioned
so far in this chapter. The general perception is that they do. But do they?
It is also commonly accepted that frameworks can be used to extend a
programming language. But is that really true?
Virtually all software is built with 3GLs today. And these languages
did indeed evolve. Object orientation, garbage collection, and exception
handling became a standard feature for many languages. And such things
as closures, coroutines, and functional extensions are getting more and
more popular. However, object orientation was invented with Simula and
Smalltalk in the sixties and seventies. The same is true for closures and
functional programming. And coroutines have been at the core of Erlang
since the eighties. So, what we mostly see is cherry-picking from other
programming languages, both old and contemporary. In that sense, the my-
language-is-better-than-yours approach is mostly about syntactic sugaring.
There is nothing wrong with that. But what about our more fundamental needs?
While almost no software system can do without storing data and
network communications, 3GLs are only concerned with in-memory data
handling and processing. That’s why we still deal with data persistency as
a second-class citizen. The same is true for client-server communication.
This is where code plumbing comes in. A lot of source code deals with
the marshaling and unmarshaling of messages, filling and extracting
screen data, or assembling and processing database queries. Recall that
fourth-generation languages (4GL) in the nineties delivered in this area.
There may be good reasons why we have stuck to 3GLs since then. It is still
interesting, nonetheless, to see what we can learn from that era.

8
Chapter 1 The Problem

You may think that a smart 3GL-based framework can be as good as a


language with integrated persistency and data communication. And, yes,
frameworks can soften the sharp edges, in this respect, but they will never
fundamentally solve all the related challenges.
Frameworks have been used forever, to simplify the interaction with
the database or to invoke remote services. From Entity Beans to Hibernate,
and from EJB to SOAP, all have been implemented using frameworks,
either by using runtime reflection or code generation, each with their own
range of problems and added complexity. Deeper integration to solve
these issues can never be achieved, because one simply cannot augment a
language at the level.
This is because frameworks play a particular role within a
programming language. The language itself offers the programmer a
host of abstractions and features that, in theory, allow the development
of every conceivable construct. A framework, on the other hand,
is basically just a collection of data structures and accompanying
functions. This makes it impossible to add a truly new abstraction to a
language by utilizing a framework.
Consider memory management. To add garbage collection to a
language, one has to gain control over every creation of an object and,
possibly, every reference to an object. In most languages (C++ could be
regarded an exception here), this is utterly impossible to achieve.
Another example is the concept of coroutines. Think of coroutines
as mini-processes, in that they are suspended when waiting for blocking
I/O, while giving other coroutines the chance to continue their execution.
The implementation of coroutines is typically based on the concept of
segmented stacks, which can be enlarged on demand. How software deals
with a stack is so intrinsically linked to the compiler and accompanying
runtime that such an abstraction cannot really be implemented with a
framework.

9
Chapter 1 The Problem

So, adding frameworks cannot compensate for a language lacking


certain features. Some features just require a more fundamental and
integrated approach.
This is certainly true for data persistency and data communication.
As long as we keep trying to use frameworks to implement these aspects,
we will never be able to write source code in terms of persistent or remote
data. A programming language not being aware of what is really happening
in this sense is like having a constant impedance mismatch between the
intentions of the programmer and the programming language, with code
plumbing and suboptimal execution as a result.
So, yes, languages did evolve. Take garbage collection. That has proven
to be a great success. It prevents memory leaks and simplifies our code
dramatically. We also see functional programming features that made their
way to 3GL, for example, making it easier to write compact expressions to
handle collections. But while being the main features of any application,
persistency and network communication have remained the neglected
stepchildren and are the main cause of large amounts of plumbing
recurring in every software project.

Frameworks by the Dozen


Frameworks can keep us from reinventing the wheel, but, as mentioned,
the market is flooded with them. Their quality varies greatly, and because
the framework du jour is replaced by something better the following year,
we could be creating legacy code every day.
Now and then, this demands a responsible response to the following
questions by every software developer and architect: Do I stay with the
old? Do I use that hot new framework everybody is raving about? Or will
I ever be a frontrunner, by pouring my heart and soul into something
completely new?

10
Chapter 1 The Problem

One factor in this balancing act is the perceived quality of these pieces
of art. It is a plus when a framework is widely used. This makes it stand
up under scrutiny. But even then, the question remains whether it is
maintained well enough, and how much priority is given to fixing bugs. It
is a good thing for something to be open source, but it is still tough to tell
your client that a given bug is caused by a framework, and you either have
to dive into the dark secrets of that framework or wait for others to fix it.
Besides this, popularity and quality are not constant over time. Perhaps
the initiators have already moved on to the next great idea. They take a few
shortcuts, and along the way the quality of the product begins to suffer, all
while there is a huge lock-in for your own project.
A framework may also constrain you. Not every framework plays well
with other frameworks. That means the choice of a framework cannot be
viewed independently of that of others. Sometimes frameworks overlap;
sometimes they interfere; and sometimes they force you into using other
frameworks.
As mentioned at the beginning of this chapter, frameworks may be
intended to simplify things, but they can just as easily increase overall
complexity. While it is nice to have these extensive lists on our résumés, if
we’re not careful, we are creating legacy code every single day. It requires
a lot of experience and a pragmatic approach to not bog down a project in
unnecessary complexity. The big question that we should ask ourselves is
why do we need so many frameworks anyway?

Summary
In this chapter, I have discussed the following:

• The ICT landscape is very immature and is, therefore,


constantly on the move.

• Software development, in a way, is getting more


complex rather than simpler.

11
Chapter 1 The Problem

• There is a lot of code repetition, owing to the data


model having to be represented in different ways in
multiple layers and tiers.

• Software security can partly be blamed by the


complexity of the platforms we use and the low-
level code we sometimes have to write with regard to
authorization and authentication.

• Although the whole point of software architecture is to


provide a steady foundation, new architectural ideas
come along every year.

• 3GLs do not cater to two of the most essential aspects


of any software system: data persistency and data
communication. To use frameworks to compensate for
that is a suboptimal solution.

• To help us out with some of these issues, we use a lot of


frameworks. But that creates new problems and legacy
every day.

After this pile-up of misery, some people may wonder why anyone
would still want to become a programmer. But that’s not how it works with
professionals. Developing software is an inherently complex profession
that requires a certain drive to get ahead. That we have to write more code
than what would strictly be necessary is not the end of the world. And the
fact that the complexity of the trade continues to increase is perhaps even
a bonus for all those professionals who by their nature always want to learn
new things and thrive on challenges.
However, something lurks beneath the surface. The vast amount of
copycat code that we write again and again undoubtedly takes time. And
time equals money. It makes projects take longer. More code also increases
the risk of introducing bugs, which raises the demand for testing and

12
Random documents with unrelated
content Scribd suggests to you:
"Try again," said the Lieutenant, and unslung the rifle. "Fire on the
downward roll."

The gunlayer fired on the downward and then on the upward roll, and
each time the shell went sobbing away into the Channel haze, and the dark,
smooth object still bobbed in the fast-fading light amid the waves. The
Lieutenant kicked aside his seventeenth empty brass cylinder and snapped
the rifle bolt angrily. "There's the smoke of the convoy," he shouted to his
second in command, who was firing from aft and swearing in a monotonous
undertone that sounded like a litany. "It's right in their track." For the
ensuing half-hour they kept up the fruitless fusillade until dusk blotted out
the target.

The R.N.V.R. Lieutenant rang down for half-speed. "Secure the gun," he
said, curtly, and to the Coxswain: "Close the blighter; we've got to make a
rope's end fast and tow it inshore out of the fairway." The Coxswain gave
his Commanding Officer a searching, incredulous glance, as if he doubted
his sanity, and spun the wheel round, but the Lieutenant was lurching aft on
his way to the cabin hatch. He paused en route and thrust a head and
shoulders into the engine-room. "Bring a can of lubricating oil aft an' a
handful of waste," he shouted to the unseen occupant, and dived into his
cabin.

Under direction of the First Lieutenant, a grass line was uncoiled and
one end made fast to a cleat; there was no time to be lost, for the dusk was
falling fast and the convoy with its attendant escorts was a bare five miles
away. The motor-launch circled round the floating mine, visible only by
reason of the intermittent whiteness of the broken water about it. The Sub-
Lieutenant stared at it half-fascinated, the coils of the line in his hands. For
a moment he felt an angry resentment against the minesweepers; this,
assuredly, was their business. Then he remembered that they had garnered
their grim harvest and returned to port. The motor-launch was only a
gleaner.

"Now then!" He turned to see his Captain at his elbow, stark naked as
the moment he was born, glistening with oil like a wrestler of old. "Give us
the rope's end. Drop down to leeward when I shout—an' stand by with a hot
grog."
The speaker knotted the rope loosely over one muscular shoulder and
measured the distance to the mine with a dispassionate eye. "If I bungle it
and foul one of the horns," he said, "it'll blow the boat to smithereens. You'd
better stand by with life-belts for yourselves."

"What about you?" asked the Sub. His Captain gave a little grim laugh.
"If that egg breaks, there won't be much of me to put a belt round," and
without further ado he slid over the stern into the water.

The crew of the launch watched the receding head and shoulders as
their Commanding Officer was carried to leeward on the crest of a wave,
and the Sub-Lieutenant, paying out loose coils of rope into the dark water,
murmured: "That's a man for you! They had a glimpse of white gleaming
body, as the swimmer circled cautiously round the floating mine and the
waves lifted or dropped him into their hollows. Then for a moment he
vanished and the watching group aft held their breath.

"If he grabs for the ring bolt and catches hold of a horn——" said the
Coxswain, and left the sentence unfinished. The seconds passed. Then out
of the darkness came a thin hail. The Coxswain jumped to the wheel; the
second in command flung the slack line over the stern, and the launch
dropped down to leeward.

The numb, exhausted figure hauled over the side a minute later, to be
wrapped in blankets and massaged back to speech, resumed his clothes and
clumped forward to the wheel-house as the launch turned inshore with the
mine in tow.

He stared into the darkness astern as the line tautened. "God knows if
there are any more farther up the coast... But our beat's clear. Full speed,
Coxswain!"
2

THE MILLIONTH CHANCE

Three hundred feet above mother earth sat an able seaman of the Royal
Navy, reflecting on the strangeness of his profession. For the first eighteen
months of the War he had been a loading number of one of a Battleship's
six-inch guns; as such he spent most of his waking hours punching a
dummy projectile into the breech of a "loader," or, when not at meals or
asleep, following critically the fortunes of cinema artistes as portrayed on
the Grand Fleet films. There came a day after that when the vagaries of
fortune transplanted him to a Dover Monitor, where he grew accustomed to
the roar of fifteen-inch shells from the Belgian coast batteries passing
overhead, or pitching short of his floating home in a thunderous upheaval of
white water. Finally he returned to his depot suffering from gun-deafness, to
find himself in due course one of a working party attached to a high-power
Naval Wireless Station, and still a little hard of hearing.

No one had consulted him as to his personal inclinations in the matter of


these changes; indeed, he never asked himself if it was merely blind chance
that ruled his comings and goings, or Fate, far-seeing, omniscient, working
to an appointed end. Destiny, as he knew it, always appeared in the guise of
a ship's corporal with a Muster List and a stump of pencil. He paid his
debts, tucked his "papers" into the lining of his cap, shouldered his bag and
hammock, and passed without concern to such future as awaited him.

Whatever the effect of heavy gunfire on his hearing, his nervous system
remained unimpaired; so much so that, as he sat swaying in a "boatswain's
stool," three-quarters of the way up one of the four hundred and thirty feet
wireless masts, slapping creosote on to the wooden lattice work with a
brush, he hummed a little tune to himself:

"Laugh while you may,


There's still to-day—
You may be dead ter-morrer!"
He crooned contentedly, and desisted from his labours to survey, like
Moses of old, the landscape o'er.

Below him, seen through a thin veil of shifting mist, stretched smooth
grey downs and a network of roads. Directly beneath, tiny figures moved
among the buildings of the wireless station; on the slope of a far hillside
rows of conical tents showed white in a passing gleam of sunshine.
Something moving along one of the roads held his interest for a moment
and the song came to an end; a field-gun battery going out to exercise;
horses the size of mice. He wondered what it must be like to be an airman
and pepper an enemy battery with a machine-gun. Wouldn't they scatter!
Horses all mixed up with the traces, plunging. Pap! pap! pap! would go the
machine-gun with the goggled face behind it, laughing triumphant... Fine, it
'ud be.

He bent his head back and stared up into the low-lying clouds that
seemed to hover just overhead. Was it because he had been thinking of
aeroplanes, or did he really hear the hum of an engine coming down out of
the mist? The slender lattice-work above him rose towering for another
hundred feet, taking the eye criss-cross along its diminishing perspective
until it made you giddy. The sailor knotted his brows and cursed his
deafness as he strained to listen. Surely it was an aeroplane. He could feel
the vibration of its engine rather than hear it. Or was it the wind droning in
the taut wire stays that spread earthward on every side.

Then, swift as a falling stone, flashing dark through the mist, he saw the
machine, apparently coming straight for him.

"Look out!" he shouted, and as he spoke the whirring thing crashed


fairly into the mast fifty feet above him with a splintering concussion that
shook the framework like a whip. The bluejacket ducked his head as a
shower of fragments descended, and sat waiting for the thing to fall.
Nothing happened. The last piece of shattered propeller dropped clattering
down the lattice for a little distance, rebounded and vanished into space.
Only the humming of the wind broke a silence that had somehow become
dreadful; dreading he knew not what, the man looked up.
There was the plane, with her nose jammed securely between the bars of
the crossed lattice, embedded as far as the wings. The fuselage stuck out
into the air at right angles to the mast like a dragonfly that had flown
blindly against a sticky window... The sight was extraordinary.

The A.B. craned his head downwards. The small figures on the earth
were running to and fro like ants. But where was the pilot? He peered up at
the motionless wreck and shouted. No reply came. Odd! He'd better go and
see about the pilot, who evidently hadn't seen the mast in the fog, and, by
the millionth chance, hit it.

Taking with him the rope that secured the boatswain's-stool he


commenced to climb. P'raps the bloke was stunned—dead, more likely.
Anyhow, he couldn't leave him there in his seat with the likelihood of the
machine breaking off from its nose and falling to the earth any moment.
Just as well he'd been there at the moment when it happened; that was
chance, too, in a way... Rum turn, altogether.

Foot by foot, from cross-bar to girder and girder to cross-bar he


climbed, and finally reached the point of impact. The lattice was smashed to
matchwood here, and the mast swayed dizzily above the damaged place.
Another pull and a heave enabled the rescuer to look down on the
unconscious figure who had been the puppet of so incredible a whim of
fate. He lay face upwards across one of the wings where he had been flung
by the force of the collision. His arms were outstretched, and both legs,
from his knees down, hung over the edge of the wing into three hundred
and fifty feet of space. The machine had but to sag a couple of feet, or the
unconscious figure stir ever so little....

The able seaman took a deep breath. Far below him—perhaps half an
hour's climb—men with ropes were toiling upwards to the rescue. Overhead
the damaged mast shivered and creaked in the wind; a yard away on the
curved surface of the wing lay the pilot, spread-eagled and motionless.
"That ain't no place for you!" said the bluejacket. He knotted the rope round
his body, made the other end fast to the mast, and gingerly tested the frail
platform. Would it stand the weight of both?
Inch by inch he crawled out along the wing, stretched forth a hand, and
grabbed the pilot's gauntleted wrist. Then unfastening the rope from his
own body he tied it round the insensible figure, and slowly, breathlessly,
with many a pause and muttered oath at the tumultuous thumping of his
heart—which seemed as if it must bring down the mast—he drew the body
off the wing and regained the mast. Sitting in the V-shaped angle of the
cross-girders he lashed the boy's shoulders securely to the nearest upright,
and with the limp legs across his lap, produced and with difficulty lit the
stump of a clay pipe. His hand shook and the perspiration trickled cold
behind his ears; but presently his lips parted, and in a not too certain voice
he began again his interrupted song:

"Laugh while you may,


There's still to-day—
You may be dead ter-morrer!"

CHINKS

"The Hohangho," read the First Lieutenant, turning the pages of a three-
day-old paper, "has shifted its course. It is estimated that upwards of three-
quarters of a million souls perished in the inundation of villages." He puffed
at his pipe and eyed the inmates of the Destroyer's Wardroom with
solemnity. "They give it a four-line paragraph.... Three-quarters of a million
——"

"Shortage of paper," said the Lieutenant in Command. "'Sides, they


were only Chinks. What's a million Chinese more or less? Don't suppose
anybody worried about it. When I was on the China Station——"
"But," interrupted the First Lieutenant, "when you come to think of it,
that's about half the total British casualties so far in the War. Wiped out—
phut! In one act! Men, women, and children!

"You don't think of 'em quite like that," replied the Captain of the
Destroyer, stirring his cup of coffee. He braced his back against a stanchion
to steady himself to the roll of the ship. "There are four hundred millions of
the blighters, remember. They all look alike; they've no religion, no
ambition, no aim in life except to scratch together enough for the next meal
——"

A Signalman came tumbling down the ladder, water streaming from his
oilskins.

"Please, sir, Officer of the Watch says there's a glare ahead looks like a
ship a-fire. Shall he increase speed?"

The Captain, who had descended for a cup of coffee, and still wore his
sea-boots and duffle coat, snatched up his cap and was on the bridge with
his glasses to his eyes in fewer seconds than it takes to write these lines.

The Destroyer was slashing her way past a head sea and the sound of
the wind and waves made speech difficult. The Gunner was on watch,
peering ahead into the darkness through binoculars.

"Oil ship, sir, by the looks of it," he shouted.

The Captain studied the far-off glare in silence for a moment, and gave
an order to the telegraph-man.

"Yes," he said presently. "Oil ship. Must have been torpedoed. She's
leaving a trail of blazing oil on the water astern of her." For half an hour
they watched the conflagration grow brighter as the Destroyer rapidly
overhauled the burning derelict. Finally the Gunner ranged alongside his
Commanding Officer. "She's making way through the water, sir—yawing
too. Best give her a wide berth."
The Lieutenant nodded. "Keep to windward. There can't be anybody
below. I expect the heat of the fire is keeping the steam pressure up.... My
ghost! What a blaze!"

The ship was now plainly discernible, blazing furiously from forecastle
to poop. The wind whipped pennons of flame hundreds of feet to leeward,
and from started rivets and gaping seams streams of liquid fire poured
blazing into the sea. The ship was blundering along at a good seven knots,
swerving blindly from side to side like a wounded bull, and leaving on the
troubled surface of the water a fiery, serpentine trail of burning oil. The
hissing crackle of the flames and roar of the wind, the constant eruption of
vast columns of sparks that belched hundreds of feet into the air and floated
to leeward, made the doomed ship a terrifying and almost demoniac
spectacle.

"Can't be a soul alive on board," said the First Lieutenant. "Just as well
—ugly customer to tackle."

They ranged abeam, giving the blazing derelict a wide berth, and even
at that distance felt their cheeks scorch. Men lined the Destroyer's lee rail,
watching in shocked silence. To the seaman the fairest of all sights is a ship
upon the sea; a ship wrecked upon a lee shore or even plunging beneath the
surface with racing propellers is a sad, though not unnatural sight,
prompting the heart of every sailor to the rescue, whatever the risk. But a
ship on fire, even though abandoned, is repellent, horrible beyond the
power of description.

The Gunner suddenly emitted an oath and extended an arm and pointing
forefinger:

"Look, sir! Fore-peak! There's some men there!"

The Captain stared through his binoculars.

"Yes," he said calmly; "you're right. They'll be grilled alive if her head
falls away from the wind. Starboard ten, Quartermaster."
Obedient to her helm, the Destroyer closed that blinding hell-glare, and
presently to the naked eye a score of human figures were visible, huddled
into the eyes of the ship. The Lieutenant on the Destroyer's bridge picked
up a megaphone and bawled through it.

"Why don't they jump, the damned fools?" he demanded angrily. "They
must have seen us. They know we'll pick them up." The Destroyer came
closer, plunging and rolling in the seaway. The figures on the bridge
shielded their faces from the scorching heat as every eye watched the
hungry flames licking their way forward along the oiler's forecastle. Her
foremast fell with a crash, sending up a great column of fire into the
outraged sky. By its glare the faces of the huddled figures were plainly
visible: beardless, with high cheek-bones, distorted with terror like the
masks of trapped animals.

"God!" ejaculated the First Lieutenant. "Chinks! They're all Chinese!


No wonder they wouldn't jump! Can't swim!"

The Captain thrust him towards the ladder. "Stand by with fenders the
port side. Get the hand-pumps going. I'll run her alongside."

"Gawd 'elp us!" muttered the Gunner, and as he spoke the burning ship
yawed suddenly and came bearing down on them.

From first to last it was less than five minutes' work. With paint
blistered and scorched clothing, rails and davits bent, with cold fear in their
hearts and a sense of duty that mastered all, that prodigy of seamanship was
accomplished. Twenty-four jabbering Chinese firemen and a dazed Scotch
mate flopped down pell-mell on to the Destroyer's upper deck, and received
the gift of life at the hands of a young man in a singed duffle coat, who said
nothing, whose breath came and went rather fast through dilated nostrils.

"Twenty-five," reported the First Lieutenant when he had mustered the


rescued and the Destroyer was racing landward, "and twenty-four of 'em
Chinks. You risked your ship for a couple of dozen yellow-bellies!"

"Maybe I did," replied his Captain. Dawn was paling the Eastern sky,
and he loosened the duffle coat about his throat. "Maybe I did. I ain't the
Hohangho."

A FORTY-FOOT SETTING

The tramp that had done the damage lay rolling lazily in the long,
smooth swell, blowing off steam. Her escort of two Destroyers—or more
properly a Destroyer and a half—was some distance away, exchanging a
highly-seasoned and technical dialogue through megaphones. In the course
of an unpremeditated zigzag a quarter of an hour earlier the tramp had
rammed one of her escort and cut her in two.

The combination of misunderstandings which culminated in this mishap


was at the moment in process of review on the bridge of the tramp. Her
master, who was a Portuguese, and the mate, who hailed from Pernambuco,
in the apportioning of blame were for once in agreement; the Chinese
Quartermaster called, weeping, upon his ancestors' gods to witness they
lied. Each spake his own tongue, and the babel of their strife mingled with
the thin hiss of escaping steam, to be engulfed by the vast blue loneliness of
the sky.

The Captain of the rammed Destroyer (his age was twenty-five and his
vocabulary one Methuselah need not have been ashamed of) transferred his
ship's company to the other escort and made a cursory survey of the
damage.

The bulkhead forward of the gaping cavity was holding—precariously,


it is true, but still holding. Therefore the fore part of the crippled Destroyer
continued to float; the after portion, since the sea was smooth and the swell
slight, although sagged below the surface, continued attached to the
remainder by a few twisted longitudinals of steel and some mangled plates.
The unhurt Destroyer having embarked the shipwrecked crew, ranged
alongside her damaged sister, and proclaimed her intention of passing a
towing hawser.

The Captain of the cripple filled and lit a pipe while he considered the
problem from the vantage of the midship funnel of his command, which
lolled drunkenly in a horizontal posture athwart the upper deck.

"Not yet," he shouted, and turned to the Gunner, who stood knee-deep
in water where once a torpedo-tube had been. "It's that cursed depth-charge
I'm worrying about. It's still in the chute at the stern, and set to explode at a
depth of forty feet."

The Gunner nodded, and bent forward to peer through the translucent
depths at what had been, a quarter of a hour before, the dwelling-place of
both. Somewhere beneath the surface, still affixed to the submerged stern,
was the Destroyer's main anti-submarine armament—her depth-charges.
One had been in the tray, ready set for instant release by the jerk of a lever,
when the collision occurred.

"If the stern breaks off, that depth-charge'll sink with it, and explode
when it gets down to forty feet."

"That's right, sir," said the Gunner, with melancholy calm.

"And the explosion'll rip this bulkhead out of her, and down the fore
part will go. Half a ship's better'n none, Mr. Hasthorpe."

Mr. Hasthorpe agreed, but inclined to the view that he'd rather have kept
the other half, given a choice in the matter.

"There was a nice li'l drum o' paint aft there we had give us at Taranto,
sir, an' some ostridge feathers under my bunk, what I'd promised my old
woman."

A long, sleek swell passed beneath them on its unhurried path from
Africa to the Adriatic. The dark wreckage beneath the surface stirred like
weed in a current, and the deck plating under their feet trembled ominously
as the hulk rolled.

"A few more of those," said the youthful Captain, "and down goes the
after part. I shall lose my ship." The speaker had rather less than half a ship
to lose, but he scrambled down on to the buckled plating of the upper deck,
hastily unbuttoning his drill tunic.

"That depth-charge must be set to 'safe,' then it can't explode, however


far it sinks."

"It's a couple of fathoms below the surface. I ain't no Annette Kellerman


meself," said the Gunner.

His Captain waved the dinghy alongside. "That's nothing. I'll have a
shot for it—if I can only find the beastly thing in all that tangle."

"An' if another swell passes when you're in the water, sir, likely as not
the stern'll drop off an'——" The sentence remained unfinished, for his
Captain had slipped over the side into the waiting dinghy and was busily
divesting himself of his clothes.

"You'd better get clear," he shouted to his confrère in the other


Destroyer, "till I've finished. No I'm not going to bathe!" He explained the
situation while the dinghy man rested on his oars and musingly
contemplated the big toe of his left foot round which a shred of spun yarn
was twisted. The Captain of the other Destroyer raised his arm to show he
understood; the telegraph gongs clanged, and the Destroyer moved away
from the side of the derelict. The dinghy paddled a few strokes, and the
nude pink figure in the stern bent down and stared into the water.

"Right," he said presently. "Keep the boat there, Simmonds." He took a


few deep breaths, standing on the after thwart, and then dived.

The oarsman leaned over the gunwale and held his breath, gazing under
the boat like a man in a trance.
After all the tumult of the collision the moment was one of deathly
stillness. The tramp lay black against the sunlight half a mile away. The
Destroyer was turning in a wide circle, with a flick of white under her stern,
and close at hand, amid the wreckage of the still floating unfortunate, the
Gunner stood motionless, staring.

The dinghy man suddenly sat upright and took a stroke with one paddle.
The head and shoulders of the Lieutenant-in-Command broke the oily
surface with an abrupt splash. He gripped the stern of the dinghy and
heaved himself out of the water. Then, stark and dripping, he stood upright,
transfigured by the Mediterranean sunshine into a figure of shining gold,
and, raising his arms above his head, semaphored two letters to the
watching Destroyer—"OK," finishing with a triumphant wave of the hand.

A thin cheer broke out along the crowded rail, the syren sounded a toot
of congratulation, and as the resultant wisp of steam dissolved in the air the
dinghy suddenly rose, rocked on the slope of a passing swell, and dropped
down its smooth flank. The portion of the Destroyer that remained afloat
rolled twice; there was a succession of big swirls in the water, an ugly
grinding sound, and a snap. The Lieutenant-in-Command gave a short, hard
laugh.

"There go your peacock feathers," he said to the Gunner, as he climbed


on board the wrecked remnant of his command.

"Ostridge," amended Mr. Hasthorpe, and clambered forward to the


towing bollard and the preliminaries of a piece of seamanship that brought
half a Destroyer safely to the dock a hundred and seventy miles away.

AUTHOR'S NOTE

The foregoing are based on actual occurrences in the War, and, as far
as the author is aware, conform to fact. The characters are imaginary; their
words and thoughts those of the writer's imagination.
IV

THE ACTION BETWEEN H.M.S. PRIZE


AND GERMAN SUBMARINE U93

(1917)

The German submarine U93 sailed from Emden on Friday, April 13,
1917, on her maiden trip to the Atlantic. She carried eighteen torpedoes and
500 rounds of ammunition for her two 3.9 mm. guns; her complement
consisted of thirty-seven officers and men, under the command of Captain
Lieutenant F. Freiherr Spiegel von und zu Peckelsheim.

A tendency on the part of the crew to regard the date as ill-omened was
met by the Commander with the assurance that the combination of Friday
and the figure thirteen would cancel any bad luck usually associated with
either.

About 8.30 P.M. (Greenwich time) on April 30 U93 was in


approximately Latitude 49° 40N, Longitude 11° 40W., making her way
back to Germany with the sinking of eleven merchant ships to her discredit.

The Commander of U93 was more than satisfied with the result of his
cruise: moreover, he had two horses running in the Berlin races during the
second week in May, and was anxious to be back in time for the event. But
on sighting the sails of a small top-sail schooner coming over the horizon,
he decided to delay his return a few hours and complete the round dozen of
ships sunk; also the size of the schooner would, he judged, round off his
tonnage figures evenly.

He opened fire on the schooner at three miles range, and, as this was the
last ship to be sunk during the trip, gave orders that all men who could be
spared from their duties below might come on deck and witness the sinking.

The schooner in question was His Majesty's Ship Prize of 200 tons,
commanded by Lieutenant William Edward Saunders, Royal Naval
Reserve, with two 12-pounders concealed in collapsible deck-houses, and
one aft on a disappearing mounting under the hatchway covers of the after
hold. She also carried two Lewis guns, and was incidentally the first
German prize (then called the Else) captured by Great Britain on the
outbreak of war.

In complete ignorance of these details, however, the Commander of


U93 turned his submarine in a wide circle in order to close his victim
cautiously from astern, firing in a leisurely manner from his foremost gun
as he approached.

Immediately the submarine opened fire the alarm gongs sounded on


board the Prize. With the exception of the Commanding Officer and
Skipper Meade, R.N.R. (Trawler Section), who were concealed inside the
steel companion-cover amidships, and six hands in charge of Skipper
Brewer, R.N.R. (Trawler Section), every man threw himself flat on the deck
under cover of the bulwarks and crawled to his action-station, where he lay
awaiting orders. The two foremost guns were in charge of the second-in-
command, Lieutenant William D. Beaton, Royal Naval Reserve, who lay at
the foot of the foremast with his ears to the voice-pipe from the Captain's
observation position.

The ship's head was put up into the wind, and the six hands in charge of
Mr. Brewer, who formed what was technically known as a "panic party,"
launched the small boat and abandoned the ship with every outward
symptom of haste and disorder. The time was then 8.45 P.M.

The ship's head fell away to eastward, and the enemy slowly followed
her round, still firing at her in a deliberate manner. Of two shots that hit the
water-line and burst inside the ship, one put the auxiliary motor-engine out
of action, wounding the Stoker Petty Officer in charge; and the other
shattered the wireless-room, wounding the operator inside it. The cabins
and mess-room were wrecked, the mainmast shot through in two places,
and the ship began to make water fast.
In spite of this heavy punishment and the intensity of the strain, the
guns' crews remained motionless on the deck while the submarine drew
closer. She was invisible to all on board the schooner except the two figures
inside the companion, who through slits in the plating were able to watch
her movements and communicate the closing range to the guns.

With unrelaxed caution, however, the submarine continued to approach


slowly from astern, and it was on this precise bearing that none of the
schooner's guns would bear. The leaden minutes dragged by like an eternity.
The Commanding Officer of the Prize several times left his place of
observation and crawled on hands and knees from man to man, steadying
them and impressing on them the necessity for keeping out of sight. One of
the port foremost gun's crew, a lad of eighteen, twitched uncontrollably with
excitement like a galvanised frog as he sprawled face-downwards.

"What are you tremblin' about?" demanded the gun-layer in a hoarse,


contemptuous whisper. "You can only die onest."

Twenty minutes passed thus in almost intolerable suspense. Then the


crew of the after gun, straining their ears for the slightest sound, heard the
fitting to which the patent-log line was attached splinter as it was wrenched
away from its screws. The submarine had closed until she fouled the
schooner's log-line and carried it away.

The next moment U93 put her helm to starboard and glided out on to
the port quarter of the schooner at seventy yards' clear range.

It was then 9.5 P.M., and Lieutenant Saunders, satisfied at last that his
guns would bear, shouted, "Down screens! Open fire!" At the same moment
the White Ensign was hoisted.

The Shipwright, whose duty it was to release the after-gun screen,


knocked the catch and the hatchway cover slid back like the front of an
American roll-top desk. With the jerk of a lever the gun rose into position
and opened fire two seconds later.

The foremost gun's crew leaped to their feet, and the deck-houses
collapsed simultaneously, unmasking the foremost twelve-pounders.
The enemy was not easily taken by surprise, however. As the White
Ensign appeared above the bulwarks of the Prize, the submarine fired two
rounds from her guns. One hit the schooner's superstructure, and the other
the water-line. This shell burst in the interior of the ship, severely wounding
the Shipwright, who had rushed below to fetch one of the Lewis guns which
were kept at the bottom of the ladder.

The Commander of the submarine put his helm hard over with the
intention of ramming the schooner, but realising that she was inside his
turning circle, reversed his helm and tried to escape. The next moment a
shell from the schooner's after gun struck the foremost gun of the
submarine, blowing it to atoms and annihilating the crew.

The Commanding Officer of the Prize, on realising that the submarine


was heading away from him, rang down the order for full speed to the
engine-room. Unknown to him, however, one engine was completely
disabled, and the other, after driving the ship for about one hundred yards,
also stopped. There was practically no wind, and the ship lay motionless on
the water.

In the meanwhile, however, the gunlayer of the after gun had hit the
conning tower of the submarine with his second shot, and demolished it; a
deckhand at the same time raked the remainder of the survivors off her deck
with the Lewis gun. A third shot from the after twelve-pounder struck the
submarine in the vicinity of the engine-room and disabled her, but she
continued to carry her way until about 500 yards from the Prize, when she
came to a standstill, slewing broadside on to her vanquisher. There were no
survivors visible, and a dull red glare from internal fires showed through the
rents in her hull. At the thirty-sixth round she sank stern first, four minutes
after the commencement of the action.

The "panic party" in the boat were then ordered to pull over the scene of
the action and search for survivors. Darkness was falling fast, but they
succeeded in picking up the Commander of the submarine, who had been
knocked overboard by one of the bodies blown from the foremost gun, the
Navigating Warrant Officer, and a Stoker Petty Officer. No other survivors
could be found, and the boat returned with the prisoners, conscientiously
"covered" by a Browning pistol in the fist of the Trawler Skipper at the
helm.

While the search for survivors was being carried out by the ship's boat a
survey of the damage on board the schooner revealed a serious state of
affairs. The water was pouring through the shot-holes and stood a foot deep
between decks. It continued to gain in spite of the employment of every
available man on pumping and bailing, and the temporary plugging of the
holes with hammocks and blankets.

Fortunately the sea was calm, with very little or no wind. The ship was
put on the port tack and every possible device employed to list her to
starboard, all the damage she had received being on the port side. The boat
was swung out at the starboard davits and filled with water, coal and water
shifted to the starboard side, and both cables ranged along the starboard
scuppers. By these means sufficient list was obtained to lift the shot-holes
clear of the water and to enable them to be temporarily patched.

Immediately after boarding the Prize the German submarine


Commander offered his word of honour to make no attempt to escape, and
promised that he and his men would do all in their power to assist. His
parole was accepted, and both he and his men set to with a will, prisoners
and captors working side by side to save the ship. The Navigating Warrant
Officer voluntarily attended to the wounded and dressed their wounds.

As soon as it was realised that the water was no longer gaining on them,
the attention of the Commanding Officer of the Prize was devoted to an
attempt to restarting the motors. In the course of this work a fire broke out
in the engine-room, due to sparks from the motor igniting the oil which had
leaked from the damaged tank. This was successfully extinguished, and the
wounded Stoker Petty Officer, assisted by the German Stoker Petty Officer,
succeeded in getting one motor started. By 11.45 P.M. on April 30 all sail
was set, and with one engine working the Prize shaped a course for the Irish
Coast, 120 miles to the north-eastward.

Land was not sighted until the afternoon of May 2, during which time
the crew, assisted by the prisoners, laboured at the pumps day and night.
They were finally picked up 5 miles to the westward of the Old Head of
Kinsale by one of H.M. Motor Launches and towed into Kinsale Harbour.
Here two of the wounded were disembarked, and improvised leak-stoppers,
made out of the pieces of plank with blankets stretched over them, were
bolted over the shot-holes.

On May 4 the Prize, with her three prisoners still on board, left Kinsale
Harbour in tow of one of H.M. Drifters, and arrived at Milford Haven,
where she was based, at 8 A.M. on May 4.

During the passage an enemy minelaying-submarine was sighted on the


surface to the southward about two miles away. The crew of the Prize
immediately went to "Action Stations" in the hope that the enemy would
close to within effective range, and for an hour they waited in tense
excitement, while the submarine steered a parallel course to theirs.
Apparently, however, her caution got the better of her curiosity, for she
finally drew ahead and was not seen again. The remainder of the voyage
passed uneventfully.

His Majesty the King, in recognition of the conspicuous gallantry


displayed by the Officers and men of the Prize, was pleased to award the
Victoria Cross to Lieutenant W. E. Saunders, who was also promoted to the
rank of Temporary Lieutenant Commander, Royal Naval Reserve.

Lieutenant W. D. Beaton, R.N.R., the Second-in-Command, was made a


Companion of the Distinguished Service Order, the two Skippers, R.N.R.
(T), were decorated with the Distinguished Service Cross, and the
remainder of the ship's company received the Distinguished Service Medal.

A few months later H.M.S. Prize, under the command of Lieutenant-


Commander Saunders, V.C., R.N.R., was lost with all hands, presumably as
the result of an engagement with one or more enemy submarines. The death
of this most gallant officer and his efficient and highly trained crew was a
disaster the Navy and the nation could ill afford.
V

THE FORFEIT

(1916)

The sun was sinking low behind the peach-trees when workers from the
rice-fields came straggling back to the village. By twos and threes they
came, toil-stained women and boys, with here and there an old, gnarled
man, their shadows long on the road before them.

Tani, maker of sandals, looked up from his work as each one came
abreast his shop, responding gravely to the low-voiced, musical greetings.
But after the last worker had passed, his eyes, shaded beneath the palm of
his hand, still sought the road beyond the village in patient expectancy.

Presently he heard the distant click of clogs, and a little figure came in
sight. Her cotton kimono was looped to the knees, the mud of the paddy-
fields still clung to her slender brown limbs. She drew near.

"Greeting, Su Su O!"

"Greeting, Tani!" The girl paused before the shop, with quaint
genuflection and the gentle hiss of indrawn breath that in Japan is a
courtesy. The sandal-maker sat back on his heels.

"Tired, Su Su O?"

"Very," replied the girl. She moved the heavy, mud-caked hoe from her
shoulder and leaned on the haft, looking down at him with a little smile.
Her mouth, with its geranium-scarlet lips, drooped wearily at the corners
when in repose: her whole attitude betrayed fatigue.

The man frowned. "It is not well, Su Su O, that you should do coolie
work. You are not of coolie stock, nor yet of coolie strength. Su Su O,
hearken yet again! Be my wife! Come and live with me here, and let me
labour for us both! I need you so, little Flower. I want you for my wife ...
not to see you only at sunrise and dusk, passing my dwelling by."

The sun set swiftly; swiftly the purple night swept up over rice-field and
cherry-orchard. Here and there along the village street a coloured lantern
glowed suddenly out of the darkness; through the frail oiled-paper walls of
the cottages drifted the voices of children and the tinkle of a samisen. The
sandal-maker stood up and took the girl's hand in his.

"I am lonely without you, Su Su O," he pleaded.

Her lip quivered. "I too am lonely, Tani; but I am a beggar—a coolie girl
without father or mother. I cannot marry you: I have no dowry. I can bring
nothing to the wedding—save myself, in rags. It would bring disgrace upon
us."

In vain he pleaded, all the poetic imagery of the Asiatic upon his tongue.
In vain he scoffed at convention—that terrible, inexorable convention of the
East; still the dainty head shook in plaintive negation. Some unknown strain
in her blood set honour before love, bowed to the decrees that had ruled her
unknown forbears. At length, as if fearing that her resolution might weaken
from sheer physical weariness—and she loved very dearly too—she turned
towards the village.

"I must go, Tani. It is of no avail.... Nay, entreat me not further.... Nay,
Tani, I am so tired...."

The sandal-maker stepped back among his wares. Punctiliously they


went through the little ceremony of genuflection and gesture. Click-click
went the clogs up the narrow street, and among the shadows the sandal-
maker stood with head bent, as if listening, long after the sound had died
away.

That evening a traveller came to the village, a little wizened man, clad
somewhat incongruously in a grey silk kimono, a bowler hat, and elastic-
sided boots. Rumour whispered that he was the owner of a fashionable cha-
ya (tea-shop) in Tokyo, renowned for the beauty of its Geishas. Gossip
spreading quickly from door to door supplemented this as the night wore
on. The honourable stranger was touring the country on the look-out for
pretty girls. He paid well, they said, and his establishment was much
frequented by Europeans, who, as all the world knows, part freely with the
sen. Here was a chance for a girl with looks!

The old gentleman was sipping saki in the guest-room of the village inn
when Su Su O was announced. His keen old eyes noted with appreciation
the lines of the childish figure as she bowed her forehead to the matting.
But when she raised herself to her knees, and faced him with downcast
eyes, he pursed up his mouth as if contemplating a whistle. Had he been a
European he probably would have whistled, but this is not an art practised
among owners of cha-ya. Otherwise his face was expressionless.

"Who is your mother?" he inquired, breaking the silence.

"She is dead, most honourable one. A peasant woman. I reside at the


house of Matsu the charcoal-burner and his wife."

"And your father?"

"I do not know, O honourable one."

"Ah!" said her interlocutor, as if something had been explained that he


did not understand. Peasants do not beget daughters with hair like Su Su
O's, nor with ears like tiny pink shells, nor yet slender wrists and fingers.
"And you wish to be a Geisha?"

Su Su O prostrated herself in silent acquiescence.

"I will take you on condition that you remain with me three years." The
heart of Su Su O sank. Would Tani wait three years? "And I will pay you"—
he named what was to the girl a considerable sum. That clinched it: with a
dowry like this she could marry Tani over and over again. Yet her fingers
trembled as she painted her signature to the indentures, and her heart was
sick at the thought of the parting. Even "passing his dwelling by" was better
than never seeing it at all. But she left for Tokyo the next day, and a few
moments were all that she had for saying good-bye.
"Oh, but you will wait?" she pleaded. "It will soon pass, the three years,
and I will come back rich, and—marry you, Tani."

Tani's reply, in flowery Japanese, was to the effect that he would wait a
hundred million years if necessary.

* * * * *

Her life in the Tokyo tea-house was no worse than that led by the
thousands of other Geishas in the great straggling city. In some respects it
was better, because European tourists of many nationalities frequented the
establishment, and her beauty was such as to appeal not only to Japanese
ideas, but Western as well. For one thing, her cheek-bones were not
accentuated; and her mouth, scarlet-lipped and tremulous at times with
laughter, you would have thought adorable whatever part of the world you
hailed from. Also there was something very bewitching about her plaintive
love-ditties (even if you couldn't understand them), which she sang in a
minor key to guitar accompaniment through her inconsiderable nose.

One day there came to the house a German officer on leave from
Tsingtau. He was a big, bearded youth with blue eyes, and—this was a
ceaseless wonder and delight to the Geishas—the centre of his front upper
row of teeth was crowned with a diamond.

Attracted by the glitter in his mouth, and inured to the oafish attentions
of European customers, she suffered him to put his arm round her. Without
further warning, he lowered his bearded face and kissed her publicly on the
lips.

To the Japanese mind the act was an indignity—worse, indecent. With a


deft wriggle she twisted an arm free and struck him in the face, her eyes
blazing. The big man laughed uproariously, imprisoned her arm, and kissed
her again and again, while she quivered helplessly. Released at length, she
faced him like a tiger-cat.

"Swine!" she cried. "Son of a foreign swine!"—and struck the piece of


gold that he extended towards her out of his hand.
2

The railway terminus at Tokyo was gay with bunting and thronged by a
great crowd of people. A brass band somewhere out of sight broke into
crashing martial music. "Banzai!" roared the khaki-clad figures in the
closely packed carriages, and in response the women and children waved
little hand-flags that bore the national emblem on a white ground.

Japan had declared war on Germany, and the occasion was the departure
of a Reserve Division which was shortly to operate against the German
fortress of Tsingtau. The windows of the carriages were blocked by grim,
fighting faces: men from the North. Among them was Tani, sometime
maker of sandals; and on the platform beneath his window, like a painted
butterfly hovering round the cannon's mouth, stood Su Su O, eyes
suspiciously bright.

"Return if the gods will it!" she whispered, echoing the murmured
farewells of mothers, wives, and lovers. The grim memories of ten years
ago still lingered. The vaulted roof of the terminus had echoed so many
farewells; so few who parted amid the roars of "Banzai!" had greeted one
another again. "If the gods will," said the women now, and the younger men
still shouted "Banzai!" in reply. But at the last, as the long train steamed
slowly out of the station, the finite human heart held sway. The oft-repeated
"Banzai!" changed to "Sai-onara! Sai-i-onara!"—the saddest, most
plaintive-sounding farewell yet fashioned by the human tongue.

A month later found Tani leading a moist and somewhat precarious


existence in a trench before Tsingtau. His recollection of the siege since he
took part in it had been a series of blurred impressions, mud being
predominant throughout. It had seemed an eternity of mud, of ceaseless rifle
and artillery fire, of being soaked to the skin, of cold, hunger, and fatigue.
Once or twice there had been moments of ferocious hand-to-hand fighting.
They were good moments, those; and as he sat in the bottom of a trench
cleaning the bolt of his rifle with a piece of oily rag, his thoughts recurred
to them with a certain grim enjoyment.
By clearing away the earth at the top of the trench he was able to catch
an occasional glimpse of his surroundings. An amphitheatre of barren hills,
with the gleam of the sea in the far distance; a small, slow-moving speck
upon it that was a Japanese or Allied warship shelling the fortress.
Elsewhere, as far as he could see, the ground was scarred by bursting shell,
and herring-boned by wire entanglements. Ahead, where the picric shells
were pitching, a yellow cloud hung low, as the mists sometimes cling to the
slopes of Fujiyama. There were intermittent points of jagged fire beneath
the cloud; shrapnel bursting about the German redoubts.

It all represented to Tani a certain amount of uphill ground to be


covered under fire: how soon he did not know, but the rest was familiar
enough. The inferno of shell-fire that was bursting ahead would redouble
till the mere contemplation of it almost stunned the senses. Then the order
rippled along to advance: you leaped out of your trench and ran as well as
you could across the debris of the last attack and the chaos of barbed wire
till the next trench was reached. Sometimes you just dropped into it and
panted; sometimes you met other men there, fierce, blue-eyed men who had
to be bayoneted. Bullets would shriek and whimper overhead, or hit
something with a sullen "Zip!" Men grunted and seemed to fall asleep, or
rolled over and lay twitching in a novel and rather ludicrous fashion. And
there was the ceaseless rain, the smell of cordite smoke, the bewildering
roar of the howitzers.

That was War, as understood by Tani, sometime maker of sandals.

Early one morning a flask of raw saki was passed along the advanced
trench. Tani drank deep and tightened his belt, for he was hungry; the spirit
ran through his veins like fire. "It is the end," said the man next to him, a
battle-scarred veteran of Nogi's Army, with a queer note of exultation in his
voice. There, was a sudden lull in the firing. Whistles sounded shrilly.

An officer near Tani who had been divesting himself of his overcoat
leapt to his feet with a shout. With an answering roar the trenches seemed to
vomit wave upon wave of steel, and yellow-faced, khaki-clad figures. They
swept forward, stabbing and cheering, hewing their way through the wire
entanglement in the face of a tempest of bullets, leaving their dead dangling
as they fell.
Tani reached a line of sandbags at the crest of a rise unhurt, and drove
his bayonet into the chest of a German who was clubbing his rifle. He heard
the breast-bone crunch as the steel went home to the muzzle of the rifle.
The German fell sideways, twisting the weapon out of Tani's grip with his
weight. Then Tani saw a bearded officer, the haft of a broken sword
dangling from a leather thong at his wrist, struggling to reload his revolver.

As a mongoose jumps for a snake the Japanese leapt at the German's


throat. They fell together in the bottom of the trench, and for a moment they
fought with their hands, in the welter of mud and water, trampled on by
other combatants, breathing in short, savage gasps. Then Tani got the "neck-
lock" he had been struggling for. Something snapped with a sound like a
dry twig breaking, and the German's head dropped back. Tani sat up,
spitting and wiping the mud out of his eyes. His adversary was dead, and
lay staring up at the grey sky as if amazed. The bearded lips were drawn
back, showing his teeth; one of these sparkled curiously. Save for the dead
and wounded, the trench was deserted: the assault had swept forward.
Above them was a sound of great cheering. Someone was wedging a
colour-staff between the sandbags; the emblem of the Rising Sun, tattered
and stained, stirred in the morning breeze. Tsingtau had fallen.

Tani leaned over to examine more closely the phenomenon in the dead
man's mouth. Then he emitted an interested grunt. The centre tooth of the
German's upper jaw was crowned with a diamond.

Tani, maker of sandals, leaned over the parapet of the little cedar-wood
bridge that spanned an artificial hike in the temple grounds. Every now and
again the moon's placid reflection on the water broke into widening ripples
as a carp rose. In the stillness the sound of its feeding was audible—a tiny
"gluck!" as if a greedy child were smacking its lips. It was late spring, the
season of the cherry-blossom, and the light airs of evening came in puffs
across the water, laden with faint fragrance. The doors of the temple stood
open: inside, a lamp burned dully before the altar.
After a while the man took from his pocket a little pouch of oiled silk
and emptied the contents into his palm. There was some dusty tobacco, two
or three matches, and a small object that caught the light as he moved his
hand. This he retained, and put the pouch and the rest of its contents back
into his pocket.

"Click-click, click-click!" Light, metal-shod sandals were approaching


from the direction of the village. A form fluttered towards him out of the
darkness like a soft grey moth.

"Have you waited long, Tani?"

"So long, Su Su O, that the night had grown into Eternity, and the sound
of my sighing checked the very lamentation of the frogs!"

She laughed in her delicious gurgling way, and pressed her face against
his sleeve. He slipped one hand beneath her chin, raising the flawless oval
face to the full light of the moon.

"Thou art very beautiful," he said, half below his breath. "A thousand
men assuredly have loved thee since we bade farewell."

Su Su O sighed. "But none have laid a finger on me in love, Tani—save


one, and him I struck."

The man smiled a little, and then his face grew grave. He fretted with
the sling which supported his left arm. "What manner of man was he, this
love-besotted fool?"

"A German, Tani; a man of great stature, bearded, with a jewel set in the
centre tooth of his upper jaw."

Tani released her chin. "A diamond, belike, Little Flower?"

She nodded assent. "And by force he kissed me—upon the mouth."

"Ah!" For a moment the sandal-maker stared across the water, his eyes
narrowed into slits, his face inscrutable. Then, with a sudden jerk of the
wrist, he sent something spinning through the air—something that glittered
like a point of flame in the moonlight. It fell with a splash, scaring the lazy
carp that lay just beneath the surface.

"He has paid his forfeit," said Tani grimly.

All uncomprehending, Su Su O nestled against him and slipped her


slender hand into his. Together they turned towards the temple.

VI

SUPPER BEER

(1914)

With the turn of the tide the wind backed and swept a wet mist in from
the sea. During the day promenaders had thronged the stone pier that partly
encircled the deserted harbour; townspeople for the most part—stolid,
sombre-clad folk, taking their constitutionals soberly, as if they formed part
of some inflexible schedule that regulated their lives. In the afternoons a
sprinkling of infantrymen from the fort intermingled with them; loose-
limbed young conscripts in grey uniforms, with heads too small for their
bodies—a phenomenon partly accounted for by the zeal of the garrison
barber, and partly by the size of their grotesque boots.

Now, however, as the evening set in with every promise of dirty


weather, the promenaders turned in pairs towards the town. The angler who
had been fishing in the shelter of the stone beacon slowly wound in his
lines, gathered together his paraphernalia, and departed also. A watchman,
carrying a short ladder over his shoulder, came and examined the automatic
revolving gear of the lantern, and after polishing the reflector, briskly
returned to the town, taking his ladder with him.
With the exception of a solitary figure pacing backwards and forwards
under the lee of the rough wall, the pier was soon deserted. But this figure's
constitutional appeared to partake of the nature of a vigil, for every few
minutes he paused and stared seaward into the mist through a pair of
binoculars.

His face, as much of it as was visible above the collar of his ulster, was
that of an elderly man, thin and aristocratic-looking. When not gazing out to
sea, he contemplated his slow-pacing feet with mild, thoughtful blue eyes
through rimless pince-nez. One cheek-bone was ornamented by a duelling-
sabre scar.

Half an hour passed, while the spray drifted over the sea-wall and
collected under-foot in shallow pools that alternately mirrored the waning
light and darkened as a fresh gust of wind hurled itself in from the North
Sea. Out at the entrance to the harbour a solitary gull faced the wind with
steady beats of its powerful wings, calling with querulous persistency.
Lights were beginning to twinkle here and there along the deserted sea-front
when the watcher at the pier-head lowered his glasses, hastily wiped the
lenses, and raised them again to his eyes. Then he made a guttural
observation in an undertone.

Out of the grey smudge of sea and sky a small vessel suddenly became
an object distinct, making for the mouth of the harbour: a short, squat craft,
with high bows and a tall raking funnel set far aft. To judge by the derricks
topped up to her mainmast she had every appearance of being a trawler; yet
for a trawler returning in the height of the fishing season she gave evidence
of very empty holds by the buoyancy of her movements. She carried no
lights, though the dusk was now settling fast.

A short, thick-set man in a blue jersey stood at the wheel; at his side was
a younger man, a tall, upright figure muffled in a thick pilot coat. The crew,
with the exception of two who were getting ready to make the vessel fast,
stood in a group in the waist. For a North Sea trawler the complement of
hands appeared somewhat in excess of the usual requirements.

The man at the helm brought the vessel smoothly alongside without
acknowledging the presence of the watcher on the pier. His companion,
however, smiled a greeting, raised his hand as if to salute, and checked
himself. As the trawler went astern and her way slackened, he jumped out
and joined the figure in the ulster.

"Well?" asked the elder man.

"Absolutely successful! Twenty-four, all told. I got right across to


within ten miles of their coast."

The other gave an abrupt, disconcerting laugh. "You laid them in fours,
as you were ordered?"

The young man nodded. "They cannot miss them. And if a ship fails to
touch one direct she must cross one of the wires that connect them. The
impetus of her speed will swing them aft against her side—two on each
side.... Or three on one and one on the other...! Then——!" The speaker
made a graceful upward gesture with his hands and smiled.

"And you were not sighted?"

"Once. The fog lifted a little, and one of their Light Cruisers must have
seen us. But I was flying their flag——" He laughed again. "Oh, they are
fools! Fools! They had time to blow us out of the water six times over
before I could slip back into the fog again." The speaker lit a cigarette and
moistened his dry lips. "Then I came back as quickly as possible. And now I
want my supper and some beer—it's thirsty work, that—that trawling in the
North Sea!" He took a Service revolver out of the side pocket of his coarse
reefer jacket and extracted the cartridges from it as they walked along the
deserted quay.

His companion took his arm affectionately. "My dear boy," he


ejaculated. "Beer! Come along! You shall have a gallon—you have earned
it! Herr Gott in Himmel! You shall swim in it if you like."

You might also like