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

[Ebooks PDF] download Kivy : interactive applications and games in Python : create responsive cross-platform UI/UX applications and games in Python using the open source Kivy library Second Edition Roberto Ulloa full chapters

interactive

Uploaded by

hoylewoolf
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (4 votes)
68 views

[Ebooks PDF] download Kivy : interactive applications and games in Python : create responsive cross-platform UI/UX applications and games in Python using the open source Kivy library Second Edition Roberto Ulloa full chapters

interactive

Uploaded by

hoylewoolf
Copyright
© © All Rights Reserved
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

Kivy : interactive applications and games in


Python : create responsive cross-platform
UI/UX applications and games in Python using
the open source Kivy library Second Edition
Roberto Ulloa
https://textbookfull.com/product/kivy-interactive-
applications-and-games-in-python-create-
responsive-cross-platform-ui-ux-applications-and-
games-in-python-using-the-open-source-kivy-
library-second-edition-roberto-ulloa/

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


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

Godot 4 Game Development Projects: Build five cross-


platform 2D and 3D games using one of the most powerful
open source game engines 2nd Edition --
https://textbookfull.com/product/godot-4-game-development-projects-
build-five-cross-platform-2d-and-3d-games-using-one-of-the-most-
powerful-open-source-game-engines-2nd-edition/
textbookfull.com

Coding Games in Python 1st Edition Carol Vorderman

https://textbookfull.com/product/coding-games-in-python-1st-edition-
carol-vorderman/

textbookfull.com

Create GUI Applications with Python Qt5 PySide2 Edition


Martin Fitzpatrick

https://textbookfull.com/product/create-gui-applications-with-python-
qt5-pyside2-edition-martin-fitzpatrick/

textbookfull.com

Law in American history. Volume 2, From reconstruction


through the 1920s 1st Edition White

https://textbookfull.com/product/law-in-american-history-
volume-2-from-reconstruction-through-the-1920s-1st-edition-white/

textbookfull.com
Design User Experience and Usability Designing Pleasurable
Experiences 6th International Conference DUXU 2017 Held as
Part of HCI International 2017 Vancouver BC Canada July 9
14 2017 Proceedings Part II 1st Edition Aaron Marcus
https://textbookfull.com/product/design-user-experience-and-usability-
designing-pleasurable-experiences-6th-international-conference-
duxu-2017-held-as-part-of-hci-international-2017-vancouver-bc-canada-
july-9-14-2017-proceedings-part/
textbookfull.com

Dynamic Business Process Management in the Knowledge


Economy: Creating Value from Intellectual Capital Marek
Szel■gowski
https://textbookfull.com/product/dynamic-business-process-management-
in-the-knowledge-economy-creating-value-from-intellectual-capital-
marek-szelagowski/
textbookfull.com

Speculative Grammatology Deconstruction and the New


Materialism Speculative Realism 1st Edition Deborah
Goldgaber
https://textbookfull.com/product/speculative-grammatology-
deconstruction-and-the-new-materialism-speculative-realism-1st-
edition-deborah-goldgaber/
textbookfull.com

Global Temperance and the Balkans American Missionaries


Swiss Scientists and Bulgarian Socialists 1870 1940
Nikolay Kamenov
https://textbookfull.com/product/global-temperance-and-the-balkans-
american-missionaries-swiss-scientists-and-bulgarian-
socialists-1870-1940-nikolay-kamenov/
textbookfull.com

Laws of UX - Using Psychology to Design Better Products &


Services 1st Edition Jon Yablonski

https://textbookfull.com/product/laws-of-ux-using-psychology-to-
design-better-products-services-1st-edition-jon-yablonski/

textbookfull.com
Chemistry 7th Edition John E. Mcmurry

https://textbookfull.com/product/chemistry-7th-edition-john-e-mcmurry/

textbookfull.com
[1]
Kivy – Interactive Applications
and Games in Python
Second Edition

Create responsive cross-platform UI/UX applications


and games in Python using the open source Kivy library

Roberto Ulloa

BIRMINGHAM - MUMBAI
Kivy – Interactive Applications and Games in Python
Second Edition

Copyright © 2015 Packt Publishing

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

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

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

First published: September 2013

Second edition: June 2015

Production reference: 1240615

Published by Packt Publishing Ltd.


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

ISBN 978-1-78528-692-6

www.packtpub.com
Credits

Author Project Coordinator


Roberto Ulloa Suzanne Coutinho

Reviewers Proofreader
Takumi Adachi Safis Editing
Philip Bjorge
Joe Dorocak Indexer
Priya Sane
Vijay Mahrra
Edward C. Delaporte V
Graphics
Sheetal Aute
Commissioning Editor
Disha Haria
Nadeem N. Bagban
Jason Monteiro

Acquisition Editor
Nikhil Karkal Production Coordinator
Nitesh Thakur

Content Development Editor


Amey Varangaonkar Cover Work
Nitesh Thakur

Technical Editor
Ankur Ghiye

Copy Editor
Adithi Shetty
About the Author

Roberto Ulloa has a diverse academic record in multiple disciplines within


the field of computer science. Currently, he is working with artificial societies
as part of his PhD thesis at the University of Western Ontario. He obtained an
MSc degree from the University of Costa Rica and taught programming and
computer networking there. He has earned a living as a web developer, working
with Python/Django and PHP/Wordpress. He collaborates with various researchers
while also working on his own projects, including his blog (http://robertour.
com). He constantly worries that the Internet has already become aware of itself and
that we are not able to communicate with it because of the improbability of it being
able to speak any of the 6,000-plus odd human languages that exist on the planet.

I would like to thank Celina for supporting me in all my adventures,


in particular, this book. I am very grateful for the valuable
contributions and feedback of the Packt Publishing team, the editors,
and the reviewers. Also, I would like to thank all those people who
made the previous edition possible. Their ideas and encouragement
made that edition a success, which is why I have now been given the
opportunity to update and expand it with this second edition.
About the Reviewers

Takumi Adachi is an avid user and programmer of web and mobile


applications. His strong points include HTML/CSS, JavaScript and its many
frameworks and libraries, and Android development. He has also contributed
a little to Kivy Blueprints, Mark Vasilkov, Packt Publishing.

I want to thank my family, friends, Justin, and my past and present


employers for helping me get to where I am today.

Philip Bjorge is a full-stack developer who has worked on projects for health,
amusement parks, academics, and high-tech industries. Prior to joining Substantial,
a Seattle-based software design agency, he worked on the Xbox Music and Video
team at Microsoft. Most notably, he was a developer for Surface Music Kit, an app
that was featured at the Surface 2 press conference unveiling and was on display in
Microsoft stores nationwide.
Joe Dorocak, whose Internet moniker is Joe Codeswell, is a very experienced
programmer. He enjoys creating readable code that implements project requirements
efficiently and in a manner that can be easily understood. He considers writing code
akin to writing poetry. He crafts his code so it acts as communication, not only with
the machine platforms on which it runs, but also with the human programmers who
will read it in the future.

Joe has been employed directly and also in a contractual role by start-ups and by
many major top-shelf companies, including IBM, HP, and GTE/Sprint.

Joe is presently concentrating on application and web project consulting using


languages, frameworks, and tools and techniques, including Python, JavaScript,
web2py, Cython, memoization, and other performance enhancement techniques.
For more details on him, please visit https://www.linkedin.com/in/joedorocak.

Joe has also worked on Kivy Blueprints by Mark Vasilko and Functional Programming
in JavaScript by Dan Mantyla.

I am very grateful to Suzanne Coutinho and Nidhi Joshi of Packt


Publishing. They have always coordinated my efforts wisely,
professionally, and with a consistent human touch.
Vijay Mahrra is an experienced system administrator, developer, and programmer
with over 20 years of experience from the very early days of the Web to the present
day, contributing his knowledge and experience to various free and open source
projects along the way.

You can find out more about him at http://about.me/vijay.mahrra

A big thank you to my mother, Nirmal; niece, Shreya; and everyone


at Packt Publishing. Thanks to Matt Saunders and Neil Levine for all
the years of hosting.

Edward C. Delaporte V has been creating and using software since the
mid 1980s.

Edward wants to thank all of the software developers who wrote


the code he learned from, especially those who took the time to also
write about their code, how to program, and how to program well.
www.PacktPub.com

Support files, eBooks, discount offers, and more


For support files and downloads related to your book, please visit www.PacktPub.com.

Did you know that Packt offers eBook versions of every book published, with PDF
and ePub files available? You can upgrade to the eBook version at www.PacktPub.
com and as a print book customer, you are entitled to a discount on the eBook copy.
Get in touch with us at [email protected] for more details.

At www.PacktPub.com, you can also read a collection of free technical articles, sign
up for a range of free newsletters and receive exclusive discounts and offers on Packt
books and eBooks.
TM

https://www2.packtpub.com/books/subscription/packtlib

Do you need instant solutions to your IT questions? PacktLib is Packt's online digital
book library. Here, you can search, access, and read Packt's entire library of books.

Why subscribe?
• Fully searchable across every book published by Packt
• Copy and paste, print, and bookmark content
• On demand and accessible via a web browser

Free access for Packt account holders


If you have an account with Packt at www.PacktPub.com, you can use this to access
PacktLib today and view 9 entirely free books. Simply use your login credentials for
immediate access.
Table of Contents
Preface iii
Chapter 1: GUI Basics – Building an Interface 1
Basic interface – Hello World! 3
Basic widgets – labels and buttons 7
Layouts 10
Embedding layouts 16
PageLayout – swiping pages 19
Our project – Comic Creator 22
Summary 29
Chapter 2: Graphics – the Canvas 31
Understanding the canvas 32
Drawing basic shapes 33
Adding images, colors, and backgrounds 41
Structuring graphic instructions 42
Rotating, translating, and scaling the coordinate space 44
Comic Creator: PushMatrix and PopMatrix 47
Summary 53
Chapter 3: Widget Events – Binding Actions 55
Attributes, ID, and root 56
Basic widget events – dragging the stickman 58
Localizing coordinates – adding stickmen 65
Binding and unbinding events – sizing limbs and heads 69
Binding events in the Kivy language 74
Creating your own events – the magical properties 77
Kivy and its properties 80
Summary 84

[i]
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Table of Contents

Chapter 4: Improving the User Experience 85


ScreenManager – selecting colors for the figures 86
Color control on the canvas – coloring figures 89
StencilView – limiting the drawing space 93
Scatter – multi-touching to drag, rotate, and scale 95
Recording gestures – line, circle, and cross 99
Recognizing gestures – drawing with the finger 101
Behaviors – enhancing widget's functionality 107
Style – decorating the interface 109
Factory – replacing a vertex instruction 111
Summary 113
Chapter 5: Invaders Revenge – an Interactive
Multi-touch Game 115
Invaders Revenge – an animated multi-touch game 116
Atlas – An efficient management of images 118
Boom – simple sound effects 120
Ammo – simple animation 120
Invader – transitions for animations 122
Dock – automatic binding in the Kivy language 125
Fleet – infinite concatenation of animations 126
Scheduling events with the clock 128
Shooter – multi-touch control 130
Invasion – moving the shooter with the keyboard 134
Combining animations with '+' and '&' 136
Summary 138
Chapter 6: Kivy Player – a TED Video Streamer 141
Video – play, pause, and stop 142
AsyncImage – creating a cover for the video 146
Subtitles – tracking the video progression 149
Control bar – adding buttons to control the video 153
Slider – including a progression bar 157
Animation – hiding a widget 159
Kivy inspector – debugging interfaces 161
ActionBar – a responsive bar 163
LoadDialog – displaying a directory of files 168
ScrollView – displaying a list of videos 171
Search – query the TED Developer API 176
Summary 177
Index 179

[ ii ]
Preface
Mobile devices have transformed the way applications are perceived. They
have increased in interaction types; the user now expects gestures, multi-touches,
animations, responsiveness, virtual keyboards, and magic-pens. Moreover,
compatibility has become a must if you want to avoid the barriers imposed by
major operating systems. Kivy is an open source Python solution that covers these
market needs with an easy-to-learn and rapid development approach. Kivy continues
to grow fast and two versions have been released since the first publication of this
book in September 2013. Thanks to an enthusiastic community, Kivy is making its way
in an extremely competitive territory in which it stands out for offering both a cross-
platform and efficient alternative to native development and HTML5.

This book introduces you to the Kivy world, covering a large variety of important
topics related to interactive applications and games development. The components
presented in this book were selected according to their usefulness for developing
state-of-art applications and also for serving as an example of broader Kivy
functionalities. Following this approach, the book covers a big part of the
Kivy library.

This book provides you with examples to understand their use and how to
integrate the three projects that come with this book. The first one, the comic
creator, exemplifies how to build a user interface (Chapter 1, GUI Basics – Building
an Interface), how to draw vector shapes in the screen (Chapter 2, Graphics – the
Canvas), how to bind user interactions with pieces codes (Chapter 3, Widget Events
– Binding Actions), and other components related to improving the user experience
(Chapter 4, Improving the User Experience). The second project, Invaders Revenge, is an
interactive game that introduces you to the use of animations, scheduling of tasks,
keyboard events, and multi-touch control (Chapter 5, Invaders Revenge – an Interactive
Multi-touch Game). The third project, Kivy Player, teaches how we can control video
streams with a modern design and responsive interactions to maximize the use of the
screen (Chapter 6, Kivy Player – a TED Video Streamer).

[ iii ]
Preface

Occasionally, this book explains some technical but important Kivy concepts that are
related to the Kivy class structure and implementation, or the order and strategies to
draw on the screen. These explanations give the reader some insights into the Kivy
internals that will help them solve potential problems when they develop their own
projects. Even though they are not necessary for the comprehension of the main
topics of this book, they will become important lessons when the reader faces new
situations implementing their own applications.

This book grabs the reader's attention by stating interesting programming scenarios.
The sections are generally short and straightforward, making the learning process
constant. These short sections will also serve as a reference when the reader finishes
the book. However, serving as a reference doesn't prevent the text from achieving the
main goal, which is teaching bigger projects that connect the small topics. At the end
of this book, the reader will feel comfortable to start their own project.

What this book covers


Chapter 1, GUI Basics – Building an Interface, introduces the basic components and
layouts of Kivy and how to integrate them through the Kivy Language.

Chapter 2, Graphics – the Canvas, explains the use of the canvas and how to draw
vector figures on the screen.

Chapter 3, Widget Events – Binding Actions, teaches how to connect the interactions of
the user through the interface with particular code inside the program.

Chapter 4, Improving the User Experience, introduces a collection of useful components


to enrich the interaction of the user with the interface.

Chapter 5, Invaders Revenge – an Interactive Multi-touch Game, presents components


and strategies to build highly interactive applications.

Chapter 6, Kivy Player – a TED Video Streamer, builds a responsive and


professional-looking interface to control a video stream service.

[ iv ]
Preface

What you need for this book


You need to have some programming experience before starting this book and
specifically have a good understanding of some software engineering concepts,
particularly inheritance and the difference between classes and instances. You should
be already familiar with Python. That said, the code is kept as simple as possible and
it avoids the use of very specific Python nuances, so any other developer can follow
it. No previous experience of Kivy is required, though some general programming
knowledge of event handling, scheduling, and user interfaces would boost your
learning. You also need to have Kivy 1.9.0 installed with all its requirements. The
installation instructions can be found at http://kivy.org/docs/gettingstarted/
installation.html.

Who this book is for


The book aims at developers, specifically Python developers, who want to create
UI/UX applications for different platforms. This book will also benefit developers
that are seeking for an alternative to HTML5 or native Android/iOS development,
looking forward to learn about mobile development and its demands (multi-touch,
gestures, and animations), or wishing to improve their understanding of object-
oriented topics such as inheritance, classes and instances, and event handling.

Conventions
In this book, you will find a number of text styles that distinguish between different
kinds of information. Here are some examples of these styles and an explanation of
their meaning.

Code words in text, database table names, folder names, filenames, file extensions,
pathnames, dummy URLs, user input, and Twitter handles are shown as follows:
"This is the reason we included the on_touch_down event."

[v]
Preface

A block of code is set as follows:


1. # File name: hello.py
2. import kivy
3. kivy.require('1.9.0')
4.
5. from kivy.app import App
6. from kivy.uix.button import Label
7.
8. class HelloApp(App):
9. def build(self):
10 return Label(text='Hello World!')
11.
12. if __name__=="__main__":
13. HelloApp().run()

The numeration restarts at the beginning of each chapter providing a unique


identifier to each line code. Code from previous chapter will never be referenced,
instead it will be copied again if needed. When we wish to draw your attention to a
particular part of a code block, the relevant lines or items are set in bold, for example,
line 10.

New terms and important words are shown in bold. Words that you see on the
screen, for example, in menus or dialog boxes, appear in the text like this: "We need
an alternate way to stop the video (different from the Stop button)."

Warnings or important notes appear in a box like this.

Tips and tricks appear like this.

Reader feedback
Feedback from our readers is always welcome. Let us know what you think about
this book—what you liked or disliked. Reader feedback is important for us as it helps
us develop titles that you will really get the most out of.

To send us general feedback, simply e-mail [email protected], and mention


the book's title in the subject of your message.

[ vi ]
Preface

If there is a topic that you have expertise in and you are interested in either writing
or contributing to a book, see our author guide at www.packtpub.com/authors.

Customer support
Now that you are the proud owner of a Packt book, we have a number of things to
help you to get the most from your purchase.

Downloading the example code


You can download the example code files from your account at http://www.
packtpub.com for all the Packt Publishing books you have purchased. If you
purchased this book elsewhere, you can visit http://www.packtpub.com/support
and register to have the files e-mailed directly to you.

Errata
Although we have taken every care to ensure the accuracy of our content, mistakes
do happen. If you find a mistake in one of our books—maybe a mistake in the text or
the code—we would be grateful if you could report this to us. By doing so, you can
save other readers from frustration and help us improve subsequent versions of this
book. If you find any errata, please report them by visiting http://www.packtpub.
com/submit-errata, selecting your book, clicking on the Errata Submission Form
link, and entering the details of your errata. Once your errata are verified, your
submission will be accepted and the errata will be uploaded to our website or added
to any list of existing errata under the Errata section of that title.

To view the previously submitted errata, go to https://www.packtpub.com/books/


content/support and enter the name of the book in the search field. The required
information will appear under the Errata section.

Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all
media. At Packt, we take the protection of our copyright and licenses very seriously.
If you come across any illegal copies of our works in any form on the Internet, please
provide us with the location address or website name immediately so that we can
pursue a remedy.

Please contact us at [email protected] with a link to the suspected


pirated material.

[ vii ]
Preface

We appreciate your help in protecting our authors and our ability to bring
you valuable content.

Questions
If you have a problem with any aspect of this book, you can contact us at
[email protected], and we will do our best to address the problem.

[ viii ]
GUI Basics – Building an
Interface
Kivy is a free, open source Python library that allows for quick and easy
development of highly interactive multiplatform applications. Kivy's execution
speed is comparable to the native mobile alternative, Java for Android or Objective
C for iOS. Moreover, Kivy has the huge advantage of being able to run on multiple
platforms, just as HTML5 does; in which case, Kivy performs better because it
doesn't rely on a heavy browser, and many of its components are implemented
in C using the Cython library in such a way that most of the graphics processing
runs directly in the GPU. Kivy strikes a great balance between performance and
portability across various hardware and software environments. Kivy emerges with
a simple but ambitious goal in mind:

"… same code for every platform, at least what we use every day: Linux/Windows/
Mac OS X/Android/iOS"

Mathieu Virbel (http://txzone.net/2011/01/kivy-next-pymt-on-android-


step-1-done/)

This support has being extended to Raspberry Pi, thanks to a crowd funding
campaign started by Mathieu Virbel, the creator of Kivy. Kivy was introduced
for the first time at EuroPython 2011 as a Python framework designed for creating
natural user interfaces. Since then, it has grown bigger and attracted an enthusiastic
community.

[1]
GUI Basics – Building an Interface

This book requires some knowledge of Python, and very basic terminal skills, but
also it requires some understanding of Object-Oriented Programming (OOP)
concepts. In particular, it is assumed that you understand the concept of inheritance
and the difference between instances and classes. Refer to the following table to
review some of these concepts:

Concept URL
OOP http://en.wikipedia.org/wiki/Object-oriented_
programming
Inheritance http://en.wikipedia.org/wiki/Inheritance_(object-
oriented_programming)
Instance http://en.wikipedia.org/wiki/Instance_(computer_
science)
Class http://en.wikipedia.org/wiki/Class_(computer_
science)

Before we start, you will need to install Kivy. The installation process for all different
platforms is documented and regularly updated on the Kivy website: http://kivy.
org/docs/installation/installation.html.

All code in this book has been tested with Kivy 1.9.0 and both
Python 2.7 and Python 3.4 (but 3.3 should work fine as well).
Note that packaging support for mobile is not yet complete
for Python 3.3+. For now, if we want to create mobile apps for
Android or iOS, we should use Python 2.7. If you want to know
your Python version, you can execute python -V in a terminal
to check your installed Python version.

In this chapter, we start by creating user interfaces using one of Kivy's most fun
and powerful components – the Kivy language (.kv). The Kivy Language separates
logic from presentation in order to keep an easy and intuitive code; it also links
components at an interface level. In future chapters, you will also learn how to build
and modify interfaces dynamically using pure Python code and Kivy as a library.

[2]
Chapter 1

Here is a list of all the skills that you are about to learn:

• Launching a Kivy application


• Using the Kivy language
• Instantiating and personalizing widgets (GUI components) through basic
properties and variables
• Differentiating between fixed, proportional, absolute, and relative
coordinates
• Creating responsive GUIs through layouts
• Modularizing code in different files

This chapter covers all the basics for building a Graphical User Interface (GUI)
in Kivy. First, we will learn techniques to run an application and how to use and
integrate widgets. After that, we will introduce the main project of the book, the
Comic Creator, and program the main structure of the GUI that we will continue
using in the following two chapters. At the end of this chapter, you will be able to
build a GUI starting from a pencil and paper sketch, and also learn some techniques
to make the GUI responsive to the size of the window.

Basic interface – Hello World!


Let's put our hands on our first code.

Downloading the example code


You can download the example code files for all Packt books you
have purchased from your account at http://www.packtpub.com.
If you purchased this book elsewhere, you can visit http://www.
packtpub.com/support and register to have the files e-mailed
directly to you.

[3]
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
GUI Basics – Building an Interface

The following is a Hello World program:


1. # File name: hello.py
2. import kivy
3. kivy.require('1.9.0')
4.
5. from kivy.app import App
6. from kivy.uix.button import Label
7.
8. class HelloApp(App):
9. def build(self):
10. return Label(text='Hello World!')
11.
12. if __name__=="__main__":
13. HelloApp().run()

This is merely Python code. Launching a Kivy program is not any


different from launching any other Python application.

In order to run the code, you open a terminal (line of commands or console)
and specify the following command in Windows or Linux: python hello.py
--size=150x100 (--size is a parameter to specify the screen size).

On a Mac, you must type in kivy instead of python after installing Kivy.app in /
Applications. Lines 2 and 3 verify that we have the appropriate version of Kivy
installed on our computer.

If you try to launch our application with an older Kivy version


(say 1.8.0) than the specified version, then line 3 will raise an
Exception error. This Exception is not raised if we have a
more recent version.

We omit the call to kivy.require in most of the examples in the book, but you will
find it in the code that you download online (https://www.packtpub.com/), and its
use is strongly encouraged in real-life projects. The program uses two classes from
the Kivy library (lines 5 and 6) – App and Label. The class App is the starting point of
any Kivy application. Consider App as the empty window where we will add other
Kivy components.

[4]
Chapter 1

We use the App class through inheritance; the App class becomes the base class of the
HelloApp subclass or child class (line 8). In practice, this means that the HelloApp
class has all the variables and methods of App, plus whatever we define in the body
(lines 9 and 10) of the HelloApp class. Most importantly, App is the starting point of
any Kivy application. We can see that line 13 creates an instance of HelloApp and
runs it.

Now the HelloApp class's body just overrides one of the existing App class's methods,
the build(self) method. This method has to return the window content. In our
case, a Label that holds the text Hello World! (line 10). A Label is a widget that
allows you to display some text on the screen.

A widget is a Kivy GUI component. Widgets are the minimal graphical


units that we put together in order to create user interfaces.

The following screenshot shows the resulting screen after executing the
hello.py code:

So, is Kivy just another library for Python? Well, yes. But as part of the library, Kivy
offers its own language in order to separate the logic from the presentation and to
link elements of the interface. Moreover, remember that this library will allow you to
port your applications to many platforms.

Let's start to explore the Kivy language. We will separate the previous Python code
into two files, one for the presentation (interface), and another for the logic. The first
file includes the Python lines:
14. # File name: hello2.py
15. from kivy.app import App
16. from kivy.uix.button import Label
17.
18. class Hello2App(App):

[5]
GUI Basics – Building an Interface

19. def build(self):


20. return Label()
21.
22. if __name__=="__main__":
23. Hello2App().run()

The hello2.py code is very similar to hello.py. The difference is that the method
build(self) doesn't have the Hello World! message. Instead, the message has been
moved to the text property in the Kivy language file (hello2.kv).

A property is an attribute that can be used to change the content,


appearance, or behavior of a widget.

The following is the code (rules) of hello2.kv, which shows how we modify the
Label content with the text property (line 27):

24. # File name: hello2.kv


25. #:kivy 1.9.0
26. <Label>:
27. text: 'Hello World!'

You might wonder how Python or Kivy knows that these two files (hello2.py and
hello2.kv) are related. This tends to be confusing at the beginning. The key is in the
name of the subclass of App, which in this case is HelloApp.

The beginning part of the App class's subclass name must coincide
with the name of the Kivy file. For example, if the definition of the
class is class FooApp(App), then the name of the file has to be
foo.kv and in the same directory of the main file (the one that
executes the run() method of App).

Once that consideration is included, this example can be run in the same way we
ran the previous one. We just need to be sure we are calling the main file – python
hello2.py -–size=150x100.

This is our first contact with the Kivy language, so we should have an in-depth
look at it. Line 25 (hello2.kv) tells Python the minimal version of Kivy that should
be used. It does the same thing as the previous lines 2 and 3 do in hello.py. The
instructions that start with #: in the header of a Kivy language are called directives.
We will also be omitting the version directive throughout the rest of this book, but
remember to include it in your own projects.

[6]
Chapter 1

The <Label>: rule (line 26) indicates that we are going to modify the Label class.

The Kivy language is expressed as a sequence of rules. A rule is a piece


of code that defines the content, behavior, and appearance of a Kivy
widget class. A rule always starts with a widget class name in angle
brackets followed by a colon, like this, <Widget Class>:

Inside the rule, we set the text property with 'Hello World!' (line 27). The code
in this section will generate the same output screen as before. In general, everything
in Kivy can be done using pure Python and importing the necessary classes from
the Kivy library, as we did in the first example (hello.py). However, there are
many advantages of using the Kivy language and therefore this book explains all
the presentation programming in the Kivy language, unless we need to add
dynamic components, in which case using Kivy as a traditional Python library is
more appropriate.

If you are an experienced programmer, you might have worried that modifying
the Label class affects all the instances we could potentially create from Label,
and therefore they will all contain the same Hello World text. That is true, and
we are going to study a better approach to doing this in the following section.

Basic widgets – labels and buttons


In the last section, we used the Label class, which is one of the multiple widgets that
Kivy provides. You can think of widgets as interface blocks that we use to set up a
GUI. Kivy has a complete set of widgets – buttons, labels, checkboxes, dropdowns,
and many more. You can find them all in the API of Kivy under the package kivy.
uix (http://kivy.org/docs/api-kivy.html).

We are going to learn the basics of how to create our own personalized widget
without affecting the default configuration of Kivy widgets. In order to do that,
we will use inheritance to create the MyWidget class in the widgets.py file:
28.# File name: widgets.py
29. from kivy.app import App
30. from kivy.uix.widget import Widget
31.
32. class MyWidget(Widget):
33. pass
34.
35. class WidgetsApp(App):

[7]
GUI Basics – Building an Interface

36. def build(self):


37. return MyWidget()
38.
39. if __name__=="__main__":
40. WidgetsApp().run()

In line 32, we inherit from the base class Widget and create the subclass MyWidget.
It is a general practice to create your own Widget for your applications instead of
using the Kivy classes directly, because we want to avoid applying our changes to
all future instances of the widget Kivy class. In the case of our previous example
(hello2.kv), modifying the Label class (line 26) would affect all of its future
instances. In line 37, we instantiated MyWidget instead of Label directly (as we did
in hello2.py), so we can now distinguish between our widget (MyWidget) and the
Kivy widget (Widget). The rest of the code is analogous to what we covered before.

The following is the corresponding Kivy language code (widgets.kv):


41. # File name: widgets.kv
42. <MyWidget>:
43. Button:
44. text: 'Hello'
45. font_size: 32
46. color: .8,.9,0,1
47. pos: 0, 100
48. size: 100, 50
49. Button:
50. text: 'World!'
51. font_size: 32
52. color: .8,.9,0,1
53. pos: 100,0
54. size: 100, 50

Note that now we are using buttons instead of labels. Most of the basic widgets
in Kivy work in similar ways. In fact, Button is just a subclass of Label that
incorporates more properties such as background color.

Compare the notation of line 26 (<Label>:) in hello2.kv with line 43 (Button:) of


the preceding code (widgets.kv). We used the rule class notation (<Class>:) for the
Label (and MyWidget) class, but a different notation (Instance:) for Button. In this
way, we defined that MyWidget has two instances of Button (line 43 and 49).

[8]
Random documents with unrelated
content Scribd suggests to you:
»Voi, veli Jegor, tyttö annettiin isä Stefanin käskystä hakea
luostariin, mutta kun noutajat tulivat hänen kanssaan veneellä alas
jokea, kaasi tyttö tuossa koskessa veneen ja kaikki muut hukkuivat
paitsi yksi veli!»

»Onko se totta?»

»Totta on! Etsimme täällä juuri hukkuneita, mutta emme pimeässä


löydä mitään», koetti munkki selittää viattomana ja ristinmerkkejä
tehden.

»Onko Stefan kuollut?»

»Kyllä, pyhä isä Stefan on kuollut», huokasi munkki.

Ja nyt Jorma kirosi, kirosi hartaammin kuin koskaan ennen ja


huusi:

»Pyhäkö? Pyhiä te pirut olette vielä sittenkin, vaikka tapoitte


Marjatan! Mutta nyt ette enää syljeskelekään minun silmilleni, senkin
kyyt!»

Ja Jorma tarttui molemmin käsin kiinni munkkiin, nosti hänet


maasta ylös päänsä päälle, pidellen siellä miestä hetkisen ilmassa
suorin käsin, ja paiskasi sen sitten päälleen alas rantakivikkoon. Hän
katseli hetkisen, liikkuisiko se vielä, mutta kun elonmerkkejä ei
näkynyt, läksi hän eteenpäin.

»Jo toinen mies tänä yönä, ja pian tulee vielä lisää!»,— sanoi
Jorma itselleen, työnsi munkin veneen virran mukaan ja hyppäsi
siihen, lähtien soutamaan Kuhasaloa kohti.
Ja mitä Jorma oli sinä yönä tehnyt Kuhasalossa, siitä nähtiin jäljet
vasta muutamien päivien kuluttua, kun karjalaisetkin menivät sinne
tekemään viimeistä tiliään. Heidän edellään oli jo ehtinyt kuolema
kulkea, sillä luostarin pihalla oli pari ruumista, eteisessä oli neljä,
vieläpä pari itse kirkossakin. Ketään eläviä ei ollut enää näkyvillä, ja
karjalaiset uskoivat jonkun luostarin omista pahoista hengistä
tehneen sen kaiken. Kirkossakin oli kaikki särjetty, ikonostaasi oli
yhtenä lautakasana lattialla ja kaikki kuvat murskana. Mutta kukaan
ei tiennyt sitä, että se sama pahahenki, joka tuon kaiken oli tehnyt,
oli itse aikoinaan toivonut pääsevänsä koko luostarin kohottajaksi ja
suurentamaksi, mutta olikin nyt tullut sen hävittäjäksi. Tämä mies oli
raivonnut luostarissa ja surmannut jokaisen, joka sattui olemaan
silloin sisällä. Ja ne, jotka olivat naaraamassa hukkuneita tovereitaan
koskesta, kiittivät hyvää onneaan, kun pelastuivat Jorman käsistä ja
pääsivät ehyin nahoin pakenemaan Valamoon. Vaikka eiväthän
sentään kaikki päässeet Valamoonkaan, sillä pitkien aikojen kuluttua
löysivät ihmiset vielä kosken läheltä kolme ruumista ja niiden viereltä
verisen seipään, jolla miesten päät oli halkaistu.

Tarina Kuhasalon luostarista oli nyt loppunut, mutta vielä kauan


jälkeenpäinkin tuntui siltä kuin Ontron poika olisi liikkunut sen
autioissa suojissa etsien jotakin.
IX.

Murhayön jälkeisenä aamuna Jorma heräsi lopen uupuneena ja


masentuneena lähellä Jaamankangasta. Hän ei nähtävästi ollut
jaksanut kulkea takaisin palopaikalle, vaan oli kaatunut kesken
matkan. Kun hän nyt katseli ympärilleen, huomasi hän nukkuessaan
nojanneensa päätään korkeaan hiekkakasaan, minkä hän tunsi
umpeenluoduksi haudaksi. Se oli hänen äitinsä hauta, jonka he
yhdessä Marjatan kanssa olivat vasta toissapäivänä peittäneet.

»Tännekös minä tulinkin!» sanoi Jorma silittäen multaa kädellään.

Mennyt oli jo äiti, mennyt oli Marjatta ja menneet olivat kaikki


kultaiset toiveetkin. Äidin hauta oli tässä hänen päänsä alla,
Marjatan hauta oli siellä, missä levoton koski kuohutti Pielisjoen vesiä
Pyhäselkään, ja menneitten toiveitten vielä avonaista hautaa osoitti
jokainen puu, paloraunio ja — luostari.

Mutta se oli luotava umpeen!

»Ei, en aio tulla vielä luoksenne, äiti ja Marjatta! Kuolen kyllä


maailmasta, mutta itselleni minä elän!» — huusi Jorma, hyppäsi
pystyyn ja läksi menemään kohti palopaikkaa.
»Nyt olen täyttänyt sen, mitä ihmiset tahtoivat ja toivoivat. Mutta
vaikka olenkin täyttänyt velvollisuuteni heitä kohtaan, en ole vielä
päässyt siihen, mihin minä itse olen tahtonut. Mikä on minun
päämääräni? — Rauha. — Ja miten tuon rauhani saavutan? —
Voittamalla vereni!»

Ja aivankuin etsien menneen onnensa rippeitä hän meni vielä


heikosti savuavien kekäleiden keskelle penkoen siellä tuhkaa. Kun
hän löysi jonkin raudankappaleen tai muun esineen, vei hän sen pois
ikäänkuin se olisi ollut suunnattoman suuri omaisuus. Sitten hän
meni rinteeseen, missä koivujen lehdet olivat polulla menneet
kasaan kuin jotakin raskasta esinettä maata pitkin vedettäessä.
Sieltä Jorma löysi Marjatan liinan ja hopeisen ristin katkenneine
ketjuineen. Ristin hän heitti koivikon yli lampeen, mutta liinan vei
toisten tavaroittensa joukkoon. Nyt hän meni palosta säästyneeseen
aittaan, kantoi sieltä ulos kaikki jäljelle jääneet tavarat ja latoi ne
nurmikolle.

»Mihin minä nyt lähden? Koitereelle vai Olavinlinnaanko? — Ei, en


tahdo nähdä enää ihmisiä, vaan menen jonnekin, missä saan olla
aivan yksin.»

Jorma antoi katseensa kulkea yli Höytiäisen laajan selän ja näki


sen keskellä valkorantaisen Joutsenisen yhtä houkuttelevana ja
kutsuvana kuin ennenkin.

»Tuonne minä menen!»

Ladottuaan kaiken tavaransa veneeseensä silmäili hän kaikkea


mennyttä viimeisen kerran ja ajatteli:
»Jos Marjatta vielä eläisi, niin juuri tällä hetkellä ottaisimme hänen
kanssaan hyvästit tältä samalta paikalta lähtiessämme yhteiselle
matkallemme. Mutta nyt minä saankin mennä yksin! — Te
vääräuskoiset, jotka tuhositte elämän Marjatalta, minulta ja
itseltännekin, olette kaikki nyt yhtä mykkiä kuin päämiehenne ja liian
myöhään etsitte nyt sitä rauhaa, jota teille ei tulla koskaan
antamaan! — Mutta minä saan kenties senkin vielä!»

Nyt työnsi Jorma haapionsa vesille, hyppäsi siihen ja aloitti


matkansa uutta elämää kohti.

Hän meni Joutsenisen saareen, yksinäisyyteen, eikä aikonut palata


maailmaan enää koskaan takaisin. — Ja sinne mäen päälle, kuusien
suojaan kohosi maja pieni kuin karhun pesä. Se oli niin matala, että
seisoessa kosketti pää kattoon ja niin pieni, että nukkuessa ei
tahtonut sopia suoraksi sen sisään. Seinistä tuli niin vahvat, ettei
pahinkaan pakkanen olisi voinut tunkeutua niiden läpi, sillä ne oli
tehty paksuista hirsistä kaksinkertaisiksi ja tilkitty tiukkaan savella ja
sammalilla. Yhdessä nurkassa oli liedentapainen, joka lämmitti
majan. Ja pieni läheinen ei kyennyt kovallakaan pakkasella
laskemaan kylmää sisälle. Lopuksi Jorma kantoi vielä liuskakiviä
vuoteen pohjaksi ja päällysti sen paksulla kuusenhavu- ja
sammalkerroksella.

Kun se kaikki oli valmista, otti Jorma kirveensä ja meni raivaamaan


itselleen polkua majasta järvenrantaan ja asetti rinteen jyrkimpiin
paikkoihin kiviä portaiksi. Vähän matkan päässä siitä löytyi sopiva
valkama haapiolle, jossa se saattoi olla pensaiden sisällä piilossa
järvellä soutelevien ihmisten katseilta. Ja saaren keskellä oli pieni,
kirkasvesinen lammikko, jonka rannalla Jorma liuvitteli usein
päiväkaudet viskelemällä pieniä kiviä tai käpyjä sen veteen ja
katsellen, kuinka laineet, suurina renkaina tulivat rantaan.

Ihmiset eivät erakkoa häirinneet. — Kaikkein lähimpänä oli maa


muutamien virstojen päässä idässä. Sieltä näkyivätkin Pyytivaaran
koivikkorinteet ja Kontiolahden ensimmäiset talot. — Pohjoisessa oli
aava selkä. — Lännessä siintivät sinisinä korkeat Kunnasniemen
rannat, ja sieltäkin näkyi metsän keskeltä jokin vaaleampi peltotilkku.
— Etelässä oli Jaamankangas ja Kontioniemi, jonka petäjikön takaa
nousi savu suuresta hovista. Korkeat Höytiäisen laineet tulivat
jostakin Kinahmosta päin ja kierivät valkeana nauhana toisiaan ajaen
pitkin rantahietikkoa. Ja jokainen niistä piirsi hiekkaan omituisia
koukerolta ja viivoja, jotakin käsittämätöntä kirjoitusta, jota erakko ei
oppinut lukemaan. Oman elämänsä tarinoita kai nekin sinne
kertoilivat. Mutta kun yksi oli tuskin saanut viivansa valmiiksi, tuli jo
toinen laine ja kolmaskin, ja niin olivat ensimmäisen merkitsemät
viivat kadonneet näkymättömiin ja tilalle olivat tulleet uudet, entistä
kauniimmat. Ja ne kaikki olivat uusia särkyviä elämäntarinoita, jotka
päättyivät sinne rantahietikolle.

Ja tämä kaikki oli erakon pientä ja pyhää valtakuntaa, jota kaikkea


hallitsi erakko Jorma, kuunnellen jokaisen alamaisensa, puun,
pensaan ja laineen puhetta, ymmärtäen sen hyvin, vaikkei ollutkaan
kieltä oppinut. Ja nuo kaikki eivät olleet enää hänelle kuolleita ja
tunnottomia, vaan eläviä olentoja, joista jokainen oli paljon parempi
kuin yksikään ihminen, sillä eiväthän ne tehneet pahaa kenellekään.
Ne olivat hyviä haltioita, joiden kaltaiseksi Jormakin tahtoi päästä.

»Kunpa voisin tulla yhtä hyväksi kuin tuo suuri kuusi tuossa»,
ajatteli hän, »kunpa voisin seisoa sen tavoin kesät ja talvet, nähdä
ympärilläni kaiken kauneuden, tuntematta ikävää mihinkään. Ja kun
aikani olisi täysi, kuivuisin sitten ja kaatuisin tuohon rinteelle,
tuntematta mitään tuskaa jättäessäni elämän!»

Jormasta tuli nyt ympäristönsä hyvä ystävä ja suojelija,


tahtoessaan säilyttää saarensa mahdollisimman koskemattomana.
Mitäpä häneen kuului, jos manteren puolella kaatuikin jokin kaunis
koivikko ja sen sijalle ilmestyi seuraavana kesänä vihreä pelto,
kunhan vain ihmiset eivät tunkeutuneet repimään hänen saartaan.
Siellä manterella he saivat tehdä Jorman puolesta pahaa mielin
määrin luonnolle ja toisilleen, kun Joutseninen vain säilyi rauhassa
hyvine haltioineen.

Kun ihminen keskustelee vuosikausia vain oman itsensä ja luonnon


kanssa niinkuin Jorma oli tehnyt, ei ole ihme, jos hän näkee jo
jokaisessa kivessä ja puussa elämän ja hengen. Olihan hänkin
munkkina ollessaan pitänyt haltioitakin vain kastamattomain
kuviteltuina jumalina, mutta nyt hän näki niitä jo itsekin kaikkialla,
varsinkin lammikon rannalta. Hän oppi käsittämään, miksi yksinäisillä
saloilta ja metsien sydämessä asuvat karjalaiset eivät voineet uskoa
novgorodilaisten jumalaiseen, vaan pitivät omaa luontoaan paljon
sitäkin parempana. Ei hänestä enää sekään ollut mikään ihme ja
mahdottomuus, että ihminen saattoi kuunnella haltioiden puheita ja
ottaa vaarin heidän neuvoistaan.

Niiden suosioon Jormakin tahtoi nyt päästä. Hän hiipi puulta


puulle, voidakseen edes jollakin tavoin nähdä ne omin silmin ja
päästä perille niiden monista pitämyksistä. Mutta aina ehtivät haltiat
huomata hänet ajoissa ja paeta piiloon. Se hiukan harmitti Jormaa,
hän yritti uudelleen, mutta yhtä valppaita ne olivat joka kerta eivätkä
laskeneet kastettua miestä lähelleen.
»Ne pelkäävät minua, mutta minäpä koetan ne houkutella majani
lähettyville.»

Hän vei kalakeittoa majan takana olevan suuren kuusen juurelle.


Alussa haltiat eivät huolineet sitäkään, mutta kun erakko ampui
riistaa ja uhrasi kaikkein verisimmät palat, alkoi hän päästä jo
tuloksiinkin vaivoistaan. Kun Jorma joka aamu meni katsomaan
uhrikuuselle, oli parhaat palat lihasta syöty pois.

Siitä hetkestä lähtien tuli Jorman tärkeimmäksi tehtäväksi ja


suurimmaksi huviksi haltioiden pidätteleminen majan lähettyvillä.
Lopulta hän jo loikoessaan iltaisin kivivuoteellaan saattoi selvään
kuulla joko uhrikuusen juurelta tai majan sisältökin lieden takaa
selvää haltioiden liikkumista. Silloin erakko hykerteli käsiään suu
leveässä hymyssä, kun hänen entinen kasteensa oli jo annettu
anteeksi.

Varmaa oli sekin, että haltiat toivat ahkeralle palvelijalleen vain


onnea ja hyötyä, jos olivat suosiollisia. Sillä muutamien vuosien
kuluttua huomasi Jormakin elämänsä paljon entistä paremmaksi.
Riistaa oli liiaksikin. Sitä varten piti tehdä jo pieni aittakin, missä hän
voi säilyttää talven suuret varastot. Nyt jo uskoi entinen munkki
täydellisesti sen, ettei haltioiden palveleminen ollut mitään
pakanuutta, koskapa ne muistivat häntäkin, jota maailmassa ei ollut
kukaan muu ajatellut. Ne muistivat häntä jo paljon enemmän kuin
novgorodilaisten Jumala milloinkaan.

Näin oli luostarin kasvatista, erakko Jormasta, tullut metsässä


asuessaan haltioiden ja vanhan suomalaisen uskonnon vakava
kannattaja!
Ja mikä ihmeellisintä: Kun Jorma vain aina muisti haltioitaan, meni
niiden suosio jo niin pitkälle, että hän eräältä kalastusmatkalta
palattuaan löysi majansa pöydältä kaksi aivan oikeata leipää, pienen
säkillisen jauhoja, vakan voita ja pussillisen suoloja. Sellaisia antimia
hän ei ollut nähnyt kokonaiseen vuosikymmeneen saaressaan. Ja
mistäpäs muualta erakko parka olisi voinut toivoa sellaisia lahjoja
kuin saaren omilta haltioilta, sillä eiväthän ihmiset joutaneet niin
paljon ajattelemaan toisiaan, eivätkä sitä tahtoneetkaan! Hetkistä
myöhemmin tuli vielä toinenkin samanlainen lahja, ja kun hän
syksyllä oli usein kalamatkoillaan, oli se kaikki jo niin tavallista, että
pieni aitta tuli aivan kukkuroilleen syötävää talven varalle.

»Tällaista on elämäni nyt, ja olen tyytyväisempi ja onnellisempi


kuin koskaan ennen. Alussa pidin kaikkea tätä raskaana, mutta nyt
uskon, ettei tuolla manteren puolella ole yhtään niin tyytyväistä
ihmistä kuin minä. Miksei jokainen muukin mene yksinäisyyteen ja
koeta löytää onneaan sieltä!»

Jorma meni ja leikkasi oman viisikantansa kuvan uhrikuusen


kylkeen, uskoen onnensa tulevan siitä vain kaksinkertaiseksi.

»Toivoin kerran pääseväni samanlaiseksi kuin tämä kuusi. En ole


vielä päässyt niin pitkälle, mutta luulen voivani oppia elämään yhtä
huolettomana, vahvana ja hyvänä. Joutuisinhan kyllä jo
kuolemaankin, mutta kun kärsimykseni ovat vielä kesken, niin
odotanpahan. Sitten, kun tuo puu joskus vanhuuttaan kaatuu, on se
oleva merkki siitä, että Ontron poika on sovittanut kaikki entiset
erehdyksensä ja on silloin tullut elämänsä määrään. Silloin, samalla
kertaa tahdon mennä tuon kuusen mukana. Juuri silloin, muttei
ennen!»
Jorma näki, että kuusi oli hiukan kallellaan majaan päin. Kun tuo
korkea ja paksu puu kaatuisi, menisi se suoraan majan päälle ja
särkisi sen varmasti. Silloinhan hänkin, Jorma, ollessaan sisällä
majassa, hautautuisi ainiaaksi puun alle.

»Nyt siis tiedän, milloin minun aikani tulee täyteen!»

Kerran, eräänä talviyönä, huomasi Jorma sieltä, missä


Kontioniemen suuren hovin piti olla, korkeiden tulenliekkien
nousevan ylös, saaden kuin revontulen kajastuksen taivaalle. Se oli
tulipalo, jonka syytä Jorma koetti arvailla. Ja sinä samana yönä kuuli
hän saareensa ensi kerran ihmisääniäkin, jotka tulivat kuin
hätähuutoina, ja sellaisiahan ne olivatkin. Mutta erakko, joka tahtoi
olla välinpitämätön kaikesta ulkomaailmasta, pidättyi lähtemästä
avuksi, sillä mitäs ihmiset häneen kuuluivat. Nyt katseli hän vain
kylmänä tuota paloa ja huomasi hetken kuluttua vaarojen takaa
syttyvän toisen samanlaisen ja heti kolmannenkin. Siis vainolainen,
niinkuin Jorma oli ajatellutkin!

Sellaisia juuri ihmiset olivat! Sen, mitä toiset olivat saaneet


pystyyn vuosikausia kestävällä raskaalla työllä, hävittivät toiset
ryöstön- ja kostonhalussaan muutamassa hetkessä.

»Polttakoot ja tappakoot niin paljon kuin kerkiävät, kunhan vain


sovittavat kaiken lopuksi!» — ajatteli erakko ja astui majaansa.
»Minä olen saanut itselleni tällaisen enkä tarvitse kenenkään toisen
omaa. Jokaisella toisellakin on samat mahdollisuudet, tarvitsematta
ryöstää ketään.»

Hän heittäytyi sammalilleen, veti nahkaiset päälleen ja nukahti


niinkuin se, joka ei pyydä eikä toivo keneltäkään muulta mitään, jos
ei kenellekään annakaan, vaan vaatii kaiken itseltään. Sillä tavoin
nukkuu vain se, joka tietää, että huominen päivä tuo tullessaan yhtä
paljon kuin eilinenkin.

Vähitellen alkoi erakkoon tarttua se usko, että ihmiset, joiden talot


ja pellot hän näki Kontiolahden puolelta, olivat sentään siedettäviä.
Hän uskoi heistä tuota vain sen takia, kun he eivät koskaan
hätyytelleet Jormaa saarellaan eivätkä pyrkineet valloittelemaan
hänen kalavesiään ja lintupaikkojaan, vaan antoivat hänen elää
huolettomana kuin parhain itsevaltias. Senvuoksi hän alkoi
jännityksellä seurata peltotilkkujen laajenemista ja toivoi niistä
syksyllä lähtevän runsaan sadon, vaikka se tulisikin ihmisille.

Oliko hän alkanut kaivata maailmaan, kun oli jo oppinut pitämään


ihmisiä hyvinä?

Ei, sitä hän ei tehnyt! Sillä jos yksikään ihminen olisi tullut
valloittelemaan saareen tai häiritsemään rauhaa, olisi hän heti
pitänyt niitä vihollisinaan.

»Olen tehnyt heidän elämänsä paljon entistään väljemmäksi, kun


vapautin heidät oman rauhani hinnalla luostarin painajaisesta. Eipä
ennen saanut täälläkään olla kellään karjalaisella tuollaisia peltoja;
mutta nyt, kun luostari meni ja munkit sen mukana, on tuo maa nyt
heidän omaansa eikä heidän tarvitse maksaa veroja. Koko Pohjois-
Karjala vaurastuu. Mutta kenen kustannuksella? — Minun, sillä
minähän sen tein, vaikka maksoinkin siitä kalliisti. Aikoinaan pidettiin
Ontron poikaa oman isänsä työn tuhoojana, mutta huomaanpa nyt,
että hänkin on tehnyt jotakin heimolleen. Ja parempihan on, että
minä, jolla on paljon enemmän velvollisuuksia kuin muilla ihmisillä,
kannan murhaajan nimeä. Noilla ihmisillä tuolla Kontiolahdella on
niin paljon muutakin ajateltavaa ja kärsimistä, etteivät he enää
kaiken sen lisäksi tarvitse omantunnon tuskia kestettäväkseen. Olen
siis parantanut toisten elämää sillä, että olen huonontanut omaani.
Mutta silloinhan ei ainakaan Ontron poika ole enää velkaa ihmisille,
vaan ihmiset hänelle.»

Kului taas muutamia vuosia. Niiden mennessä erakko oppi


kärsimään hiukan ihmisiäkin. — Saarihan ei ollut kovin kaukana
manteresta, joten silloin tällöin saattoi sinne eksyä joku kalamies.
Joka kerta Jorma pakeni johonkin koloon tarkkaamaan, mitä nuo
maailmasta tulleet, kutsumattomat vieraat tahtoisivat hänen
valtakunnastaan. Mutta vieraat saattoivat kyllä löytää majan, katsella
ja ihmetellä sitä hetkisen ulkoa ja sisältä ja palata viimein omalle
puolelleen järvenselkää, ottamatta lähtiessään edes tulusrautojakaan
majan pankolta. Silloin palasi Jorma piilostaan ja ajatteli:

»Rehellisiä he ainakin ovat, siis he saavat käydä täällä. Mutta kun


ensimmäinen rauhanrikkominen tapahtuu, silloin minä ammun
nuolen heidän kurkkuunsa tai houkuttelen haltiani heidän
kimppuunsa!»

Ja joka kerta, kun selälle ilmestyi vene, tarkkasi Jorma, menisikö


se saaren ohi vai tulisiko rantaan. Ja muutamia kertoja näytti jo siltä
kuin erakkoa olisi saaresta etsittykin, mutta tämä varoi kyllä
tulemasta löydetyksi.

»Minua ei heidän tarvitse nähdä, sillä minulla ei ole enää mitään


maksettavaa heille. Ja jos näyttäytyisinkin heille, niin silloin en
olisikaan enää erakko, vaan olisin velvollinen tekemään jotakin
heidän hyväkseen tai he minun. Ja heiltä ei minulle ole kuitenkaan
tulossa mitään parannusta elämääni.»

Mahdollisesti manteren puolella jo tiedettiin jonkun asuvan


saaressa, koskapa vierailut viimein lakkasivat Jorman suureksi iloksi.
Epäilivätkö ihmiset saaressa asuvan jonkin hyvän haltian tai suuren
roiston, sitä ei erakko osannut arvata. Mutta joka tapauksessa
alettiin saarta karttaa, kenties pelätäkin.

Ja silloin olivat haltiatkin taas entistään suosiollisempia. Entistään


useammin ilmestyivät suola- ja jauhosäkit majan pöydälle erakon
poissa ollessa.

»Hyvä on, etteivät ihmiset käy. Haltiatkin ovat siitä mielissään ja


minä itse saan olla rauhassa.»

Mutta miksi sitten hänen haltiansa oikein vihasivat noita


karjalaisia, jotka itsekin olivat haltioiden palvelijoita? Vai olivatko
novgorodilaisten opit saaneet sittenkin voiton kaikesta? Jos niin oli,
niin silloin olivat asiat huonosti Ilomantsin pokostalla! No, olipa
kuinka tahansa, hän itse ei kuitenkaan uskonut enää olemattomaan
Jumalaan, joka oli tuottanut vain onnettomuutta kaikille
ristinpalvelijoille. Jos tuo Jumala olisi ollut olemassa, niin miksei hän
mennyt omiensa puolelle ja suojellut heitä aina. Jos Jormakin vain
olisi ollut uskomatta sellaisiin jumaliin ja kantanut aina kaulassaan
viisikantaa, niin hänelle ja Marjatalle ei olisi koskaan tapahtunut
mitään pahaa.

Sillä tavoin, mäen rinteellä istuessaan ja Kontiolahdelle


katsellessaan erakko koetti ratkaista elämänsä tarkoitusta, odotti
toivomaansa rauhaa ja muisteli menneitä aikoja. Ja hän luuli vielä
nytkin elävänsä yksin ja salassa maailmalta eikä huomannut enää
elämää ympärillään. Mutta ihmiset, jotka ajoivat talvitietä myöten
jään poikki, saattoivat nähdä hänet joko kantamassa vettä polkua
ylös rannasta tai kompuroimassa suksineen paksussa lumessa.
Manteren puolelle näkyi aivan selvästi, milloin savua nousi erakon
majan lakeisesta. Kesälläkin saattoi kalamiehiä liikkua saaressa aivan
Jorman lähettyvillä, tämän tietämättä siitä mitään.

Kun vuosikymmenien ajan odottaa rauhaa niin hartaasti kuin


Jorma eikä näe elämässään enää mitään muuta kuin yhtä ja samaa
tasaista, väsyy siihen ja uskoo itsekin jo siihen, mihin on pyrkinyt.
Niinpä jo Jormakin ajatteli:

»Kun ihmiset eivät käy enää saaressa, uskon heidän jo tyytyvän


kaikkeen, mitä olen tehnyt heidän hyväkseen. He eivät vaadi minulta
enää mitään, siksipä he jo pysyvätkin poissa. — Haltiat ovat minulle
suosiollisia, siis he ovat antaneet jo kasteeni ja muut erehdykseni
anteeksi. — Mistään uskonnoista ja jumalista en enää välitä, sillä nyt
olen jo löytänyt itselleni sen oikean. — Maailmaan en enää kaipaa,
vaikka näenkin sen tuolla edessäni. — Enkö ole jo saavuttanutkin
rauhaani? Olen, uskon saaneeni!»

Erakko iloitsi käsiään hykerrellcn, että hän oli jo tullut täydellisesti


välinpitämättömäksi kaikkeen, omaan itseensäkin nähden. Ja sekö
juuri oli merkki siitä, että ihminen oli saanut rauhansa ja oli kypsä
kuolemaan? — Niin luuli nyt Jorma.

Mutta yht'äkkiä oli erakko kuulevinaan metsiköstä selkänsä takaa


ilkeätä, selkäpiitä karmivaa pilkkanaurua. Hän kääntyi katsomaan,
kuka hänen sanoilleen nauroi, muttei nähnyt ketään. Nyt alkoi Jorma
muistaa kuulleensa saman äänen ennenkin, — se oli tapahtunut
silloin, kun hän oli turhaan etsinyt Marjattaa palopaikalta. Juuri silloin
oli kuin jokin seinä tullut hänen ja muun maailman väliin. Silloin oli
Stefanin haamu halkaistuin päin noussut tuhkasta ja nauranut tuon
saman naurun kuin nytkin! — Siis juuri Stefan! Stefan nauroi hänelle
vieläkin, vaikka olikin ollut kuolleena jo kymmeniä vuosia. — Mitähän
se vielä tuo kaikki saattoi merkitä? — Tulisiko hän vielä
kuolemastaankin piinaamaan Jormaa samalla tavoin kuin oli tehnyt
eläessään? — Eikö Stefan ollut vieläkään saanut kyllikseen?

Nyt, tuon naurun jälkeen, alkoi Jorman silmien edestä kohota


jotakin pois. Tuntui kuin usva olisi haihtunut, ja se läpinäkyvä seinä,
joka oli hänet aina erottanut kaikesta muusta, olisi lähtenyt
loittonemaan. Ja hän näki nyt kaiken aivan toisenlaisena kuin tähän
saakka, juuri sellaisena kuin munkkina ollessaankin.

Oliko hän ollut hullu ja saanut nyt järkensä takaisin?

Ehken oli, ehken ei. Joka tapauksessa hän oli nyt kuin uudestaan
maailmaan palannut ja vapautunut jostakin kuoresta, joka oli tähän
saakka ympäröinyt häntä.

Ja nyt Jorma katseli ihmeissään muuttunutta luontoa ympärillään


ja katseli itseäänkin. Tai oikeastaan ei mitään ollut muuttunut, vaan
hän itse katsoi eri silmillä. Kun hän näki kätensä, olivat ne laihat ja
vapisevat. Hän hypisteli pitkää partaansa ja tukkaansa — ne olivat
aivan lumivalkoiset. Hän siveli kasvojaan — ja tunsi niiden olevan
ryppyiset.

Nyt Jorma tunsi taas itsensä ja huomasi olevansa hyvin vanha.


X.

Siitä hetkestä lähtien, kun Stefanin nauru oli sytyttänyt uudelleen


Jorman sammuneen järjen, oli tämä tuntenut jotakin samaa, mitä
jokainen ihminen tuntee silloin, kun takatalvi tulee. Jorma oli iloinnut
saavuttamastaan keväästä, mutta tunsikin nyt valkean kääreliinan
laskeutuneen kaiken päälle. Olivatko hänen koko erakkoaikansa
kärsimykset olleet turhat ja niillekö Stefan oli nauranut?

Kun Jorma-vanhus istui kerran tavallisella paikallaan rinteellä ja


katsoi nyt taas manteren puolelle, huomasi hän sinne rakennettavan
uutta taloa. Se tuli paljon suuremmaksi kaikkia muita ja ylemmäksi
mäen päälle, jossa se seisoi kuin hovi monien mökkien keskellä.

»Tuollaisen minäkin olisin rakentanut, jos olisin mennyt Ruotsin


puolelle», ajatteli hän.

Jorma katsoi vielä tarkemmin taloa ja kirosi äkkiä ääneen


hämmästyksissään:

»Voi, hyvät haltiat, luostariako sinne rakennetaankin!»

Se rakennus, jota hän katseli, oli jo nostanut kurkihirtensä, mutta


se ei ollutkaan tavallisen hovin näköinen, vaan sinne rakennettiin
kuin jotakin kupoolin tapaistakin.

»Varmasti se ei ole hovi. Ja kaikki maahiset saavat repiä silmät


päästäni, ellei se ole luostari!»

Kauan aikaa hän seisoi siinä katsellen, tietämättä oikein, mitä olisi
pitänyt ajatella. Jorma oli luullut pelastaneensa Pohjois-Karjalan
novgorodilaisista, mutta niitä oli tietysti tullutkin sata jokaisen hänen
tappamansa tilalle, koskapa niille ei ollut tilaa enää Kuhasalossa,
vaan piti jo tänne, keskelle karjalaiskylää, rakentaa toinen
samanlainen. Olipa ollut onni, että hän oli tullut Joutseniseen ja
säästynyt siten näkemästä niitä ristinpalvelijoita eikä tarvinnut ruveta
enää uusiin veritöihin päästäkseen heistä eroon. Mutta hiipipä jo
erakkoon pelkokin:

»Jos ne koirat tulevat tänne saareen, niin mitä minä silloin teen?»

Lieköhän ollut taas entinen Jorma, joka oli noussut samalla kertaa
järjen kanssa ja pani vastaamaan:

»Jos yksikään munkki tulee tänne, niin minä tapan sen armotta!»

Nyt erakko meni hakemaan vanhan jousensa, koetellen sen kaaren


voimaa ja omia jänteitään. Kaari oli yhtä luja kuin ennenkin, mutta
miehen käsivarret vain olivat jo niin paljon huonontuneet, ettei hän
tahtonut jaksaa vetää asetta enää vireeseen.

»Enkö saa olla rauhassa täälläkään, kun jo rakentavat tsasouniaan


kuin minun kiusallani? Ja aikovatkohan ne kastaa vielä kaikki ihmiset,
minutkin? Pitääkö minunkin majani nurkassa olla pyhäinkuva ja
talikynttilä sen edessä? Kyllä ainakin karjalaiset näkyvät aikovan
taipua kasteeseen, koskapa antavat rakentaa luostareita keskelle
kyläänsä. Tai kenties heidät onkin kastettu uudelleen jo aikoja sitten,
minun tietämättäni?»

Pitäisikö hänenkin siis taipua kasteeseen, koskapa hän oli


viimeinen?

»Ei, sitä ei tule tapahtumaan, vaikka minun pitäisi tehdä


kymmenen uutta murhaa ja elää sitten viisikymmentä uutta
katumuksen vuotta erakkona!»

Mutta nyt! Nyt kuului kuin suuri kello olisi soinut! Sen ääni kuului
aivan selvästi yli veden. — Siis sittenkin luostari! — Jorma tunsi kuin
jotakin olisi revitty rikki hänen sisällään, aivan kuin vahva käsi olisi
tarttunut sydämeen, koettaen vetää sitä ulos ruumiista. Kyllä,
varmasti siellä soi kello, vaikka erakko toivoikin vain erehtyneensä.
Ja niittyjen poikki näytti kulkevan ihmisparvia tuota uutta rakennusta
kohti. Kaikki oli aivankuin Iljan ja Teofiluksen aikoihin; silloinhan
karjalaisetkin olivat saaneet käydä kuulemassa messua luostarissa,
muttei koskaan sen jälkeen. Kenties nytkin oli tullut joku uusi Ilja
karjalaisia kastamaan?

Jorma muisti, että juuri hänestähän oli pitänyt tulla Iljan seuraaja
ja työn jatkaja. Ja olihan Ilja itsekin toivonut samaa. Mutta nyt hän
olikin täällä vain erakkona ja sai tyytyä katselemaan veden yli,
kuinka ihmiset suurissa parvissa menivät sen toisen miehen luo, joka
oli saanut hänen työnsä käsiinsä. Ja pari kolme kyyneltäkin taisi jo
tipahtaa harmaalle parralle sitä ajatellessa. Mutta hän kavahti
pystyyn ja huusi:

»Houkkio, sitäkö minä itken, kun en ole tuolla luostarin


ikonostaasin edessä parhaillaan laskettelemassa valheita, joihin en
luottaisi itse eikä kukaan muukaan. Sielläkö minun pitäisi seisoa,
toivoen, että oman heimoni miehet ja pogumoltsit kumartaisivat
edessäni ja pyytäisivät tuhoa levittävää siunaustani? Ei, kyllä
sittenkin on parempi, etten ole siellä houkuttelemassa ketään
valheisiin ja pahuuteen! — Mutta sen ne saivat nyt tehdyksi
tuollakin, että kellonsoitollaan ajoivat minun haltiani piiloon, ja sitten
minä en saa niitä tulemaan enää takaisin uhrikuuselle ja majalle.»

Jorma otti jousensa ja painui metsän sisään kuin luostarin


uhallakin hakemaan jotakin riistaa haltioilleen uhrattavaksi. Häntä
hävetti, että oli joutunut surun valtaan ajatellessaan sitä, että toinen
mies seisoi hänen paikallaan tuolla luostarissa. Niin, mutta olihan se
ajatus ollut kuitenkin hänen koko lapsuuden ja nuoruuden
unelmansa ja saadakseen sen toteutumaan hän oli niin kauan
luostarissa viipynyt ja siellä kärsinyt.

Jorma kiersi metsän löytämättä mitään ja meni sitten rannalle


etsimään vesilintuja. Mutta kun hän tuli manteren puoleiseen
kärkeen, näki hän vedenrajan lähellä käärmeen uivan rantaan.

»Tuo on enne! Enpä ole vielä nähnyt käärmeitä täällä, mutta nyt
tuli jo ensimmäinen luostarin mukana!»

Jorma arveli, olisiko uskaliasta tappaa otusta, mutta koppasi sitten


seipään maasta, ja juuri, kun käärme pääsi kivelle, paiskasi hän sen
kahtia.

»Jos oletkin enne, niin muut eivät lähetä sinua sanansaattajakseen


kuin venäläiset. Ja silloin sinulla ei ole tulemista tänne!»

Käärme sai kuitenkin erakon ajatukset kuohuksiin. Ja lisäksi kaikki


riistakin näytti kadonneen. Niin, haltiat tietysti olivat paenneet ja
samalla panneet kaiken riistan metsänpeittoon!
Kun Jorma palasi tyhjin käsin takaisin majalleen ja yritti mennä
sivu kallionkielekkeen, jonka takana maja oli, seisahtui hän äkkiä ja
painautui matalaksi kallion suojaan, sillä hänen ovensa edessä seisoi
taas ihmisiä. He katselivat kuin erakkoa etsien, mutta tämä oli
hyvässä suojassa ja mietti:

»Kunpa tietäisin, tulevatko nuo hyvässä tai pahassa


tarkoituksessa! Ja jos heidän aikomuksensa eivät ole oikeita, niin
mielelläni uhraisin heistä jonkun haltioilleni.»

Mutta mitäs niillä vierailla oli käsissä? Nyt ne menivät sisään ja


viipyivät kauan. — Erakko ajatteli, että jos ne vain pistäisivät hänen
majansa tuleen, niin hänen olisi niin mainio ampua jokainen niistä
siihen majan ovelle ennenkuin ehtisivät karkaamaan. — Mutta
ihmiset tulivat ulos eivätkä näkyneet aikovan mitään pahaa.
Silmäiltyään vielä joka suunnalle menivät he rantaan ja soutivat pois.

Ja kun Jorma meni majaansa, löysi hän sen pöydältä taas leipää,
voita ja lihaa. Ja aivoissa selvisi, etteivät haltiat olleet noita
hyvyyksiä koskaan tuoneetkaan, vaan ihmiset, ne tihulaiset! Vanhus
koppasi leivät pöydältä, aikoen heittää menemään, mutta tuli
kuitenkin ajatelleeksi, ettei hyviä antimia sillä tavoin saanut viskellä,
vaikka ne olivatkin ihmisten tuomia.

Jopa alkoi Jorma miettiä, että olivatkohan haltiat hänestä


erikoisemmin välittäneetkään. Ja lienevätkö välittäneet
uhrikuusestakaan? Ja liekö olleet koko saaressakaan?

Illalla Jorma tahtoi tulla siitä vakuutetuksi, vei lihaa uhrikuuselle ja


asettui itse piiloon tarkkaamaan. Pitkät ajat hän tähysteli, mutta
mitään ei tullut. Lisäksi alkoi tuulla niin kovasti, että häntä rupesi
puistattamaan. Ja vaikka hän makasikin siinä aamuun asti, ei
näkynyt mitään muuta kuin se luostari Kontiolahdelta. Se pyrkikin
mieleen ja silmiin alituiseen. Ja sen kello tuntui soivan vielä keskellä
yötäkin. — Mutta silloin liikkui jotakin kuusen juurella! Muuan
karvainen otus repi siellä lihapalasta minkä kerkisi, mutta sehän
olikin vain näätä. Tuuli vinkui niin, että otus säikähti sitä, sieppasi
viimein lihapalan kokonaan mukaansa ja katosi. Puut näyttivät kuin
katkeavan, ja aivan varmasti soi luostarissa kello! Kukahan sitäkin lie
lämpyttänyt keskellä yötä? Kenties itse Jumala? — Erakosta tuntui
kaamealta kuunnella sen ääntä tuollaisessa kohinassa. Tuli vielä
entistään pahempi puuska, uhrikuusi ratisi ja heilui kuin
tasapainonsa menettämäisillään. Vielä toinen samanlainen henkäys,
ja nyt jo kuusen juuret irtosivat toiselta puolen maasta, sen
latvapuoli heilahti valtavassa kaaressa ilmassa, kuului korvia särkevä
räiskäys ja kuusi oli pitkällään maassa juurten törröttäessä kalliolta
ylöspäin kuin luurangon kädet.

»Niinpäs se kävi kuin sanoin, että ne kirotut munkit tulevat tänne


saareenkin jumalineen ja mahtineen! Nyt on tuo kellonläilätys
kaatanut minun uhrikuuseni!» — kiroili Jorma.

Erakosta tuntui kaikki jo niin hirveällä, että häntä peloitti olla


näkemässä enää muita ihmeitä, joita kellonsoitto mahdollisesti saisi
aikaan. Hän pujahti majaansa ja mietti, että taisivat sentään
kuusenkin voimat olla pieniä sen kellonsoittajan rinnalla! Ei ollut
sellaisia ihmeitä ennen Kuhasalossa tapahtunut. Tai jos oli
tapahtunutkin, niin tuskinpa munkki Jorma olisi niihin uskonut. Hän
ei uskonut muuhun kuin itseensä. Mutta nyt, vanhana miehenä, alkoi
sama mies huomata suurempien voimien mahdin, ja oli tainnut
tehdä siinä väärin, kun oli pitänyt Jumalaa valheena ja munkkien
metkuina.
Nyt oli siis kuusi mennyt. Pitiköhän hänen itsensäkin kuolla jo tänä
samana yönä? — Ei, hänestä tuntui siltä, ettei hänen lähtönsä aika
ollut vielä tullut. Sillä olihan majan säästyminen selvä merkki siitä,
ettei hänen tarvitsisi kuolla. Kuusen kaatuminen tarkoitti kai vain,
että haltioiden palvelemisen oli väistyttävä tieltä, kun Jumala-haltia
tulla jyristäisi uudella voimalla Karjalaan.

Senkin tuhannet ajatukset alkoivat vaivata Jormaa. Hän oli


kuulevinaan haltioiden ja pirujen tanssit ulkoa seinän takaa, joskus
harakoiden pilkkanaurua kaatuneen uhripuun oksilta, vuoroin taas
näätien ja metsän kaikkien karvaturkkien tappelua hänen
lihapalasensa päältä. Ja aina vähän ajan kuluttua erakko nousi
vuoteellaan istualleen, koettaen kuunnella, valehtelivatko korvat, vai
oliko siellä tosiaan sellainen elämä. Mutta silloin, kuunnellessa, oli
kaikki taas hiljaista, ja niin Jorma luuli erehtyneensä tai
uneksineensa.

»Kunpa tuolla uunin takana olisi edes sirkka, joka pitäisi sirinällään
minut sen verran valveilla, etten tarvitsisi kuulla tuota helvetillistä
elämää! Mutta eivätpä näy sirkatkaan kotiutuneen murhamiehen
majaan.»

Jorma kuunteli vielä hetkisen, mutta kun ulkoa kuului vain tuulen
kohina, vaipui hän takaisin kivivuoteelleen. Mutta heti, kun hän oli
vain ummistanut silmänsä ja saanut ajatukset pois nykyisyydestä,
alkoi sama melu uudestaan. Ulkoa kuului, kuinka uhrikuusi kaatui
rymisten. Se tuntui tulevan suoraan majan päälle, mutta mätkähtikin
sitten sivuun. Itse Jumala tuntui kulkevan kuin kova tuuli sivuitse,
seinätkin ratisivat ilmavirrasta ja kaukaa kuului vaskikellon kalkatus.
Siihen liittyi toinen samanlainen, kolmas, ja niiden mukana kuului
puiden hakkaaminen mäeltä. Ja kun nuo äänet katosivat, kuului
Marjatan ääni hyvin kaukaa:

»Mikset tulekaan luokseni, Jorma? Aurinko on ehtinyt jo


Joutsenisen taakse!»

Kuului kosken kohina Pielisjoen suusta, ja majan oven takaa


rusahdus kuin olisi siellä lyöty toisen pää halki. Jakkara tuntui
putoavan kolisten lattialle, ja Stefan sähähti oven raosta:

»Minä tapan sinut, koira!»

Ei, tätä ei erakko jaksanut enää kestää! Hän nousi taas istualleen,
ja samalla hetkellä hävisivät äänetkin ulkoa.

»Joko minulle tulee kuolema?» — kysyi Jorma itseltään. »Ja tällä


tavoinko pitääkin minun kuolla? Ennen kärsisin vaikka millaiset
tuskat ruumiissani, kunhan vain voisin sulkea korvani nyt! — Mutta
kaipa jokaisen murhaajan onkin kuoltava näin.»

Hän vaipui voimattomana vuoteelleen hikipisaroiden valuessa


poskelta parralle ja siitä vuodesammalille.

»Älkää antako minun kuolla tällä tavoin! Älkää lähettäkö minulle


sellaista kuolemaa kuin Stefanille! Jos minun on kuoltava, niin
antakaa sen tapahtua hiljaa ja rauhassa, olenhan jo kärsinyt
tarpeeksi paljon!»

Mutta ääni vastasi hänelle:

»Ei ole tullut vielä aikasi, Ontron poika, kärsi vain ja odota!»
»Miksi minun sitten pitää kärsiä enemmän kuin muiden ihmisten?
Miksen saa kuolla rauhassa minäkin? Päästäkää minut, vanha mies,
menemään jo rauhaani! Jumalat, haltiat, ketkä meitä ihmisiä
seurannettekin, älkää antako minun kuolla niinkuin murhaajan,
enhän teoillani ole tahtonut muuta kuin vapauttaa toiset ihmiset
orjuudesta!»

»Oman sielusi hinnallako?»

»Jos olen tehnyt väärin, niin minä kadun. Mutta sanokaa, mistä
minä löydän rauhani? Sanokaa, mikä se on, jota minun pitää
palvella!»

Nyt ei kuulunut enää vastausta. — Sielujen kansaako hän oli siis


puhunut? — Kaikki oli hyvin hiljaista, mutta vähitellen alkoi kuulua
kellonsoitto yhä selvemmin vastauksena hänen viimeiseen
kysymykseensä. Erakko kavahti pystyyn, soitto taukosi taas samalla
tavoin kuin melukin äsken.

»Tuollako, mistä tuo soitto tulee, on se, johon minun pitää


uskoa?» — voihki Jorma. »Eivätkö haltiat olekaan oikeita jumalia,
vaan se yksi ainoa, jota siellä kirkossa palvellaan? Jos niin on, niin
sinne minäkin tahdon mennä. En ole paha, vaikka olenkin murhaaja,
vaan tahdon uskoa niinkuin kaikki muutkin, kun vain tiedän, kehen
minun pitää uskoa.»

Erakko kaatui takaisin vuoteelleen. Ei hän ollut vielä kuollut,


hänenhän oli käsketty odottaa vieläkin. Mutta nuo merkilliset
kokemukset, houreitako vai pahan omantunnon tuskiako lienevät
olleet, olivat ottaneet voimat vanhalta mieheltä. Ja jos nuo olivat
houreitakin, niin olivat ne sen lähettämät, joka oli päättänyt, että
tietäjien viimeisen jälkeläisen oli kärsittävä, taivuttava ja vasta sitten
saatava anteeksiantamus.

Jorma tunsi nyt olevansa uhri, joka karjalaisten täytyi antaa,


saadakseen sillä oma elämänsä paremmaksi. Ja hän mielessään
kiittikin jo korkeinta siitä, että juuri hänet, viimeisten
heimoruhtinaitten poika, oli valittu tuoksi uhrieläimeksi. — Ja
kuinkahan monta uhria oli vielä tuleva hänen jälkeensä, ennenkuin
tässä maassa olisi kaikki hyvin? Vai oliko hän viimeisin?

Silloin tuntui kuin mahdottoman pitkä rivi miehiä olisi kulkenut


majan sivuitse. Tuntui olevan talvi ja pakkanen. Yhtaikaa kirahti
jokaisen astujan kantapää lumessa. Rivi oli pitkä, koskapa aina vain
kuului uusia askelia tulevan loppumattomiin. Ja tuon askelten äänen
lomasta kuului joskus pitkä jyrinä kuin paksu jää olisi haljennut
Kunnasniemestä Kontiolahden rantaan yli koko laajan Höytiäisen, ja
sitä täydensi merkillinen hakkaaminen jostakin kaukaa, kenties
Jaamankankaalta saakka. Ja lopuksi, kun viimeisen askelen ääni oli
hangelta kadonnut, tiesi Jorma vastauksen kysymykseensä. — Silloin
sanoikin joku:

»Näin paljon vaaditaan uhreja jälkeesi!»

Ja erakko puoleksi tajussaan, puoleksi houreissaan nosti


molemmat kädet ylös, risti ne ja sanoi huokaisten:

»Nyt, vasta nyt minä ymmärrän!»

Kun Jorma aamulla heräsi, kuuli hän kaikkein ensiksi majansa


läheltä rinteeltä puunhakkuuta. Hän luuli senkin kuuluvan vielä
viimeöisiin ihmeisiin, mutta kun hän meni katsomaan, oli siellä kaksi
miestä kaatamassa kaskea. Siis maailma oli sittenkin löytänyt tiensä
saareen ja otti sen haltuunsa. Ja vaikka erakosta tuntuikin siltä kuin
jokainen puuhun tarkoitettu kirveenisku olisi sattunut häneen
itseensä, ei hän ollut enää vihainen eikä pahoillaan siitä, että hänen
valtakuntansa hajoitettiin. Hän tiesi, että siellä maailma valmisti jo
erakon lähtöä.

Kun Jorma katsoi nyt majansa ovelta ulos, olivat kärsineet kasvot
käyneet yhden ainoan yön kuluessa paljon entistään uurteisemmiksi.
Palo silmistä oli kadonnut kokonaan ja tilalle oli tullut jokin kaiken
läpi katsova ilme. Nyt eivät kummitelleet mielessä enää haltiat ja
kellonsoitot, vaan ajatukset kulkivat katseen mukana järvenselälle,
sinisille vaaroille, jokaiseen puuhun, pensaaseen ja laineeseen. Ja
nyt ne kaikki näyttivät taas aivan yhtä kauniilta kuin joskus, kauan
sitten seisoessa Kuhasalon rannalla katselemassa sen ympäristöä.
Silloin oli kaikki näyttänyt niin erikoiselta vain sentähden, kun hän oli
munkiksi vihkimisensä jälkeen tahtonut sanoa kaikelle sille hyvästit
siirtyessään yksinäisyyteen. Ja tällä kertaa se näytti aivan
samanlaiselta, — olihan nytkin otettava hyvästit, mutta ei siirtyessä
vapaaehtoiseen vankeuteen, vaan vapauteen, jota hän ei enää
koskaan tulisi menettämään. Jorma tiesi nyt jo kärsineensä tarpeeksi
ja pääsevänsä jonnekin sinne, mistä hän saisi paremman palkan kuin
ihmisten ihailun, kiitokset ja kyynelet.

Illalla saaren valloittajat menivät pois, ja Jormakin uskalsi,


nähtyään veneen menevän, palata takaisin majalleen, pelkäämättä
tulevansa häirityksi. Mutta samaan aikaan, kun puunkaatajain vene
meni puolivälissä selkää, tuli toinen samanlainen suoraan saarta
kohti. Jorman hopeatukkainen, tutiseva pää kääntyi taas metsään
päin, sieltä taas etsimään piilopaikkaa uusien tulijain varalle. Hän
meni rinteeseen, työntyen siellä kahden jyrkän kallion väliseen
koloon, jossa hän tiesi olevansa varmassa suojassa.
Kauan kesti, ennenkuin kuului mitään merkkejä, että ihmiset olivat
tulleet saareen. Jorma jo pahoittelu menneensä niin pahaan koloon,
ettei itsekään voinut nähdä, milloin vieraat lähtisivät. Siksipä hän
kiipesikin ylemmäksi kivien päälle nähdäkseen ja kuullakseen. Siellä
hänen majansa ovella istui hyvin vanha nainen ja hänen vierellään
nuori mies. Molemmat olivat kai käyneet sisällä, koskapa ovi oli
jätetty auki. He keskustelivat ja silmäilivät, eikö erakko jo joutuisi
majalleen, mutta tämäpä ei tahtonut tullakaan, vaan hiipi vain
hiukan lähemmäksi kuullakseen heidän puheensa.

Siiloin sanoi vanha vaimo:

»Kenties hän ei olekaan enää täällä, vaan on kuollut tai mennyt


pois.»

»Vasta eilen hänet oli nähty viimeksi piirtelemässä kepillä jotakin


tuonne rantahiekkaan. Kun hänen mentyään oli käyty samalla
paikalla, oli hän kirjoittanut hiekkaan: 'Marjatta'.»

»Se on varmasti Jorma, kenties hän elääkin vielä!» sanoi nainen


hyvin iloisena, kohottaen sitten pitkän huudon: »Jorma!»

Ja sydänparka oli erakolla pysähtyä aivan työssään, kun hän nyt


monien kymmenien vuosien jälkeen kuuli ensimmäisen kerran
huudettavan nimeään. Hän ei ollut kuullut tuota sanaa sen jälkeen,
kun Marjatta oli lausunut sen viimeksi. — Ja ketä sitten mahtoivat
nuo vieraat olla, jotka tiesivät hänen nimensä?

»Jorma, missä sinä olet?» — huudettiin majalta niin, että metsikkö


raikui. »Jorma, oletko täällä vielä?»
Kun erakko ei vastannut, sanoi vaimo miehelle: »Minä tunnen, että
monien vuosien etsimisen jälkeen olen jo päässyt lähelle häntä.
Mutta en jaksa huutaa enää, — mene sinä tuonne metsään ja kutsu
häntä!»

Mies läksi, kulki aivan Jorman piilopaikan sivuitse ja kierteli ympäri


saarta. Sillä aikaa erakko koetti arvata, ketä vieraat olivat, koskapa
vaimo sanoi etsineensä häntä jo vuosikausia. Kun mies palasi
metsästä tyhjin toimin takaisin, alkoi Jorma jo uskoa, ettei noilla
ihmisillä ollut mitään pahaa mielessä, nousi piilosta ja käveli
majalleen. Ja nähtyään Jorman nousi nainen seisomaan, tuli
vanhusta vastaan ja sanoi:

»Jorma, vihdoinkin löysin sinut!»

»Ihminen, mitä tahdot täältä saareltani?»

Vaimo hämmästyi erakon kylmiä sanoja ja ääntä, mutta kysyi


kuitenkin vuorostaan:

»Sano, oletko sinä Jorma, joka kauan sitten oli munkkina


Kuhasalossa?»

»Mitä sitten, jos olisin?»

»Sano, oletko sinä se munkki, jonka Pyhä Ilja korjasi äitisi ja


sisaresi kanssa maantieltä paleltumasta ja otti sitten luostariin
kasvatiksi? Sano, oletko sinä Ontron poika, joka tappoi igumeeni
Stefanin ja monta muuta munkkia?»

»Kuka sinä olet, joka kyselet murhaajaa?»

»Minä olen Marjatta, Ontron tytär, ja tahdon löytää oman veljeni.»


»Marjatta — — —!» — tuli parahdus erakon suusta. Mutta hän ei
mennyt sisarensa syliin, vaan tuijotti naista kuin järjetön.

»Jorma, siis se olet sinä sittenkin!» — huusi nainen vuorostaan,


puristaen erakon syliinsä kyynelten valuessa poskipäille. Jormasta
tuntui koko saari kaikkine puineen keinuvan ilmassa ja lähtevän
vajoamaan alaspäin. Hänen huulensa liikkuivat, värähtelivät, mutta
mitään ei kuulunut ennenkuin monien ponnistusten jälkeen:

»Oletko sinä Marjatta?»

Jorman ääni kuului siltä kuin hän olisi puhunut kuolleelle ja kuullut
vainajan kyselevän itseään.

»Voi, Jorma, kyllä minä olen Marjatta, sinun sisaresi!»

Kauan molemmat seisoivat toistensa syleilyssä, ja sydämet


tykyttivät niin, että olivat pakahtua.

Ja Jorma sanoi:

»Marjatta, sinä et siis olekaan kuollut, vaikka minulle niin


kerrottiin!»

»En ole kuollut, vaan sinua olen etsinyt. Sentähden juuri olen
tahtonut elääkin, löytääkseni sinut tai sinun hautasi. Ja nyt on siis
pitkä matkani viimeinkin loppunut, ja minä pääsen lepäämään!»

»Minäkin olen tahtonut kuolla, mutta sitä ei ole minulle sallittu,


vaan on käsketty odottamaan ja kärsimään.»

»Monta vuotta olen jo etsinyt sinua, Jorma. Olen käynyt


Kuhasalossa, mutta se oli autio. Menin sitten Valamoon,
Käkisalmeen, Viipuriin, Olavinlinnaan ja sieltä taas takaisin
Ilomantsiin ja Lieksaan. Vasta eilen illalla tulin Kontiolahdelle ja
kuulin siellä kerrottavan, että täällä saaressa oli erakko, joka pakeni
aina ihmisiä. Olin jo luopumaisillani kaikesta toivosta löytää sinut,
mutta läksin kuitenkin tänne. — Ja täälläkö sinä olet ollut siitä
lähtien, kun karkasit luostarista? Mitähän kaikkea olet saanutkaan
kärsiä?»

»Paljon, hyvin paljon! Enimmin kuitenkin siitä, kun luulin sinut


kuolleeksi.»

»Kuolleeksi? Miten sellaista luulit?»

»Munkit kertoivat silloin murhayönä, että sinä hukuttauduit


koskeen ja kaataessasi veneen veit ryöstäjäsikin mukanasi. Ja juuri
sinun kuolemasi kostaakseni minä menin luostariin ja tapoin kaikki,
jotka siellä tapasin.»

»Mutta mitä sinä puhut? Miten minä olen hukuttautunut koskeen


ja olen vienyt mennessäni munkkeja? Enhän ole ollut täällä sen
jälkeen, kun läksimme äidin kanssa Viipuriin!»

»Viipuriin? Äidin kanssa?»

»Niin, sen jälkeen, kun sinä jäit luostariin, menimme äidin kanssa
ensin Koitereelle, myimme siellä talon, menimme sitten Käkisalmeen
ja Viipuriin. Kun äiti kuoli, läksin minä etsimään sinua, Jorma.»

»Mutta — mutta asuittehan te tuolla Jaamankankaan vierellä —


katsos, tuolla lahden pohjukassa, joka näkyy tuolta!»

»Emme ole asuneet siellä koskaan! Mitä sinä nyt puhut? Eikö
muistisi ole enää hyvä?»

You might also like