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

Download ebooks file Prototyping Python Dashboards for Scientists and Engineers: Build and Deploy a Complete Dashboard with Python 1st Edition Houlahan all chapters

Python

Uploaded by

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

Download ebooks file Prototyping Python Dashboards for Scientists and Engineers: Build and Deploy a Complete Dashboard with Python 1st Edition Houlahan all chapters

Python

Uploaded by

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

Experience Seamless Full Ebook Downloads for Every Genre at textbookfull.

com

Prototyping Python Dashboards for Scientists and


Engineers: Build and Deploy a Complete Dashboard
with Python 1st Edition Houlahan

https://textbookfull.com/product/prototyping-python-
dashboards-for-scientists-and-engineers-build-and-deploy-a-
complete-dashboard-with-python-1st-edition-houlahan/

OR CLICK BUTTON

DOWNLOAD NOW

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


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

Programming with Python for Social Scientists 1st Edition


Phillip Brooker

https://textbookfull.com/product/programming-with-python-for-social-
scientists-1st-edition-phillip-brooker/

textboxfull.com

Django For Beginners: Build Websites With Python And


Django William S. Vincent

https://textbookfull.com/product/django-for-beginners-build-websites-
with-python-and-django-william-s-vincent/

textboxfull.com

Introduction to Machine Learning with Python A Guide for


Data Scientists Andreas C. Müller

https://textbookfull.com/product/introduction-to-machine-learning-
with-python-a-guide-for-data-scientists-andreas-c-muller/

textboxfull.com

Introduction to Machine Learning with Python A Guide for


Data Scientists 1st Edition Andreas C. Müller

https://textbookfull.com/product/introduction-to-machine-learning-
with-python-a-guide-for-data-scientists-1st-edition-andreas-c-muller/

textboxfull.com
Python for Scientists 2nd Edition John M. Stewart

https://textbookfull.com/product/python-for-scientists-2nd-edition-
john-m-stewart/

textboxfull.com

Python Programming and Numerical Methods: A Guide for


Engineers and Scientist 1st Edition Qingkai Kong

https://textbookfull.com/product/python-programming-and-numerical-
methods-a-guide-for-engineers-and-scientist-1st-edition-qingkai-kong/

textboxfull.com

Violent Python a cookbook for hackers forensic analysts


penetration testers and security engineers 1st Edition
O'Connor
https://textbookfull.com/product/violent-python-a-cookbook-for-
hackers-forensic-analysts-penetration-testers-and-security-
engineers-1st-edition-oconnor/
textboxfull.com

A Python Data Analyst’s Toolkit: Learn Python and Python-


based Libraries with Applications in Data Analysis and
Statistics Gayathri Rajagopalan
https://textbookfull.com/product/a-python-data-analysts-toolkit-learn-
python-and-python-based-libraries-with-applications-in-data-analysis-
and-statistics-gayathri-rajagopalan/
textboxfull.com

Programming For Computations - Python: A Gentle


Introduction To Numerical Simulations With Python 3.6
Svein Linge
https://textbookfull.com/product/programming-for-computations-python-
a-gentle-introduction-to-numerical-simulations-with-python-3-6-svein-
linge/
textboxfull.com
Prototyping Python

Dashboards for

Scientists and

Engineers

Build and Deploy a Complete

Dashboard with Python

Padraig Houlahan

Prototyping Python Dashboards for Scientists and Engineers:


Build and

Deploy a Complete Dashboard with Python

Padraig Houlahan

Flagstaff, AZ, USA

ISBN-13 (pbk): 979-8-8688-0220-1

ISBN-13 (electronic): 979-8-8688-0221-8

https://doi.org/10.1007/979-8-8688-0221-8

Copyright © 2024 by Padraig Houlahan

This work is subject to copyright. All rights are reserved by the


Publisher, whether the whole or part of the material is concerned,
specifically the rights of translation, reprinting, reuse of illustrations,
recitation, broadcasting, reproduction on microfilms or in any other
physical way, and transmission or information storage and retrieval,
electronic adaptation, computer software, or by similar or dissimilar
methodology now known or hereafter developed.
Trademarked names, logos, and images may appear in this book.
Rather than use a trademark symbol with every occurrence of a
trademarked name, logo, or image we use the names, logos, and
images only in an editorial fashion and to the benefit of the
trademark owner, with no intention of infringement of the trademark.

The use in this publication of trade names, trademarks, service


marks, and similar terms, even if they are not identified as such, is
not to be taken as an expression of opinion as to whether or not they
are subject to proprietary rights.

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

Managing Director, Apress Media LLC: Welmoed Spahr

Acquisitions Editor: Celestin Suresh John

Development Editor: James Markham

Editorial Assistant: Gryffin Winkler

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, 1

New York Plaza, Suite 4600, New York, NY 10004-1562, USA. 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


booktranslations@springernature.com; for reprint, paperback, or
audio rights, please e-mail bookpermissions@springernature.com.

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 http://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. For more
detailed information, please visit
https://www.apress.com/gp/services/source-code.

Paper in this product is recyclable

To my mother, Kathleen (Moriarty) Houlahan. Teacher.

(Born 1927, Brandon, County Kerry, Ireland)

Table of Contents

About the Author


�������������������������������
�������������������������������
�������������������ix About the Technical
Reviewer
�������������������������������
������������������������������xi
Acknowledgments
�������������������������������
�������������������������������
���������������xiii Introduction
�������������������������������
�������������������������������
��������������������������xv Chapter
1: Working with Python
�������������������������������
����������������������������1

Coding Design: Python and OOD


�������������������������������
�������������������������������
�������������1

Python Data Types


�������������������������������
�������������������������������
�������������������������������
����4

Lists, Tuples, and Sets


�������������������������������
�������������������������������
�����������������������6

Dictionaries
�������������������������������
�������������������������������
�������������������������������
��������9

Series
�������������������������������
�������������������������������
�������������������������������
���������������11

Dataframes
�������������������������������
�������������������������������
�������������������������������
�������12

The Spyder IDE


�������������������������������
�������������������������������
�������������������������������
�������23

Summary���������������������������
�������������������������������
�������������������������������
��������������������25

Chapter 2: Reactive Programming with PLOTLY and


DASH�����������������27

Getting Started with PLOTLY


�������������������������������
�������������������������������
�����������������27

Getting Started with DASH


�������������������������������
�������������������������������
��������������������32

Summary���������������������������
�������������������������������
�������������������������������
��������������������38

Chapter 3: Working with Online Data


�������������������������������
������������������39
About the ATADS Dataset
�������������������������������
�������������������������������
����������������������39

ATADS Screen Scraping


�������������������������������
�������������������������������
������������������������45

Converting Excel to CSV with Data Cleanup


�������������������������������
�������������������������48

Table of ConTenTs

Managing and Keeping Our Files Up to Date


�������������������������������
�����������������������49

Summary���������������������������
�������������������������������
�������������������������������
��������������������51

Chapter 4: Planning the Dashboard Prototype


�������������������������������
����53

Overview
�������������������������������
�������������������������������
�������������������������������
����������������53
Project Tasks
�������������������������������
�������������������������������
�������������������������������
����������57

Trends and Forecasts


�������������������������������
�������������������������������
����������������������������59

Other Design
Considerations�������������������������
�������������������������������
�����������������������61

Summary���������������������������
�������������������������������
�������������������������������
��������������������62

Chapter 5: Our First Dashboard


�������������������������������
���������������������������63

The atads�py File


�������������������������������
�������������������������������
�������������������������������
����64

The atads_layout Class


�������������������������������
�������������������������������
�������������������������67
The atads_figures Class
�������������������������������
�������������������������������
������������������������70

Initialization
�������������������������������
�������������������������������
�������������������������������
������70

Class Methods
�������������������������������
�������������������������������
�������������������������������
��73

Fine-Tuning with CSS


�������������������������������
�������������������������������
����������������������������85

Summary���������������������������
�������������������������������
�������������������������������
��������������������88

Chapter 6: Dashboard
Enhancements�������������������������
������������������������89

Adding the Banner and the Instruction Panels


�������������������������������
��������������������92

Monthly and Weekday Histogram Panels


�������������������������������
�����������������������������96

The Spectrum Panel


�������������������������������
�������������������������������
����������������������������100

Quantifying Weekly and Seasonal Effects


�������������������������������
��������������������������105

The Final ATADS Dashboard


�������������������������������
�������������������������������
����������������113

Summary���������������������������
�������������������������������
�������������������������������
������������������114

Chapter 7: Hosting an Application on a UNIX Server


������������������������115

Creating the Python Environment


�������������������������������
�������������������������������
�������117

Running a Flask Application


�������������������������������
�������������������������������
����������������119

vi

Table of ConTenTs
Using uWSGI
�������������������������������
�������������������������������
�������������������������������
���������121

Using GUNICORN
�������������������������������
�������������������������������
�������������������������������
��122

Summary���������������������������
�������������������������������
�������������������������������
������������������123

Chapter 8: Deploying Your Project As a UNIX Service


����������������������125

Creating a Hello World System Service


�������������������������������
������������������������������127

Using NGINX to Share Your Hello World App


�������������������������������
�����������������������128

Adding the Dashboard Project to Your Server


�������������������������������
��������������������131

Creating the Dashboard System Service and Deploying with NGINX


����������������133

Securing Your Server


�������������������������������
�������������������������������
��������������������������135

Summary���������������������������
�������������������������������
�������������������������������
������������������137

Chapter 9: The BTS T100 Dataset: Interacting Controls and

Tables
�������������������������������
�������������������������������
�������������������������������
��139

The BTS T100dm Dataset


�������������������������������
�������������������������������
��������������������140

Prototyping a T100dm Display


�������������������������������
�������������������������������
������������140

Managing Modes and Interacting Menus


�������������������������������
���������������������������144

Figures and Tables


�������������������������������
�������������������������������
������������������������������146

Summary���������������������������
�������������������������������
�������������������������������
������������������149

Chapter 10: Creating a Web Portal


�������������������������������
��������������������151

Troubleshooting WordPress
�������������������������������
�������������������������������
�����������������155

Summary���������������������������
�������������������������������
�������������������������������
������������������162

Chapter 11: Using Our Dashboard for Data Visualization and

Analysis
�������������������������������
�������������������������������
������������������������������163

Airport Type, Trends, and Location


�������������������������������
�������������������������������
������164

Airshows and Seasonal – Using Spectra


�������������������������������
���������������������������166

Incorporating Models
�������������������������������
�������������������������������
��������������������������173
vii

Table of ConTenTs

Media, Presentations, Reports, and Projects


�������������������������������
���������������������177

Summary���������������������������
�������������������������������
�������������������������������
������������������181

Chapter 12: Afterword


�������������������������������
�������������������������������
��������183

Appendix A: Utilities for Managing ATADS Data


�������������������������������
�185

Index
�������������������������������
�������������������������������
�������������������������������
����197

viii
About the Author

Padraig Houlahan has a diverse career,

spanning research, teaching, and IT

management. He has worn multiple hats over

the years, functioning as a scientist, software

developer, college professor, flight instructor,

and IT director. Throughout his journey, he

has maintained an enduring fascination with

the art of uncovering patterns within data.

His M.A. research involved searching for,

and placing upper limits on, gravitational

waves in Lunar Laser Ranging data, while his


Ph.D. research introduced an innovative pattern recognition approach
for characterizing the structure of astronomical nebulae. Since then,
his focus has pivoted toward aviation-centric software projects. These
ventures involve real-time tracking and visualization of aircraft to aid
in traffic flow analysis. Furthermore, he has played a pivotal role in
rendering extensive datasets accessible to both students and faculty,
benefiting airline and airport operators alike. Teaching has always
held a special place in his heart, driven by the joy of witnessing
students derive satisfaction from acquiring new knowledge and
insights.

ix

About the Technical Reviewer

Shibsankar has 10+ years of experience

working in IT where he has led several data

science initiatives, and in 2019, he was

recognized as one of the top 40 data scientists

in India. His core strength is in deep learning,

NLP, and graph neural networks, whereas


he has also spent time solving problems in

computer vision. He has experience working in

the domain of foundational research, fintech,

and ecommerce.

He is currently working at Optum as a principal data scientist.

Before that, he worked at Walmart, Envestnet, Microsoft Research,


and Capgemini. He pursued a master's from the Indian Institute of
Technology, Bangalore.

xi

Acknowledgments

While writing this book was a solitary endeavor, it could not have
happened without the influence of an ecosystem of family and friends
who help me keep my sanity, an ecosystem that includes the
following people.

My wife Tania, a voracious reader and lover of animals and of the


outdoors, who faces the daily challenge of managing her “grumpy old
man in training” all the while working in physical therapy, teaching
Aikido, learning mandolin, and wildlife sketching.

My mother, a remarkable individual born in a very remote part of


Ireland, one of the most intellectually curious people I ever met, who
became a teacher and who cultivated a love of learning and culture in
all her children.

My friend Dr. Otto Franz, an astronomer whom I met while working at


Lowell Observatory, now retired and living in Texas, who still stays in
contact with weekly Facetime sessions, with whom I have the
privilege of discussing topical and scientific issues with someone who
was a child in Austria during the Nazi occupation, who offers
eyewitness testimony and insights into extremism, historic and
current. His appreciation of the importance of bringing data to life,
and seeing the merits in my work, is greatly appreciated.

My friends Bill Burke (a superb luthier and musician) and his wife Pat
(who meticulously documents historic archeological sites) for their
regular wonderful conversations – on all things; and close friends Tim
Sober and Carol Kennedy, Barry Malpas and his wife Anne Wittke,
and Klaus Brasch for our regular conversations and sanity-saving
rambling social and political reviews.

xiii

aCknowledgmenTs

And I must also mention Dr. Darrel Smith, a long-time friend and
professor of Physics, Dr. Jules Yimga (Chair, School of Business), and
Dr.

Zafer Hatahet (Dean, College of Arts and Sciences) all at Embry-


Riddle Aeronautical University (Prescott, AZ) for their positive
responses to the software development efforts which are the focus of
this book.

Truly, it does take a village to raise a child!

xiv

Introduction

I wrote this book for a past me. I’m now retired but have maintained
a lifelong interest in programming; there’s just something very
satisfying in developing a piece of code that solves a problem.
Frankly, it’s empowering; you have a solution that gets the job done.
I have had the good fortune of having worked on software projects
that were done mainly to support academic research – research in
astronomy and aviation-related studies, which have been my main
interests – not programming.

I like programming, but it’s simply a way to get me to where I want


to be.

Sometimes, it’s the journey, but for me, it’s mainly the destination.

I am not alone. There are countless researchers and grad students


and data analysts who program, but whose main interest is not
programming.

Being able to code is simply a necessary skill. It’s the norm for
academic types to write unique custom software tailored to a specific
purpose or a narrowly crafted dataset. University departments,
whether scientific or business or engineering, will rarely devote time
to teaching graduate student workers and young faculty to program;
they are expected to sink or swim. They will write code that would
fail to consider multitudes of possible scenarios or input format, for
example. “Need to enter a number?

Well, make sure you use three significant digits for that column, or
the code might crash!” – this probably happens more often than
many would like to admit. The point here is not to assign blame, but
to be realistic; very often, code is written in a very functional, get-it-
done style, to simply… get it done. It’s not about being the cleverest
or the fastest, but simply getting to the destination.

xv

InTroduCTIon

There will be conflicting forces. As a team member, there is often a


need to share your code and make it available for others to use, so
they can get their work done. An Object-Oriented Design makes this
much easier.
Sometimes, the code takes on a life of its own and becomes a badly
needed resource, a service if you will, to a broader interest group.
Your supervisor or manager is not really interested in the details, just
the results, and so a little more effort on the journey is warranted.
And this is where dashboards enter the picture – they represent an
encapsulation of your knowledge codified into a controlled look and
feel and access. A particular kind of programming really, but to the
nonspecialist, another hill to climb.

There have been many times when I found myself in such a position
and wished I had some complete examples to look at, to see how
things were done, and so this is the sense in which I say this book is
written to a past me. In showing how a dashboard was built around
an important aviation dataset, I hope I can help others benefit and
expedite their own projects without facing the often-daunting
headwinds of learning new technologies and techniques all by
themselves.

Why Dashboards?

A picture is worth a thousand words.

—Fred R. Barnard

All data is ultimately a collection of bits – ones and zeros really. It can
be stored in various forms from disks to paper, but to be useful it
needs to be understood and accessible, both of which benefit from
being able to readily visualize what the data represents and from
being able to analyze and share it. Dashboards (graphical displays
using features like buttons, sliders, menus, and graphics) have
emerged as powerful tools to address these needs. When well
designed, you can encapsulate the problems xvi

InTroduCTIon

of data management, display, and access into a self-contained


project, allowing collaborators to work remotely if needed, all the
while providing a focus for the research effort’s needs to manage the
data centrally.

Well-designed dashboards should make their data as intuitive and


functional to the user as possible. By intuitive, I ideally mean the user
should see compelling graphics and results that are easy to
comprehend.

It might not be possible to avoid long tables of data, but in general,


well-designed graphical elements are more effective than raw
numbers for initial explorations. Part of this is simply human nature.
We are visual creatures. Of course, students and researchers need to
get into the weeds with the algorithms and raw data, but eventually,
that data must be reduced into usable summaries and statistics for
practical use by themselves and external users.

To be functional, a dashboard needs to meet the designers’ goal of


making the data’s attributes of interest accessible. A large dataset
might contain more information than the designer is interested in. So,
the designer’s task is to figure out what part of the dataset to use
and to create displays and tools to reveal the embedded traits of
interest; the designer must regularly choose between too little and
too much. If they include too much information, they run the risk of
overwhelming the nonexpert; too little, and their dashboard appears
to be inconsequential. For these reasons, designers must always keep
the end user in mind and be willing to revise their dashboards
accordingly.

There are multiple ways a dashboard might be built and accessed like
web based, application based, and desktop based. A web-based
dashboard has an advantage as it offers freedom to the developer to
maintain an operating system–specific environment and
configurations. This makes them more stable and greatly simplifies
the development process – the designer only needs to develop for a
single platform. At the same time, the distribution problem is solved.
A dashboard on a server can be shared with any other computer on
the Internet.
Good dashboard projects are therefore a reflection of carefully
planned data analysis, reduction, presentation, management, and
dissemination.

xvii

InTroduCTIon

The Importance of Data Visualization

The main dashboard we will build in this book allows the user to
explore the government’s airport operations dataset (ATADS) that
tracks various types of daily operations for more than 500 US
airports. Operations include the kind of flights (military, civilian,
commercial), the conditions (whether they were conducted using
Instrument Flight Rules [IFR] or Visual Flight Rules [VFR]), and
whether they were local or itinerant. VFR operations are permitted
when the weather conditions meet certain minimum visibility and
cloud clearance criteria and are normally used by private pilots and
small air taxi or commercial companies. One cannot assume IFR
flights happen under inclement weather since larger commercial
airlines will use these by default for safety.

A dataset such as this contains a wealth of hidden information that is


hard to appreciate without seeing it graphically, so we can answer
basic questions concerning activity trends. But if we pay close
attention, we will also discover other features that would be difficult
to detect from inspection of tabular data by itself, some of them
being quite fascinating in their own right, and so a graphical
inspection of the data is very important since it will very likely lead to
further questions to explore.

This ability to support visual inspection of graphical data is an


important feature of many dashboards and is essential in ours. After
we are done developing and deploying our dashboard, in a later
chapter, we will demonstrate how powerful it is in providing insight
into the ATADS dataset and hopefully encourage and motivate you to
explore your project’s data.

Finally, an important aspect of this book is not just showing how to


design, build, and deploy a dashboard, but since we are using an
important dataset from the aviation industry, we also address issues
of how our dashboard can support research and aviation
professionals and business students pursuing a career in aviation
management. There are scenarios we will explore as part of
demonstrating the project’s xviii

InTroduCTIon

usefulness, and it is hoped that all readers will appreciate how what
might be perceived as a fairly dry dataset actually presents wonderful
opportunities for, and naturally suggests, topics for further
exploration.

Having been a researcher and scientist, I have always enjoyed


digging deep into data to see what’s hidden beneath the surface,
which is why I think it’s important to explore how the dashboard can
help reveal and document behaviors and events such as hurricanes
and pandemics. Hopefully, these explorations will motivate those
interested in other datasets.

Why This Book?

This book is intended for those who work with data and also have the
need to share insights regarding data. An essential aspect is a desire
to help their end user “lift the veil” and understand underlying data
features such as trends and patterns. Large organizations can have
teams of developers and experts to achieve these goals, but many
who could benefit from such capability (e.g., college faculty and
graduate students) work with minimal resources and need to take a
jack-of-all-trades approach to building applications; they need to
solve the data access, data importation, data display, analytical tool
build, server operating system management, and deployment
problems (if your dashboard is wildly successful, you will need a
scalable solution!). All these must be done in a realistic manner.

Some corners can be cut – there are fewer deployment concerns if


the project is behind a firewall or if the users are all experts, and
primitive graphics can work if there are deadline constraints.
Regardless, there is a daunting task and skillset list the graduate or
faculty member must master.

This book is intended to show how a complete dashboard-based


project can be created and deployed. I will use some government
aviation datasets as core material, and I will show the various design
issues and solutions I encountered in developing an online
dashboard. In taking a step-by-step approach, I hope newcomers will
see how this can be done xix

InTroduCTIon

and encourage them to do it for themselves. I hope the reader finds


it useful to have the diverse underlying issues addressed in one
volume with personal observations included along the way.

There are many online resources that can show you how to make a
simple dashboard or that offer solutions created by others that can
be licensed. There are few, if any, that demonstrate a complete
solution incorporating real-world data access and download,
comprehensive reactive programming, and server configuration
issues. The obvious reason is that it takes a considerable effort to
organize and present such a complete overview, such as this work,
and this is beyond the scope of most online articles. Perhaps not too
unfairly, many online examples teach how to draw a stickman when
what you really need to know is how to do a portrait.

In this book, we address the “complete solution” for the core


application and provide the user with complete code examples and
the needed server configurations. This should serve as a powerful
self-contained resource to learn from, and to refer to, since there
were many times when working on various research projects, I found
myself at a point where I felt I understood the broad strokes of a
coding issue, but, frustratingly, just needed a little extra help in the
form of seeing how someone else solved an issue, and this was all I
needed to move forward.

No question having complete examples to refer to is both a


tremendous time saver and stress reliever.

There is no need to be a computer expert to achieve this, but


computer expertise is still needed. Most researchers and students
these days have experience with some programming, system
administration, and basic web HTML hacking and could learn how to
build dashboards for themselves. For this reason, when discussing
code examples, only the major features will be addressed; the
assumption will be that the reader will be able to understand a
function’s working from reading the code combined with their
understanding of coding basics.

xx

InTroduCTIon

I have also taken the liberty of addressing some issues related to


data analysis and interpretation for aviation professionals specifically
interested in aviation datasets, and this goes beyond the basic task of
creating a dashboard. I include a discussion showing how our
dashboards can provide insight into many aviation issues ranging
from the impact of hurricanes to pandemics, and I even include
discussions on how to create models to test your understanding and
to help incorporate spectral analysis into your work. I realize spectral
analysis of airport operations data is surprising perhaps, but why not?
The techniques are universal, and it was interesting to see how it
worked out and it raised interesting questions in its own right. And,
of course, these discussions can be generalized to non-aviation
projects. So, in this book, we will build a custom tool and show how
to use it, which is a valuable part of the feedback used to refine our
designs.

I will note that dashboards will evolve. In other words, you don’t
have to achieve every desirable outcome in your first attempt. Start
with a simple goal such as displaying a time series of a single data
type.

Figure out how to import and display the data; at this point, you have
made significant inroads into the I/O and graphics display problem.

Next, start adding tools like linear models for trend analysis or panels
to display important statistical values. And that’s it! Well, almost. As
you work with your data and your dashboard, you probably will have
“Aha!”

moments where new ways to visualize the data pop into your mind,
and so displays will have to be modified or new tools created. The
project will evolve. However, even as large datasets are continuously
updated, their corresponding dashboards should eventually stabilize.
Done right, this is a wonderful outcome for any research project, a
resource to be shared with end users – public or academic. And let’s
not forget the benefits your colleagues will gain by not having to
reinvent the wheel.

xxi

InTroduCTIon

How to Use This Book

Depending on what programming challenges you face and your stage


of completion, your approach to how you might use this book will
vary greatly. It would fall into one or more of the following strategies:

• As a general reference on how to build and deploy a

Python dashboard.
• As a template: Here, you would download the code

examples from the publisher’s website to explore

the various solutions and to modify them to suit

your purpose. You would provide your own CSV file

collection and modify the names and labels so that

the drop-down menus and equation strings would

be appropriately populated. The result would be a

dashboard tailored to your project.

• As a resource: See how to work with PLOTLY/DASH

when first learning reactive programming.

• As a guide on how to deploy a Python application using

NGINX and GUNICORN, with a discussion of how to

use CSS to control your dashboard’s screen layout.

• As a resource to augment your current development

efforts: For example, to see how borders, titles,

equation strings, and mouseover text are created and

curve fit and Fourier techniques implemented.

xxii

InTroduCTIon

• As a how-to when getting started with some file format


Other documents randomly have
different content
most ha rágondolok, mi mindent mondtam önnek, látom, hogy már
régen nem beszélhettem ilyen őszintén.
Félretolta a vadászfegyver závárzatát, a fegyvert ketté hajlította
és kivette a patront a csőből.
– A vadászatból már nem lesz semmi. Nem jönne velem a
kastélyba?
– Ilyen vendég szégyenére válnék.
– Egyedül vagyok, – felelte, – de ha nem volnék egyedül, akkor is
meghívnám vendégül. Talán túlbecsülöm a jólétet, amely
osztályrészemül jutott, de mégsem annyira, hogy föláldoznám neki
szabadságomat.
Előbb a reggeli napfényben a fatörzsön közösen
megreggeliztünk. Elfogott bennünket az a lassú kijózanodás, amely
mindig jelentkezik, valahányszor szellemi foglalkozás külsőséges
dologgal váltakozik és elfogódottan tekintettünk egymásra. De mert
mindenikünk fölismerte a másiknak zavarát, ez futólagos
megértésben ismét összekötött bennünket. Mégis mintha valami új
tárgyat kellett volna keresnünk a beszélgetésre. Egyikünknek sem
volt kedvére, hogy közönbös dologról beszéljünk, mert első
találkozásunk nem folyt le eléggé gyanútlanul és sokkal
idegenebbek voltunk egymásnak, semhogy valami könnyelmű
fecsegés ismét megteremthette volna azt a komolyságot, amelyre
mindketten áhítoztunk.
– Mégis csak jobb lesz nekem, ha tovább megyek a magam
útján, – mondtam hirtelen, csaknem akaratom ellenére.
– Ejnye, minden vakmerősége ellenére is mennyire el tudja
veszteni a bátorságát, – mondta a fiatal hölgy, – de ahogyan önnek
tetszik…
– Engem csak az ellenállás tesz bátorrá, – feleltem.
De jobban foglalkoztatott ez a gondolat, mint a szomszédnőm.
Tudtuk mindketten, hogy nem akarunk elválni. És mintegy
magammal beszélve, folytattam elmélkedésemet:
– Azt kérdezem magamtól, vajjon mindig úgy voltam-e a
bátorságommal, mint ahogyan az imént mondtam; nem így van és
csak egészen különös esetekre áll. Teljesen attól függ, milyen az
állapotom és főként, hogy az a föladat, amellyel meg kell birkóznom,
elég nagy föladat-e. Arra gondolok, hogy jó vagy rossz erőnket és
tulajdonságunkat hozza-e mozgásba. Eltűrtem olyan megalázást és
vereséget, aminőre remegés nélkül gondolni sem tudok és amely, ha
csak ráemlékezem, a düh könnyét kergeti a szemembe. Amíg ezek a
sebek begyógyulnak és amíg forradásuk, hogy úgy mondjam, az
ellenállás páncéljává lett, addig gyakran gyáva voltam egészen a
gyalázatig. Gyakran gondolom, hogy a bosszú olykor határozottan
megváltás kell hogy legyen. Nem bosszulhatom meg magamat…
– Az életben jelentkező akadályok legyőzését mindig ilyen
módon teszi föladatává? – kérdezte szomszédnőm teljesen átérezve
azt, ami foglalkoztatott.
Megreszkettem a boldogságtól és ránéztem. Lesütötte a szemét
és vonásai valami kedves, gondolatokba merűlt aggodalmat árultak
el. Majd fölvetette a fejét és gyorsan ezt mondta:
– Én a könnyebb végét választottam a dolognak. Nekünk nőknek
a gondolatok világába való menekülés csak ritkán adatik meg
vigaszul, mi könnyebben meg tudunk változtatni valami gonosz
helyzetet, mint megérteni vagy magunket benne megérteni. Talán
kevesebb a lelkiismeretünk és ezzel csekélyebb a felelősségünk.
Amikor először ébredtem erőim tudatára és egyszersmind közülük
azokéra, amelyek az életben külsőleg hasznomra lehetnek, nem
törődtem többé azzal, hogy használatuk valami más téren nem
járhat-e számomra kárral. Hogy az ember ezt megfontolgassa,
ahhoz a léleknek sorsában való elviselhető egyensúlya kell, amivel
az én lelkem akkor nem rendelkezett.
– Elérte, amit célul tűzött ki magának?
– Úgy van. Mihelyt megtudtam, hogyan lehet boldogulni a
világon, mindent elértem, amit megkivántam, de nem lettem boldog.
Ámbár azonban elégedetlen vagyok, nincs erőm arra, hogy
lemondjak arról, amit kiküzdöttem magamnak. Semmiféle igéret,
még ha a belső nyugalom és megelégedettség egész egét hozná is,
sem tudna elcsábítani, hogy lemondjak megszerzett életmódomról,
mert ha csak gondolatban is eloldódik a kezem, nem látok mást,
mint feneketlen mélységét a pokolnak, amelyből kimentettem
magamat.
Együtt lassan útnak indultunk, amerre a fiatal hölgy vezetett.
Pompás erdőn át mentünk, de dombos irtásokon is haladtunk,
amelyeken a nap forró sugarától szürkére halványított facsonkok
közt magas fű nőtt. Egy elhagyott rókabarlangnál, amelynek
bejáratát szederbokor buján benőtte, kisérőnőm ismét leült és
mintha a bevezetést csak gondolatban mondta volna el, szinte
ennek folytatásaként ezt beszélte el:
– Nem sok világosság jutott abba a pincébe, amelyben szüleim
éltek. Anyám beteg volt és apámtól már régóta nem kapta meg azt,
ami neki és nekünk gyermekeknek a megélhetésre kellett. Nem sok
az új dolog ebben a szomorú történetben. Az apám annak idején
talán más reményekkel, talán erejének ama gondatlan
túlbecsülésében kötött házasságot, amely jellemének sajátossága
volt, talán minden megfontolás és meggondolás nélkül, mint
ahogyan fiatal teremtések a mi társadalmi körünkben rendesen
házasságot kötnek. A pincelakásnak két helyisége volt, de ajtó nem
választotta el őket egymástól. Nyolc éves voltam, amikor lassan
kezdtem megérteni azt a lealacsonyítást, amelynek az anyám
lassanként áldozata lett. Ha már ebben a korban nem kellett volna
három évvel fiatalabb öcsémről gondoskodnom, akkor valószínűleg
elpusztultam volna ama benyomások és gondok hatása alatt,
amelyek bennünket négyünket ebben a sötét lyukban fojtogattak.
Nem tudom, hogy az utolsó években mi volt az apám foglalkozása,
de valószinüleg nem csinált már semmit, mert az anyám kereste
meg a kenyerünket, ha csak féligmeddig egészséges volt. Láttam őt
apám ökle alatt összeroskadni, láttam második kis öcsémet
születésétől kezdve egészen a haláláig, mindjárt a születése után. A
hangok, amelyek fiatalságomat betöltötték, lárma volt és jajgatás,
könnyeket láttam és elvetemültséget, piszkot, sötétséget és a
börtönömön kivül levő világból alig láttam többet, mint
pinceablakaink előtt sárban vagy napfényben az utcán elhaladó
emberek lábát. Az emberekből csak a test szükségletére való durva
fölhasználhatásukat ismertem, a péknél és füszeresnél
megtanultam, hogy nyomorúságommal élelemre váltsam föl azoknak
a mohóknak a szánakozását, akik maguk is keserves harcban
állottak az élettel, megtanultam, hogy sajnálatraméltónak mutassam
magamat és így egy pohár tejet koldulhassak öcsém, a gyerek
számára. Azután az apám a kikötőben rakodáskor részegen két
vasuti kocsi közé került, testének összetört roncsait a barlagunkba
hozták és amikor végül elvitték, az anyámmal együtt fölmostam vérét
a kőkockákról.
Jóval későbben, amikor az anyám már régen el volt temetve, egy
nénémtől, aki gondozásba vett, megtudtam, hogy anyám jó
családból származott és csakis apám iránt érzett szerelme sodorta
abba a mélységbe. De ennek a ragaszkodásnak ott nem szerelem
volt a neve. Rám azután olyan idő következett, amikor szájam
lélekzetvételét, az éhségemet csillapító kenyeret és az éjszakai
nyugvóhelyet kegyelemként kellett fogadnom, jótéteményként,
amelyért nem lett volna elég nagy semmiféle köszönet. Minden fillért
a szememre vetettek és véremet nem érte fénysugár, hogy már
előbb mint megalázást el ne szenvedtem volna. Egy este messze
künn a kikötőben, ahol kirándulás után a csónakját a fészerbe húzta,
megszólított egy fiatal úr, megsimogatta a hajamat, jó meleg
szavakat intézett hozzám úgy, hogy megremegtem és utána
futottam. Magához fogadott és én nála maradtam. Tizennégy éves
voltam akkor.
Ekkor tudtam meg, hogy a hajam szőke és a szemem világos,
megtudtam, hogy szájam nevethetett anélkül, hogy megszidtak
volna érte és hogy mosolygása egy ember keblében kegyességet
szült és örömet keltett. Hallottam hangom csengését, láttam lábam
lépését és éreztem szívem dobogását. Az életemet adtam volna
oda, ha mindennek fönségességét csak sejtettem volna mily
korlátlan odaadással nyujtottam oda mindent, amit e gazdagság
egész teljességeért elvártak tőlem. Mit jelentene, ha azt mondanám,
kinyilt előttem az élet? Üres, semmitmondó szó lenne ama
menyországhoz képest, amelynek fényébe beléptem.
Mindent amit tettem, ezért a férfiért tettem. Még mindig nem
mertem hinni, hogy az én életemnek is vannak jogai. Az ő kedvéért
megtanultam, amit föladatomnak tűzött ki, neki öltözködtem az ő
kedve szerint, reszketve lestem a kivánságát, megölt a szégyen és
aggodalom, félve attól, hogy valamivel adósa maradok az ő
barátságosságának. Meghatva látta szívem ügyetlenségét, de
amikor egyszer le akarta csillapítani szerelmi buzgalmamat, ellágyult
és könnye a kezemre hullott, amelyet a kezében tartott. Ez az
életemmel ajándékozott meg…
Az elbeszélő elhallgatott és körülnézett helyünk napfényes
világában, mint az az ember, aki az erdőben mély gondolatokból
ébredve föltekint és észreveszi, hogy eltévedt. De amikor rám
nézett, megütközése lecsillapodott és kezét nyujtotta. Arcomról
bizonyára leolvasta részvétemet és aggódásomat, mert mintegy
feleletül ezt mondta:
– Nem, sohasem fogom megbánni, hogy nyiltan beszéltem önnel
és annál inkább hiszem, hogy ön bizalmat érdemel, mert nem
szándékosan történt, Bánt azonban, hogy változtatnom kell azon a
rólam kapott képen, amelyet tisztává és értékessé tett a szánalom
és a természetes vonzalom. Változtatnom kell rajta, mert irtózom
attól a titkos megalázástól, amely sajátmagunk egyoldalú leírása
után lenyom bennünket, akár többnek akár kevesebbnek mutattuk
be magunkat, mint ami vagyunk. Milyen egyszerű volna, ha úgy
fejezhetném be ifjúságom rövid történetét, ahogyan az emberek kis
ideáljaik szegényes igényeihez képest az élettől elvárják. Velem
másként történt és úgy, ahogyan történnie kellett, mert az apám vére
volt bennem, az a vér, amelyet a padló gödrös köveiről töröltem föl.
Aki az életben igazán fölébred, mindig a maga öntudatára ébred;
ameddig az ember idegen akarat vagy idegen gondolatok és
nézetek hatása alatt él, alszik, mint a legtöbben. De jobb ébren lenni
a pusztában, mint a paradicsomban aludni. Ezzel az igazsággal
vigasztaltam magamat. Kinek ne jutna ez az eszébe olyan időben,
amikor harcolni kell? Nem maradtam a barátomnál; tizennyolc éves
voltam, amikor elváltam tőle. Az is lehetséges, hogy ő vált el tőlem.
Ki tudná ilyen esetekben a cselekedetünk okául szolgáló érzelmeket
tisztán megkülönböztetni? Úgy vettem észre, hogy én közönbösebb
lettem a szemében, az ő jótéteményei pedig számomra vesztettek
értékükből, minél inkább elveszteni véltem a szerelmét. Akkor, amint
mondani szokás, nagylábon éltünk, az élet örömmámorában és
szellemi, meg muló élvezetekben teltek el a napok és az éjjelek.
Amikor szemem más férfira pillantott, akkor éreztem először a
számomra megnyíló lehetőségek korlátlanságát és mert úgy láttam,
hogy ez az én értéktelenségemet bizonyítja, csökkent az
akaraterőm. Így hát nemsokára, amint ti mondani szoktátok: kézről-
kézre jártam, de helyesebben úgy kellene mondani, hogy tetszésem
szerint magam választottam és bocsátottam el. Nem dicsekszem
vele, de nem is hallgatom el. Lelkem mélyén sejtettem, hogy amikor
először engedtem át magamat, a természetemen kegyes
erőszakféle esett meg, amely végzetésé vált, amikor szúnyadó
véremet hálás lelkem zálogául kellett adnom. De a szerelem dolgait
csak a szerelem szemével lehet fölismerni, később már csak
bizonytalanul és még saját emlékezetünkben is csak mint fény, de
nem mint alak marad meg a szerelem. Ma tehát nem tudom már a
titkot megfejteni, bizonyos azonban, hogy megmaradt számomra az,
hogy a vérem hangját magamban figyelni tudom, mint a vándorló az
erdőben a forrásét, de nem mint a fa a maga zugását.
Két kezemre támasztva a fejemet, fatönkön ülve a leányra
tekintettem, aki hozzám e szavakat intézte. Azt a tiszta
természetességet, amely benne volt, mindenben ami tőle jött
hozzám, elhomályosította a csodálat kínos megmozdulása, amelybe
ellenmondással teli idegenszerű megkivánásnak mély
nyugtalansága vegyült bele, amellyel nem tudtam tisztába jönni.
Gyors döntő cselekvésre éreztem harcrakész vágyódást és egyúttal
alázatos megadásra való hajlandóságot. Csaknem dühössé,
dacossá és némává tett az az égető kivánság, hogy gyorsan és egy
csapásra érvényesüljek. Új volt az életemben ez az erő, amelyet
ebben a nőben találtam és sokkal erősebben hatott reám, mint maga
az elbeszélés, bármennyire meghatott is ez. Ezt gondoltam: nem
úgy beszél, mintha egy harmadik személy lenne köztünk? Hűvös
fuvallatot éreztem, de ez a lehellet lángra lobbantott.
A leány hallgatott és a messzeségbe nézett, ám nem szomorúan,
sem elgondolkozva, hanem szilárd tekintettel. Valójában most láttam
az arcát először és rájöttem, hogy az élet, de nem vonásainak
szabályossága adta meg a szépségét. Korát nehezen lehetett
meghatározni, körülbelül harminc évesnek tartottam, de voltak
pillanatok, amikor arcának kifejezése olyan volt mint a gyermeké.
Folyton változott, de öntudatos magatartás állandó határai közt. E
kép életteljes játékából mintha egyetlen vonás sem hiányzott volna,
amely ne lett volna igazán nőies. Csodálatosan szép volt a keze,
világosbarna és kissé széles, finom, de nem gyöngéd.
– Mi a neve? – szóltam bele hirtelen a hallgatásunkba.
Felelet helyett levette a kalapomat és határozottan és
egyszerűen, szinte csak azért, hogy több tere legyen a tekintetének,
elsimította a hajamat homlokomról. Vizsgálódva nézett reám, azután
lassan így szólt:
– Teja a nevem. Nevezzen csak így. Reánk asszonyokra
tulajdonképpen csak az a név jellemző, melyet életünk későbbi
folyamán azoktól kapunk, akik közel állanak hozzánk és amely nevet
bizonyos tekintetben magunk választunk a számunkra. A családi név
csak a férfiaknál jelent valamit. Én Teja vagyok.
Gondoltam: ritkán mosolyog, mint azok az emberek, akik
másoknál sok vagy semmi megértést sem tételeznek föl és akik
bizonyosra veszik szavuk hatását, vagy akik nem törődnek azzal,
helyesen értik-e meg őket. Az a mód, ahogyan föltételezte az
emberiességet, értelmet és erkölcsöt, kitüntetett és boldoggá tett,
úgy éreztem, mintha az ő lényével szemben semmi alávalóság sem
rosszaság nem tudna megállani, szabad volt és erős és mégis tele
titokkal. Emellett azonban nem volt jó abban az értelemben,
amelyben rendesen jónak szokták mondani az embert, sőt inkább
hiányzott a természetéből az önzetlen gyöngeség értelmében vett
minden jámborság, jó volt és veszedelmes. Szívem a boldogságtól
és nyugtalanságtól hevesen dobogott. Ezer gyors szó égett a
véremben az ő dícséretére, ami elszomorított és nem tudtam
tisztába jönni, vajjon hallgatásom búsított-e el vagy az a kényszer,
hogy dícsérnem kell azt, amitől féltem.
– Sokáig, sokáig kellene élnem, – mondtam hirtelen.
Teja rám nézett, mintha ezt kérdezné: miért mondja ezt
egyszerre? De nem kérdezte, mert nem akarta hallani azt, hogy
gazdagságának és okosságának titka kínnal és szerelemmel azt a
vágyat ébresztette bennem, hogy minden élővel való
összefüggésben egészen megértsem és méltányolhassam őt. Talán
tapasztalásból tudta, hogy mi férfiak, ha önálló nőben okosságot és
bájt találunk, kényszerítve vagyunk arra a szenvedélyes
túlbecsülésre, amelyet csupán ébredező szerelmünk igazol saját
magunk előtt. Én nem tudtam és még ma sem tudom, mert ez a
föltevésem valószínűleg már arra a túlbecsülésre vall. Teja futólagos
rövid gondolkodás után, olyan hangon, amellyel udvariasan, de nem
túlságosan komolyan, valami véletlen megjegyzésről szokott az
ember beszélgetni, ezt mondta:
– Sohasem törődném sokat azzal a fiatalemberrel, aki nincs
meggyőződve arról, hogy sokáig kell élnie. A kacérkodás a korai
halállal gyönge természetre vall vagy éretlenségre, amellyel nem
lehet komolyan foglalkozni. Az ilyen fölfogás csak a viszonyok
kiegyenlítetlenségét, a saját jogokkal és határokkal szemben való
elfogultságot vagy vakságot árulja el.
– Aki így hallja önt beszélni, szívtelennek tarthatná.
– Kérem, – felelte hüvösen.
De azután komolysága hirtelen vidámsággá változott, az
arcomba nevetett és így szólt:
– Azok a napok, amelyekben életemet leélni kénytelen vagyok,
elmulásukig arra fognak esküdni, hogy a szív melegét és jóságát
nem lehet a vakságtól, érzékenységtől és szerénységtől
elválasztani. Az okosságot nem tudják elképzelni hidegség nélkül, az
éleselméjűséget hamisság és az erőt durvaság nélkül. Csak ne
volna olyan fülledt és elhasznált az a levegő, amelyben e fölfogás
evangelistái élnek. Sokszor gondolom, hogy a mi időnknek gyakran
legbecsületesebb és legderekabb emberei még mindig a halott
ideálok régi divatú ruhájában járnak, e stílus szerint igazítják
mozdulataikat, lépésüket, magatartásukat és új reményeik fényét
erőszakos állhatatossággal ez elposványosodott fölfogás
gyertyapislákolása szerint nevezik el. Már nem tudnak úgy
gondolkodni, ahogyan elavult meggyőződésük szerint vélik, hogy
gondolkodniok kell, az új tapasztalatokat a régi névvel jelölik meg,
igaznak akarják elfogadtatni, amit már régóta nem hisznek és
magukban és másokban dícsérik azt, amit már elkezdtek megvetni.
– Ez az én rongyaimnak véletlen igazolása, – feleltem. – De nem
tartom fontosnak ezt az itéletet. Azt hiszem, mindig így volt és
mindig így lesz. Nem hiszek az úgynevezett idők változása
fontosságában és egyetlen korszakot sem tartok réginek egy
másikkal, mint újjal szemben. Sohasem volt még ifjúság, amely a
maga idejét ne tartotta volna újnak az apái régi korával szemben. Aki
a maga lénye háztartásának rossz helyzetéért a viszonyokat okolja,
nem érti meg sem magát, sem a kort. Minden idő minden embernek
ugyanazt kinálja. Csak attól függ, hogy kiről van szó. Azt hiszem,
hogy Ádám óta egészen a mi együttlétünk ez órájáig sohasem az
volt a döntő a világon, régi-e valami avagy új, hanem csak az, hogy
igaz volt-e vagy hamis. Azt hiszi, hogy szívemben csupa
elkeseredett ellenmondással, azért járok rongyokba burkolva a
világban, mert az emberek sokkal rosszabbak, sokkal
nyomorultabbak vagy sokkal érdemetlenebbek arra, semhogy
kitarthassak a körükben? Egyedül akarok lenni és azt akarom, hogy
ne akadályozzon senki, legkevésbbé mulandó mű iránt való saját
kötelességeim, amelyeket a közösség az emberekkel könyörtelenül
és joggal megkövetel. Ami azonban engem a magányosságba űz, az
a várakozásom, hogy a világon nincs fönségesebb, nincs
hatalmasabb és nagyszerűbb az embernél. Félek, hogy eljöhet a
nap, amely arra csábít, hogy az események kuszáltságában ne
tudjam áttekinteni az egészet vagy hogy saját érdekeim sarokba
szorítanak. Aki azt állítja, hogy az élet tarka és piszkos utcáinak
nyugtalansága nyitotta ki a szemét az emberek aljassága iránt, az
előbb mondja meg, hogy mit keresett köztük. A csalódások okául
akárhányszor arra jöttem rá, hogy az ok a saját, mulandó haszon
volt, amelyet nem találtak meg. Azt akarom, hogy ne zavarjanak az
ember fönségességében való hitemben, ez minden. Milyen sorsot
készítenek nekem az emberek, azzal éppen oly keveset törődöm,
mint a ruhámmal. Minél többet ismerek föl az értékükből, annál
gazdagabb lesz az életem.
– Maga boldog ember, – mondta Teja nyugodtan és egyszerűen,
– de én nem tudok úgy érezni és gondolkodni mint ön, mert nagyon
sokat szenvedtem.
Minden erőmre szükség volt, hogy ura lehessek a
meghatottságnak, amely e szavakra elfogott. Azokban a
pillanatokban vagyunk a leggyöngébbek, amelyekben valami emberi
szenvedés ténye meggyőződésünk körébe nyomul és becsült
emberekkel érintkezve mindig elkövetjük azt a hibát, hogy
meghatottságból gyors engedményt teszünk. Pedig ezek a
gyöngeségszülte engedmények a végzetes kezdete minden
elkövetkező félreértésnek, sőt csalódásnak és a keservesen
közeledő szakításnak. Elveszik tőlünk minden okos közösségnek
legfontosabb előföltételét, belső szabadságunkat. Kis idő mulva
tehát így feleltem:
– Nos, most ön fog engem szívtelennek nevezni, mert nem
hiszem el, amit mond. Az ön arcáról nem olvasható le az a
szenvedés, amely a valóságban elrabolhatja tőlünk emberektől az
emberek szeretetét. Elhiszem, hogy sokat kellett szenvednie, de kit
vádol joggal? Sajnálatraméltó szüleit, azt a rokonát, aki
nyomorúságában csak a maga javát kereste, a férfit, akit elhagyott,
vagy valamelyik későbbit, akitől talán szintén megvált, anélkül, hogy
mint mondja, világosan meg tudta volna különböztetni azokat az
érzelmeket, amelyek a válást okozták? Vagy éppen az életet, a
lelkileg kiskorúaknak és mindazoknak meg nem fogható
adóskönyvét, akik nem mernek saját keblüknek kamráiba nézni?
Nem, az ilyen baj és szenvedés erős és gazdag élet alkotórésze és
előbb-utóbb csaknem jóleső fájdalommá válik. Még a halál sem tud
olyan sebet ütni, amely be nem gyógyulna. A kiengesztelhetetlen
szenvedés vallomásairól ellenben nem tud meg a világ semmit, mert
le van pecsételve azoknak az ajkuk, akik ezt a vallomást
megtehetnék, a büszkeség zárja le ajkukat, míg gyalázatukat és
fájdalmukat a föld betemeti. Nincs joga, hogy azt mondja, sokkal
többet szenvedett, semhogy még nagyot és jót tudna elvárni az
embertől.
Teja rám tekintett és szemében kiváncsiságot és kétkedést
láttam, de annak a kellemetlen érzésnek árnyékát is, amely elfog
bennünket, ha érzelmeink készséges bevallása után
visszautasításban részesülünk. De föllángolt mellette a
várakozásnak az a fénye, amely csak női szemben csillan föl,
igéreteket árul el és fogékonyságot és megfelel ama férfi szeme
csillogásának, aki igéretet ad és egyszersmind bebizonyítja akaratát
a cselekvésre. Szótlanul kérdezett, de könyörtelen kihivással és
éreztem, hogy beszélnem kell, mert meg kell mondanom, milyen
szenvedésről szóltam és mi az, ami nekem elhamarkodottnak
tűntette föl a bajából levont következtetést.
Ekkor mintha forró szél csapott volna le reám a magasból, ahová
hogy meg ne haljak, szegény életem elhagyottságában fölemeltem a
szememet. Bizonytalanul éreztem, hogy már csak Isten tudta volna
eldönteni, magamért beszéltem-e vagy azok kedvéért, akik
szenvednek. Csak aki a meghatottság szenvedélyes tüzét ismeri,
tudja, hogy vannak pillanatok, amelyekben a maga ügyének védője
összeolvad az üggyel, amikor csakis ezt szolgálja. Ezek életünk
legtisztább és legfönségesebb pillanatai; a nő lelke nem részesülhet
bennük és a lényükben levő ez a különbség eredete a nemek
minden ellenségeskedésének.
– Teja, – mondám, – a szenvedés, amelyért nincs
kiengesztelődés, azoknak van föntartva, akiknek szerelmi ereje és
korlátlan odaadásuknak hevessége makulátlan volt és akik
mindkettőt folyamként ontották, de egész értékük izzó
föláldozásában mégis visszataszították és megvetették őket. Nem
akárki tette ezt meg velük, hiszen nagy szív nem adja magát oda
tévedésből, hanem ugyanaz, aki igazában érdemes volt erre a
szeretetre és odaadásra. Csak itt kezdődik meg valamely végzet
sötétsége, amelyben az elvérző szerelem nem tud meggyógyulni,
hanem forrása, ha pillanatokra kialszik a szerelem tudata, mint
emésztő gyűlölet tovább buzog. Ilyen szíveknek nem adatott meg az
a menekülő út, amelyet tragikus szánalmában odakínál az élet
azoknak, akik gyógyulást képesek találni annak a szeretett
embernek megvetésében, lealacsonyitásában és végre
elfeledésében, aki elfogadni, viszonozni és mégis megvetni tudott.
Nem, a kegyetlenül kiválasztott elől elzárja ezt az utat soha nem
nyugvó igazságossága a látó szerelemnek, amely nem tud kevésre
becsülni azért, mert őt nem becsülték. Megérti-e ön, mit jelent az, ha
széttapossák az ember legnemesebb büszkeségét és ha telibe
találják egész életét? Hogy a szerelem égi tüze az ajakon halálos
gyülöletté változik, hogy még a világon a legszentebbnek, a maga
gyermekének megpillantására is kölcsönhatásuk irtóztató
közösségével fojtogatja a gyűlölet és a szerelem az élet forrását és
hogy majd boldog reménység, majd emésztő elkeseredettség mérge
röpíti gyújtogató szikráját abba a tiszta világba, amelyben
gyermekszemek a jövőt tárják föl a boldogoknak. Hogy a kiáltás a
mélyből: szeretlek! azt jelenti: gyűlöllek! Hogy az ezer kínban
megszületett kiáltás: megöllek! úgy hangzik, mintha ezt mondaná:
áldom erős életedet! És mi akadályozza meg az ilyen szívet, hogy
békéje legyen? Nagy igénye, csak értéke! Teja, az Isten, aki
megnyitotta lelkünk forrását, amelyből ez a sötét erő új fölismerés
fényében áramlik, ilyen szívet nem tud már megváltani. Ez a szív
egy új Istennek fájdalomtól izzó világbölcsője…
Fölugrottam és szavaimmal kirúgtam magam alól a támaszt,
amelyet azok a hasznos és okos korlátozások adnak meg nekünk,
amelyek közt az emberek gondolataikat barátságosan kicserélve,
közönségesen érintkezni szoktak egymással. A most bekövetkezett
csöndben, mert Teja hallgatott, magamba szívtam a napfényt, mint
valami boldog beteg és bár nem magamról beszéltem, leleplezettnek
éreztem magamat. Elhagyott utakra gondoltam, amelyek
napfényben úszó hegycsúcsokon visznek át és a magányosságra,
mint valami égi forrásból merített italra. De amikor a leány lesütött
szemét, a száját és a kezét láttam, ezt gondoltam: bolond vagyok!
Bizonyára ennek az okos leánynak csaknem kijózanítóan ható
eszessége okozta, hogy érzelmeim ellenmondás és csodálat
keverékében olyan zabolátlanul lobbantak lángra, mintha valami
ősrégi akadály megostromlásáról lett volna szó. Világosan éreztem
most, hogy hirtelen sokkal fontosabbnak tartottam, vajha Teja inkább
indító okaimat értené meg, mintsem azt, amit mondottam. Kezével
átölelte magasra fölhúzott térdét és még mindig maga elé nézett,
mintha messzibb keresne valamit, aminek magától kell pihenő
tekintetének körébe jutnia. Végtelenül közönbössé vált számomra,
meggyőztem-e őt, sőt már azt sem tudtam, miről is akartam őt
meggyőzni. Valami egészen új, kimondhatatlan fontos dolog állott az
óra homlokterében. Nem csupán azért beszéltem, mert a napfény
csöndes aranyos nevetése ott világított ebben a szőke hajban és
mert ennek a nyaknak hajlása kedves árnyas út gyanánt a viruló élet
ismeretlen tájaira csábított vagy mert térdén nyugvó meleg és
halvány keze, homlokomat és szememet magafeledté és
nyugtalanná tette…
Amikor Teja egy idő mulva föltekintett és szemünk találkozott,
ránk szakadt az élet, mintha égi fénnyel és könnyekkel teli izzó
mélységbe zuhantunk volna, megfogva és kergetve egy világakarat
forró lehelletétől, amely letepert minden észt, meggondolást és
ellenállást.
Mellettem egy hang, az esti nap és madárfütty ébresztett föl, a
magas fű az ég hűvös kékjében hajladozott és lassan, miként ha
bátorság és szomorúság kedves fátyolán át, visszatértek hozzám a
világi dolgok. Közepettük vidám földi biztosságban legyőzhetetlen
mindenhatóság diadalmaskodott, amelynek nincs neve, tehát Teja
nevet adtam neki.
Állát mindkét kezére támasztva, könyökével a fűben, mély alt így
szólt hozzám:
– Még a nevedet sem tudom.
*
Amikor az erdő felől az országúton át bekanyarodtunk a kastély
bejáratához, az esti szürkület első árnyékai már ott pihentek a
magas kapu falának szögleteiben, amely bükkök árnyékában öregen
és szürkén az udvarra szolgált. Ennek közepén kútnak kereksége
emelkedett és a kastély kőlépcsőjén ott nyugodott a vörös esti felhők
viszfénye. A gondnok, széles ember nagy, barna körszakállal, amely
sűrű volt és színes, mint valami mézeskalács, Teja elé jött és amikor
utasítást kapott tőle, hogyan kell engem elszállásolnia, meglepődés
nélkül szolgálatkészen és barátságosan biccentett. Mivel
visszautasítottam Teja kivánságát, hogy más ruhát vegyek
magamra, csak mint ujonnan szerződtetett embert vezethetett be,
akinek az ő futólagos kegyessége munkát igért. Ezt mondta:
– Amíg valami más nem akad, a kertben kell munkát adni ennek
az embernek. Később még beszélünk a dologról. A déli épületben
engedjen át neki egy szobát, ahol egyedül lehet és adjon neki
mindent, amire szüksége van, ruhát is.
Barátságos pártfogásának természetessége olyan kedves és
elfogulatlan volt, annyira minden megalázás nélkül reám vagy reá
nézve, hogy amikor Teja e szavak után köszönés és minden további
beszéd nélkül magunkra hagyott és bement a házba, könnyű szívvel
és vidámabban követtem a férfit, mint ahogyan a mi utunkat tettem
meg. Így akartam és nem másként, mert amikor Teja útközben azt
indítványozta és ajánlotta nekem, hogy mint az ő vendége és
társadalmi állásom külső jelével időzzem a kastélyban, mély kínzó
aggodalom fogott el és egy pillanatra úgy láttam, mintha kísértő
lépkedne mellettem, aki föladatául tűzte ki, hogy életem
szabadságából olyan világ élvezettel teli jótéteményei közé
csábítson, amelytől féltem. Teja gúnyolódása ártatlan volt, de mégis
sértett és makacsságom nőtt. Tehetetlennek láttam magamat arra,
hogy kivánságával szemben kimagyarázzam magamat.
– Azt gondolod talán, hogy mint te hiszed, szegénységből vagy
kedvtelésből élem az életemet? Fáj, hogy valamit meg kell tőled
tagadnom, hiszen a szerelemnek semmi sem nehezebb, mint a
visszautasítás, de hidd el, maradok ami vagyok. Nekem többet jelent
a szabadságom, mint másoknak az élelem, a fény vagy a jólét, én
nem e világba való vagyok és megront még ha vendégként lépek is
beléje. Én a te lényednek vagyok a vendége, a mosolyodnak, a
szépségednek, a szívednek, de nem a annak az embernek
szobájában…
Ekkor jobban megértett.
– Belenyugszom, – mondá, – hiszen a birtokon dolgozhatsz,
akkor magad teremted magadnak a vendégjogot, de egészen nem
áll, amit mondasz.
Mindketten hallgattunk és mindenikünk bizonyára a maga módján
követte a gondolatokat, amelyek büszkeséggel, reménységgel és
szenvedéssel vitték annak a szerelemnek a jövendőjébe, amelyet
nem megfontolás, vizsgálódás és szándékosság keltett életre.
Persze nem kerülhettem el egészen, hogy ruhámat kicseréltem
és kiegészítettem, hogy elhanyagoltságom bizonyos jólétté változott,
renddé, amely alkalmazkodott a helyzethez, amelyet mint a bírtok
munkaközösségének egyik tagja elfoglaltam. Alkalmazkodtam
annyira, amennyire jövendő társaim méltósága megkivánta, de nem
másként, csak ahogyan megtettem volna és mindig megtettem, ha
valami foglalkozást vállaltam, hogy pénzt szerezzek vagy nyugalmat
találjak, amelyet annyiszor kerestem, de soha el nem tűrtem.
Amikor bevezettek a szobába, amelyet lakóhelyemül jelöltek ki,
alighogy az ajtó bezáródott a kalauzom mögött, leheveredtem az
ágyra és láttam az alkonyat terjeszkedését a térben és hallottam
szívem életlépéseit. A nyitott ablakon át csak néha hatolt be valami
hang hozzám. A kis kastély, mint a szikla a tenger zöld hullámai
közepett, magányosan és a világ lázas életétől megkimélve állott az
erdőben. Egyszer éneklő hang vonult el fölöttem, mintha az erdőből
kelt volna életre, a szabad ég alatt szárnyát csattogtatta és ismét az
erdőben merült el. Az esti égen egy csillagot láttam megvillanni,
világos volt mint a sárgaréz és felhőláncolatok vöröses fönsíkja
fölött, amely mint valami hegység mozdulatlanul állott a nyugati
égen, egymagában halvány ezüstkék színben ragyogott.
Csaknem fájdalmasan bensőséges és mesésen édes alt hang
szólt bele alaktalan gondolkodásomba; az a hang volt, amely e nap
reggelén ébredt föl és amely, mint ahogyan gátszakadás után
elárasztja a tenger a mezőt és a szántóföldet, élettel teli világot
terített ki az enyémmel szemben. Minden új volt és én nem voltam
fölvértezve és ezt gondoltam: Olyan vagyok, mint aki hirtelen
fölébred és ellenséget lát maga előtt teljes fegyverzetben és amikor
harcra készülődik érzi, hogy a szíve ki fogja őt szolgáltatni ennek az
ellenségnek. Így tehát tanácstalan engedelmességgel egyszerre
befelé és kifelé harcol. A kastélyhoz szolgáló úton Teja
megnyugodva és bátran, tele kedves határozottsággal még sokat
beszélt magáról és sorsáról. Ahol nálunk a csodák borongós világa
kezdődik, ott kezdődik nálatok asszonyoknál a dolgok megértése,
gondoltam, az álmodozó húzódozással ti az elérhetőnek tiszta
valóságát állítjátok szembe, a megtörténtet kötelességteknek
gondoljátok, én azonban a megtörténtet csak akkor értem meg,
amikor újra megfoglak és amikor ismét megtartlak magamnak, a
csoda újra izzani kezd.
Azután Teja beszédét hallottam és másodszor is füleltem
szavaira, amelyeknek csengését fölújítottam emlékezetemben. De
különös, hogy sem mozdulatait, sem hanghordozását nem tudtam
fölidézni, mihelyt másról volt szó, mint szerelemről. Megtudtam, hogy
az emelkedés és a sülyedés sok éve után jó órában találkozott azzal
a férfival, akinek födele alatt időztem most és hogy ez csaknem atyai
szeretettel, mert sokkal idősebb volt mint ő, szenvedélyes
akaratának hűvös komolyságával, okosságával, gazdagságával
magához tudta láncolni az életét. Teja nagy megbecsüléssel,
melegséggel de tűz nélkül, megfontolva beszélt róla és óvatosan,
mint ahogyan olyan jószágról beszél az ember, amelynek birtokát
nem a maga szívének köteléke biztosítja a számára. E férfi
szerelmét nem említette, de kicsendült mindenből, amit a maga
vonzalmáról mondott ő iránta. Képe olyan ember alakjaként tűnt föl,
mint aki megértvén e különös leányt, az okosan öregedő ember
lemondó élnitudását összekapcsolta szerelmével minden
élvezetben, amelyet gazdagsága kinált. Megreszketett a szerelmem,
ha itt Teja lényéről gondolkodtam és szememet lezártam ebben az
alaktalan reménységben, amelyet mámorából merít a fiatalság.
*
Boldogsággal és nyugtalansággal teli nyárvégi napok után
közeledett az ősz. Szobámban egy asztal volt, egy nádfonású
karosszék, egy faágy fehér vánkoshuzatokkal és egy ősrégi faragott
parasztszekrény, amely csodálatosan be volt festve és amelyet
kikezdett a szú. Ablakomból mezőn át a közeli erdőt láttam, mögötte
izzott az esti nap, amelynek fénye a fák megritkult koronáin át
sárgásan hullott a szobámba. Ilyenkor a kis helyiséget meleg, szeles
őszi napok túlélénk világossága árasztotta el, világos kietlensége
barátságos volt és mégis nyugtalanított.
Mivel úgy osztottam be a munkámat, ahogyan akartam és bőven
volt időm, asztalom megtelt könyvekkel, amelyeket Teja adott, akit
naponta láttam. A kastély urának könyvtárszobájából vittem el a
könyveket és éjjeli lámpám gyakran csak virradatkor aludt ki. De
nem tudtam magamat összeszedni és rossz lelkiismerettel élveztem
e napok boldogságát. Megértettem ennek az életnek a jótéteményét,
de úgy éreztem, mintha jogtalanul élvezném, nem bíztam az
állandóságában és a jólét minden kiélvezése után tanácstalan
szomorúság fogott el. Úgy tetszett, mintha e javakkal való gyors
közösségem hűtlenné tett volna sorsom iránt, mintha most keltem
volna útra, tűrt vendégként gyakran barangoltam a csöndben és
voltak órák, amikor nem szívesen látott betolakodónak hittem
magamat, aki büszke is és hálátlan is. De Teja kedvéért nem tudtam
eltávozni, bár minden óra, amelyet vele töltöttem, éppen úgy kínzott,
mint ahogyan boldogított. Olykor ő is tanácstalan volt, de én nem
láttam, mert az ő tanácstalanságának nem az volt az oka, ami az
enyémnek. Így tehát csakhamar visszanyerte azt a fölsőbbségét,
amelyet találkozásunk első órájától gyűlöltem benne, mert lényének
nem mélyéből, hanem annak hidegségéből fakadt. Ami azonban
mindig újra kibékített, az a becsületessége volt. Sohasem akart
másnak föltűnni, mint aminő volt és apró hiúságait és hazugságait
maga vetette meg a legjobban és kigúnyolta, még mielőtt hatásuk
hasznát észrevette. A legveszedelmesebbé azonban az a csoda
tette, hogy csaknem szemérmetlenséggel határos ragaszkodása az
őszinteséghez sohasem törte át női bájának varázsát,
leplezetlensége mindjárt megtalálta a fátyolt is, amely betakarta. Jól
ismerte az élvezetben való elmerülés megrontó édességét, de a test
és a vér táplálékát úgy vette és adta, mint a lélekzetet és nem mint
valami ételt. Lelke azonban minden nyiltsága mellett is átláthatatlan
volt, gyakran dideregtem és szenvedést okoztak reménykedéseim,
amelyekkel magafeledt odaadásról és esztelen gyöngédségről
álmodoztam. Olykor úgy éreztem, mintha kitaszítottak volna valami
meleg világból, amelynek embereit le kellett néznem, mert szükség
volt az erőmre. De titokban olyan szemek tekintettek reám,
amelyeknek pillantása melegített, a gyámoltalanokra gondoltam, a
védtelenül érzőkre, az átlátszókra ama tehetetlenségükben, hogy
nem tudnak a gazdag lélek túlereje ellen védekezni. Bár gyöngének
találtam, mégis áldottam őket. Úgy éreztem, mintha ezzel az
átlátszósággal a világot az égi fény árasztaná el, amely meggyógyít
bennünket.
A megbecsülés, amelyet Teja személyem iránt mutatott, gyakran
lenézéssel teli gúnyolódó ellenmondással váltakozott, de tisztelete
szerelmem iránt makulátlan volt. Rajta láttam először azt a csodát,
hogy a nő valósággal át tud élni olyan érzelmeket és állapotokat,
amelyek alapjában nincsenek meg neki; ez a képesség
megtagadtatott a férfitől, bárhogyan hiszi is, hogy rendelkezik vele.
De minél inkább megtanultam az elzárkózást, szerelmem tüze annál
fájdalmasabban égett és dohogott keblem elsötétített kamráiban.
Egyszer, komoly beszélgetés után, amelyben mindketten
eltitkoltuk egymás előtt, hogy a közeli jövőre való gondolat kínoz
bennünket, úgy vettem észre, mintha Tejanak visszaemlékezése
első napunkra titkos szégyen tövisét hagyta volna hátra benne.
Habozva így szólt hozzám:
– Különös, mily gyorsan leomlik előtted minden korlát.
– Sohasem törődtem sokat az erkölcsösséggel, Teja, – feleltem,
követve egy gondolatot, amelyet megpendített bennem. Nem értette,
miért válaszoltam így és kétkedve mondta:
– Ez nagyon gőgösen hangzik.
– Lehet, hogy önhitség, de lehet az is, hogy áhitat mondatja el
velem, amit szavaid hatása alatt magamban megélek. Én csak az
igazságot mondom, itéletet mondj te, vagy aki akar. Minél többet
gondolkozom azon, mily belső állapot az előföltétele annak, hogy
erkölcsösségre törekedjék az ember, annál hevesebben utasítom
vissza a közösséget az ilyen lelkekkel.
Egy pillanatra megértett és rám mosolygott és valahányszor rája
gondolok, eláraszt a fény, amely ezzel a mosollyal szeméből
kisugárzott.
A házbeliekkel mintha csak álomban találkoztam volna és csak
úgy emlékszem reájuk, mintha képen láttam volna őket. Akik velem
egy sorban voltak, kitértek előlem, a kertész és a gondnok kiváló
udvariassággal bánt velem. Úgy látszott, hogy Teja szeszélyességét
mindenki éppen úgy megszokta, mint ahogyan számított valami
közeledő erőre, amely elnézően, de mindenhatóan korlátozni tudja.
Csak egy agg háziszolgára emlékszem világosan, aki kísértetként
járta végig az udvart és a szobákat és senkisem tudta,
tulajdonképpen mi is a dolga. Izgatott, hogy mindenkivel a
fönhéjázás kihalt formaságával érintkezett és kiengesztelhetetlen
ellenségemet láttam benne. A hátrahagyott őrt néztem ki belőle, a
rosszindulatú besúgót és Teja ellenségét. De Teja kinevetett, amikor
ezt egyszer szóbahoztam.
– Itt mindenki ellenséges indulattal van irántam, csak maga a
gazda nem, de irántam való hajlandóságában ellentétbe kerül
családjának hagyományával, a szélkakastól egészen apáinak sírjáig.
Ő nem látja, vagy nem akarja látni, én azonban tudom és nem
csalódom. Száz ellenséges szellem sora közt vándorol itt a lelkem,
de állom a harcot és nem ringatom magamat hamis biztosságban.
Aki sorsára bizza magát, mert azt hiszi, hogy szeretik, már félig
elvesztette a játszmát.
– Mennyi békétlenséggel lehet tele az életed, Teja.
– Igen, így kell lennie. Talán lemondtam arról, hogy belső
nyugalmat szerezzek magamnak, nem hozok többé áldozatot.
– Okos vagy, Teja.
– Akit rossznak tartunk, azt szoktuk úgy, mint te most mondtad,
okosnak nevezni.
– Az én szavamból nem szólt szemrehányás, hanem inkább
némi irigység.
– Ti a szemrehányást mindig azzal az állítással leplezitek, hogy
nincs benne szemrehányás. Nem tudom, vajjon te magad okos
vagy-e abban az értelemben, ahogyan szeretnéd, hogy okosnak
tartsanak, de mert van eszed… várj. Az élet majd okossá tesz és
talán senkit sem fogsz többé irigyelni. Fiatal vagy, ez az egész és
ezért nem tudod még ezt megérteni.
– Azt hiszed, így van? – kérdeztem. – Annak bevallására
kényszerítesz, hogy mégsem csak irigység unszolt a kijelentésemre.
Irigységgé csak az a kivánságom tette, bárcsak én is olyan
zavartalanul boldog lehetnék, mint amilyen te tudsz lenni. Nem is
fiatalságom mond neked ellen. Ha a megöregedés azt jelenti, hogy
olyan értelemben lesz okos az ember, mint amilyen te vagy, akkor én
nem leszek öreg.
– Így beszélsz, mert fiatal vagy. Nem jutunk a végére. Hát mi más
volt, ha nem irigység?
Ekkor hideg szélfuvallatként elfogott a bizonyosság, hogy mily
izgatottan hangzott ez a kérdés és hogy magam is titkolt
elkeseredéssel beszéltem. Éreztem, hogy régen elmondtam
mindent, amit elmondhattam és hogy éppen úgy nem fog rajtam
segíteni, ahogyan eddig sem segített. Szomorúság és bátortalanság
fogott el és megértettem a kijózanodást és kisebbítést, amely a nő
lényéből származik. De hol mindenütt kerestem az engem
szorongató kétség megfejtését! Csak ott nem, ahonnan származott,
mert aki jobban szeret, annak az a végzete, hogy ami a szeretett
embernél hiányzik, ameddig még hisz, a maga hibájául rója föl.
Lefelé mentünk az őszi erdei úton, amely a halastóhoz vitt. Teján
füstszínű selyemből készült hosszú, nehéz ruha volt és a hajában
fénytelen arany pánt. Szép nyaka födetlen volt és cipője vékony
posztónál finomabb vörös bőrből.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like