43219
43219
download
https://textbookfull.com/product/the-complete-redux-book-boris-
dinkevich/
https://textbookfull.com/product/the-complete-book-of-triathlon-
kleanthous/
https://textbookfull.com/product/the-complete-recovery-room-book-
anne-craig/
https://textbookfull.com/product/ng-book-the-complete-book-on-
angularjs-1st-edition-ari-lerner/
https://textbookfull.com/product/ang-book-2-the-complete-book-on-
angular-2-1st-edition-nate-murray/
ng-book The Complete Guide to Angular Nate Murray
https://textbookfull.com/product/ng-book-the-complete-guide-to-
angular-nate-murray/
https://textbookfull.com/product/euclid-s-elements-redux-john-
casey/
https://textbookfull.com/product/ng-book-the-complete-guide-to-
angular-5-nathan-murray/
https://textbookfull.com/product/ng-book-the-complete-guide-to-
angular-9-nathan-murray/
https://textbookfull.com/product/the-complete-google-guide-
book-1st-edition-black-dog-media/
The Complete Redux Book
Everything you need to build real projects with Redux
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Code Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Chapter 5. WebSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Basic Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Redux Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Code Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Complete WebSocket Middleware Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Chapter 6. Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Test Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Testing Action Creators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Async Action Creators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Reducer Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Testing Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Integration Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
What Is Flux?
Before diving into Redux, we should get familiar with its base and predecessor, the Flux architecture.
“Flux” is a generic architecture or pattern, rather than a specific implementation. Its ideas were
first introduced publicly by Bill Fisher and Jing Chen at the Facebook F8 conference in April 2014.
Flux was touted as redefining the previous ideas of MVC (Model–View–Controller) and MVVM
(Model–View–ViewModel) patterns and two-way data binding introduced by other frameworks by
suggesting a new flow of events on the frontend, called the unidirectional data flow.
In Flux events are managed one at a time in a circular flow with a number of actors: dispatcher,
stores, and actions. An action is a structure describing any change in the system: mouse clicks,
timeout events, Ajax requests, and so on. Actions are sent to a dispatcher, a single point in the
system where anyone can submit an action for handling. The application state is then maintained
in stores that hold parts of the application state and react to commands from the dispatcher.
³http://www.businessinsider.com/these-10-inventions-were-made-by-mistake-2010-11?op=1&IR=T
⁴http://survivejs.com/blog/redux-interview/
⁵https://twitter.com/acdlite
⁶http://elm-lang.org
⁷http://redux.js.org/
Chapter 1. Core Concepts of Flux and Redux 7
Flux overview
This flow ensures that it’s easy to reason about how actions flow in the system, what will cause the
state to change, and how it will change.
Consider an example from a jQuery or AngularJS application. A click on a button can cause multiple
callbacks to be executed, each updating different parts of the system, which might in turn trigger
updates in other places. In this scenario it is virtually impossible for the developer of a large
application to know how a single event might modify the application’s state, and in what order
the changes will occur.
In Flux, the click event will generate a single action that will mutate the store and then the view. Any
actions created by the store or other components during this process will be queued and executed
only after the first action is done and the view is updated.
Facebook’s developers did not initially open-source their implementation of Flux, but rather released
only parts of it, like the dispatcher. This caused a lot of open-source implementations to be built by
the community, some of them significantly different and some only slightly changing the original
Chapter 1. Core Concepts of Flux and Redux 8
patterns. For example, some moved to having multiple dispatchers or introduced dependencies
between stores.
To better understand Redux, let’s imagine an application that helps us manage a recipe book. The
Redux store is where the recipe book itself will be saved, in a structure that might be a list of recipes
and their details.
The app will allow us to perform different actions like adding a recipe, adding ingredients to a
recipe, changing the quantity of an ingredient, and more. To make our code generic, we can create a
number of services. Each service will know how to handle a group of actions. For example, the book
service will handle all the add/remove recipe actions, the recipe service will handle changing recipe
information, and the recipe-ingredients service will handle the actions to do with ingredients. This
will allow us to better divide our code and in the future easily add support for more actions.
To make it work, our store could call each of our services and pass them two parameters: the current
recipe book and the action we want to perform. Each service in turn will modify the book if the
action is one it knows how to handle. Why pass the action to all the services? Maybe some actions
⁸https://github.com/voronianski/flux-comparison
Chapter 1. Core Concepts of Flux and Redux 9
affect more than one service. For example, changing the measurements from grams to ounces will
cause the ingredients service to recalculate the amounts and the recipe service to mark the recipe as
using imperial measurements. In Redux, these services are the reducers.
We might want to add another layer, the middleware. Every action will be first passed through a list
of middleware. Unlike reducers, middleware can modify, stop, or add more actions. Examples might
include: a logging middleware, an authorization middleware that checks if the user has permissions
to run the action, or an API middleware that sends something to the server.
This simple example shows the base of Redux. We have a single store to control the state, actions to
describe the changes we want to make, reducers (services, in our example) that know how to mutate
the state based on the requested action, and middleware to handle the housekeeping tasks.
What makes Redux special, and sometimes hard to understand, is that reducers never change the
state (in our case, the recipe book), since it is immutable. Instead, the reducers must create a new
copy of the book, make the needed changes to the copy, and return the new, modified book to the
store. This approach allows Redux and the view layers to easily do change detection. In later chapters
we will discuss in detail why and how this approach is used.
It is important to note that the whole application state is kept in a single location, the store. Having a
single source of data provides enormous benefits during debugging, serialization, and development,
as will become apparent in the examples in this book.
Redux overview
Chapter 1. Core Concepts of Flux and Redux 10
Redux Terminology
1 {
2 type: 'INCREMENT',
3 payload: {
4 counterId: 'main',
5 amount: -10
6 }
7 }
Since these objects might have some logic and be used in multiple places in an application, they are
commonly wrapped in a function that can generate the objects based on a parameter:
As these functions create action objects, they are aptly named action creators.
Reducers
Once an action is sent to the store, the store needs to figure out how to change the state accordingly.
To do so, it calls a function, passing it the current state and the received action:
Chapter 1. Core Concepts of Flux and Redux 11
This function is called a reducer. In real Redux applications, there will be one root reducer function
that will call additional reducer functions to calculate the nested state.
Reducers never modify the state; they always create a new copy with the needed modifi-
cations.
Middleware
Middleware is a more advanced feature of Redux and will be discussed in detail in later chapters.
The middleware act like interceptors for actions before they reach the store: they can modify the
actions, create more actions, suppress actions, and much more. Since the middleware have access to
the actions, the dispatch() function, and the store, they are the most versatile and powerful entities
in Redux.
Store
Unlike many other Flux implementations, Redux has a single store that holds the application
information but no user logic. The role of the store is to receive actions, pass them through all
the registered middleware, and then use reducers to calculate a new state and save it.
When it receives an action that causes a change to the state, the store will notify all the registered
listeners that a change to the state has been made. This will allow various parts of the system, like
the UI, to update themselves according to the new state.
Chapter 1. Core Concepts of Flux and Redux 12
General Concepts
Redux is about functional programming and pure functions. Understanding these concepts is crucial
to understanding the underlying principles of Redux.
Functional programming has become a trendy topic in the web development domain lately, but it
was invented around the 1950s. The paradigm centers around avoiding changing state and mutable
data—in other words, making your code predictable and free of side effects.
JavaScript allows you to write code in a functional style, as it treats functions as first-class objects.
This means you can store functions in variables, pass them as arguments to other functions, and
return them as values of other functions. But since JavaScript was not designed to be a functional
programming language per se, there are some caveats that you will need to keep in mind. In order
to get started with Redux, you need to understand pure functions and mutation.
1 function square(x) {
2 return x * x;
3 }
4
5 Math.sin(y);
6
7 arr.map((item) => item.id);
If a function uses any variables not passed in as arguments or creates side effects, the function is
impure. When a function depends on variables or functions outside of its lexical scope, you can never
be sure that the function will behave the same every time it’s called. For example, the following are
impure functions:
Chapter 1. Core Concepts of Flux and Redux 13
1 function getUser(userId) {
2 return UsersModel.fetch(userId).then((result) => result);
3 }
4
5 Math.random();
6
7 arr.map((item) => calculate(item));
Mutating Objects
Another important concept that often causes headaches for developers starting to work with Redux
is immutability. JavaScript has limited tooling for managing immutable objects, and we are often
required to use external libraries.
Immutability means that something can’t be changed, guaranteeing developers that if you create an
object, it will have the same properties and values forever. For example, let’s declare a simple object
as a constant:
1 const colors = {
2 red: '#FF0000',
3 green: '#00FF00',
4 blue: '#0000FF'
5 };
Even though the colors object is a constant, we can still change its content, as const will only check
if the reference to the object is changed:
1 colors = {};
2 console.log(colors);
3
4 colors.red = '#FFFFFF';
5 console.log(colors.red);
Try writing this in the developer console. You will see that you can’t reassign an empty object to
colors, but you can change its internal value.
To make the colors object appear immutable, we can use the Object.freeze() method:
Chapter 1. Core Concepts of Flux and Redux 14
The value of the red property will now be '#FFFFFF'. If you thought that the value should be
'#FF0000', you missed that we changed the red property before we froze the object. This is a good
example of how easy it is to miss this kind of thing in real applications.
Here, once we used Object.freeze(), the colors object became immutable. In practice things
are often more complicated, though. JavaScript does not provide good native ways to make data
structures fully immutable. For example, Object.freeze() won’t freeze nested objects:
To work around the nature of our beloved language, we have to use third-party libraries like deep-
freeze⁹ or ImmutableJS¹⁰. We will talk about different immutable libraries later in the book.
The connection to different frameworks is done with the help of third-party libraries that provide
a set of convenience functions for each framework in order to seamlessly connect to Redux. The
library that we will use to connect Redux and React is called react-redux, and we will be covering
it extensively later in the book.
Using this structure, let’s build a simple application that will implement a counter. Our application
will use pure JavaScript and HTML and require no additional libraries. We are going to have two
buttons that allow us to increment and decrement a simple counter, and a place where we can see
the current counter value:
1 <div>
2 Counter:
3 <span id='counter'></span>
4 </div>
5
6 <button id='inc'>Increment</button>
7 <button id='dec'>Decrement</button>
1 let state = {
2 counter: 3
3 };
To make our demo functional, let’s create a click handler for each button that will use a dispatch()
function to notify our store that an action needs to be performed:
We will come back to its implementation later in this chapter. Also, let’s define a function that will
update the counter’s value in the HTML based on application state received as an argument:
Since we want our view to represent the current application state, we need it to be updated every
time the state (and the counter) changes. For that, we will use the subscribe() function, which
we will also implement a bit later. The role of the function will be to call our callback every time
anything in the state changes:
1 subscribe(updateView);
We have now created a basic application structure with a simple state, implemented a function that
will be responsible for updating the HTML based on the state, and defined two “magic” functions—
dispatch() and subscribe()—to dispatch actions and subscribe to changes in state. But there is
Chapter 1. Core Concepts of Flux and Redux 17
still one thing missing. How will our mini-Redux know how to handle the events and change the
application state?
For this, we define an additional function. On each action dispatched, Redux will call our function,
passing it the current state and the action. To be compliant with Redux’s terminology, we will call
the function a reducer. The job of the reducer will be to understand the action and, based on it, create
a new state.
In our simple example our state will hold a counter, and its value will be incremented or decremented
based on the action:
1 // Our mutation (reducer) function creates a new state based on the action passed
2 function reducer(state, action) {
3 switch (action) {
4 case 'INC':
5 return { ...state, counter: state.counter + 1 };
6 case 'DEC':
7 return { ...state, counter: state.counter - 1 };
8 default:
9 return state;
10 }
11 }
An important thing to remember is that reducers must always return a new, modified copy of the
state. They shouldn’t mutate the existing state, like in this example:
1 // This is wrong!
2 state.counter = state.counter + 1;
Later in the book you will learn how you can avoid mutations in JavaScript with and without the
help of external libraries.
Now it’s time to implement the actual change of the state. Since we are building a generic framework,
we will not include the code to increment/decrement the counter (as it is application-specific) but
rather will call a function that we expect the user to supply, called reducer(). This is the reducer
we mentioned before.
The dispatch() function calls the reducer() implemented by the application creator, passing it both
the current state and the action it received. This information should be enough for the reducer()
function to calculate a new state. We then check if the new state differs from the old one, and if it
does, we replace the old state and notify all the listeners of the change:
Chapter 1. Core Concepts of Flux and Redux 18
Again, it is very important to note that we expect a reducer to create a new state and not just modify
the existing one. We will be using a simple comparison by reference to check whether the state has
changed.
One remaining task is to notify our view of the state change. In our example we only have a single
listener, but we already can implement full listener support by allowing multiple callbacks to register
for the “state change” event. We will implement this by keeping a list of all the registered callbacks:
This might surprise you, but we have just implemented the major part of the Redux framework. The
real code¹¹ isn’t much longer, and we highly recommended that you take half an hour to read it.
¹¹https://github.com/reactjs/redux/tree/master/src
Chapter 1. Core Concepts of Flux and Redux 19
We will change our previous state definition to be a constant that only defines the initial value of
the state:
1 const initialState = {
2 counter: 3
3 };
As you can see, we are using our reducer from before. The only change that needs to be made to the
reducer is the switch statement. Instead of doing:
1 switch (action)
Changes to
1 switch (action.type)
The reason behind this is that actions in Redux are objects that have the special type property, which
makes reducer creation and action data more consistent.
The Redux store will also give us all the features we implemented ourselves before, like subscribe()
and dispatch(). Thus, we can safely delete these methods.
To subscribe to store changes, we will simply call the subscribe() method of the store:
Chapter 1. Core Concepts of Flux and Redux 20
1 store.subscribe(updateView);
Since subscribe() does not pass the state to the callback, we will need to access it via store.getState():
The last change is in the dispatch() method. As mentioned previously, our actions now need to
have the type property. Thus, instead of simply sending the string 'INC' as the action, we now need
to send { type: 'INC' }.
Chapter 1. Core Concepts of Flux and Redux 21
The HTML
The JavaScript
Summary
In this chapter we briefly covered the history of Redux and Flux, and learned how Redux works at its
core. We also learned a bit about basic functional programming principles, such as pure functions
and immutability. As they are very important for our real-world applications, we will talk about
these concepts more later in the book. In the next chapter we are going to see how to actually work
with Redux by building a simple recipe book application.
Chapter 2. Your First Redux
Application
In the previous chapter we learned what Redux is and how it works. In this chapter we will learn
how to use it for a simple project. The code base created in this chapter will be used as the base for
all the examples in the rest of this book. It is highly recommended that you follow along with and
fully understand this chapter and its code before moving on to more advanced topics.
Starter Project
Modern client-side applications often require a set of so-called boilerplate in order to make devel-
opment easier. The boilerplate may include things such as directory structure, code transformation
tools like SCSS and ES2016 compilers, testing infrastructure, and production pipeline tools for tasks
such as minification, compression, and concatenation.
To ease the chore of setting up a new project, the open-source community has created dozens of
different starter projects. The larger ones, like react-redux-starter-kit¹², consist of over a hundred
files. We will use a much simpler boilerplate, just enough to cover all the concepts explained in this
book.
As our project will be pure Redux, it will require no React or related libraries. We will use Webpack¹³
as our main tool to handle all code transformation and production flow tasks.
Skeleton Overview
To start things off, let’s clone the starter project, install the needed packages, and verify that our
environment is ready:
¹²https://github.com/davezuko/react-redux-starter-kit
¹³https://webpack.js.org/
Other documents randomly have
different content
voltak. S ez nem elég a sárosiakkal szemben. A sárosi csak idegen
helyen úr, a nógrádi csak otthon úr. Horváthy puha volt és szerény,
Brunner úr csak mosolygott az ő dolgán.
– Óh, Istenem, mit tehetnék én ebben? A lányka feje magától is
beforr, de ha én megszakitom a barátságot Kürtössyékkel, azt aztán
senki se tudja többé összevarrni.
Horváthy tehát nem kapott elégtételt, hanem ellenkezőleg,
értesülvén panaszairól Kürtössyék, üldözni kezdték a szegény
családot. Ezer apró módja van ennek, kivált fürdőn, a hol az
embereknek nincsen dolguk.
Egy-egy szúró megjegyzés, egy fumigativ mosoly, egy maliciózus
tekintet, egy becsmérlő kézmozdulat a maga helyén, – ez mind vérig
hat, ez mind ölhet.
– Ah, mily nevetségesek! – jegyzi meg a kamarás úr.
– Miféle népek lehetnek? – tünődik más alkalommal a
kamarásné. – Bizonyosan fölvett név ez a Horváthy…
– Hm! – böffenti ki a kamarás úr, – a mi az asszony Horváthyját
illeti, talán nem is existált.
– És hogy öltözik ez az asszony, mint egy cocotte.
– A szegény lánykának ferdén van nőve az egyik válla, szegény
kis maskara!
– S ez a vén trottli úgy fest mellettük, mint egy nyugalomba
vonult uzsorás. Talán az is.
Igy disgustálták a villabelieket. S mondhatni, az egész villa
Kürtössyékkel tartott, mert hiába, az emberek az előkelőbbekhez
húzódnak szivesebben. Hisz ez által magok is előkelőbbeknek
látszanak.
A Horváthyak érezték ezeket a rosz szeleket. A legjobb emberek
is visszahúzódtak tőlük. Miért? Hát miért? Ejh, Istenem, a kamarásné
azt mondta egy izben, felbigyesztett ajkkal, mikor a Peregi
kisasszonyokat Horváthynéval látta beszélgetni:
– Ah, szegény Peregi kisasszonyok, de meg lehetnek szorúlva
barátnék dolgában!
Ebből aztán meg lehet érteni, hogy Horváthyékkal beszélgetni
nem chic. Ennek hire ment és mindenki kerülte Horváthyékat, mert
nem chic velök ismerősnek lenni. A Peregi kisasszonyok pedig még a
többinél is jobban kerülték, mert a nagyobbiknak, Idának, Kürtössy
József hadnagy udvarolt.
Én épen ezekben a napokban érkeztem a fürdőbe, mikor a
legélesebbek voltak az ellentétek és szegény rokonaimat
valóságosan boykottálták a Veronában. A hadnagy javában flirtelt
Peregi Idával, a kamarásné pedig arra izgatta Brunner urat, hogy jó
volna a villát megtisztitani a Horváthy-familiától, „tudja, ügyesen,
szép szerével, kedves Brunner.“
Mire Brunner úr a bajuszát pödörgette:
– No, majd meglátjuk, no majd meglátjuk, forgós teremtette!
Volt hát panasz, mikor megjöttem – mert Horváthyné okos
asszony lévén, érezte a mérgezett hegyű nyilakat, átlátott a szitán,
éles szemmel észrevette az intrikák apró szálait, de asszony volt,
dacos, a ki nem hagyja el a csatateret. Sirva panaszolta el a
helyzetét, hogy el van rontva egész nyara s hogy mindennek a kis
zsivány Ponci az oka.
Az Esztike feje még akkor is be volt kötve. Kivált őt sajnáltam
meg nagyon, látván, hogy reszketve búvik a fenyőbokrok közé,
mikor a Ponci félelmes alakja megjelenik a láthatáron.
– Legjobb lesz, édes húgom, – mondám Horváthyénak, ha
kihurcolkodunk innen.
Horváthyné a fejét rázta.
– Inkább meghalok, hogysem egy tapodtat mozduljak.
– Akkor hát nekik kell pusztolniok.
Szemeiben lázas öröm csillant meg.
– Oh Istenem – fohászkodott fel ájtatosan s valóban szépek
voltak ilyenkor a szemei, – ha ezt megérhetném, szivesen halnék
meg.
Mosolyogtam. Ilyenek az asszonyok.
– De – tette hozzá rögtön csüggedten, elszomorodva, – az
lehetetlen!
– Majd megpróbálom, – feleltem s megsimogatva az Esztike
orcácskáit, őt is megbiztattam. – Ne félj semmit, kicsikém,
megbüntetjük azt a rosz Poncit, a ki téged megütött.
– Soh’se törődj velük, jó öcsém, – csititott az öreg Horváthy, – az
okosabb enged.
– De a türelmesebb, ravaszabb győz.
– Ha kikezdesz vele, csak magadnak csinálsz kellemetlenséget.
Nagy svihák az, nem lehet azzal itt megbirkózni. Mindenki mellette
van.
– Nem is akarok én ő vele összetűzni.
– Akkor aztán épen nem tudom elképzelni, mit csinálhatnál.
– Hát a diplomatia mire való? Csak hagyja azt ram, bátyámuram.
Az öreg morgott valamit s hitetlenül rázta fejét.
Pedig nekem már a tervem is megvolt hozzá. Szilárdul épitettem
fel Pantalovics Györgyre, egy bácskai földesúrra, a kivel együtt
jöttem a vasúton és a ki szintén a Veronába szállt. A bácskai úr
megint új genre. A sárosi nemes csak otthon nem úr, a nógrádi
nemes csak otthon úr, a bácskai nemes pedig mindenütt úr. A zsiros
földje megneveli önérzetének szarvait olyan keményekre, hogy azok
sehol le nem törnek s a hány ezer hold, annyi agancs.
Pantalovics György idegességben és asztmában szenvedett. Azt
mondta nekem utközben: „Ha ülök, én vagyok Magyarország
legegészségesebb embere; ha tiz lépést teszek, elfogy a lélekzetem,
én vagyok a legbetegebb ember a világon.“
Igénytelen, jámbor külseje volt, mint egy marhakupecnek, de a
mellett a legdölyfösebb despota lakozott benne: szeszélyes,
erőszakos, ellenmondást nem türő.
Én ajánlottam neki még a vasuton a Verona-villát, minélfogva
velem jött, de az első benyomás, a mit Brunner urra tett, nem igen
lehetett kedvező, mert a szegényesebb szobák közül, a földszinten
nyitott ki neki egyet.
– Nézd meg Zsuzsa!
Zsuzsa egy tenyeres-talpas paraszt asszony volt, a kit mint
ápolónét hozott magával. Csattanó piros képű, vaskos, olyan
terebélyes alsótesttel, mintha egy szénaboglya indulna, igaz is, hogy
lehetett rajta vagy tizenöt szoknya.
– Ez nem nekünk való, – mondta Zsuzsa – nincs jobb szobájuk?
– Jobb szoba kell, – magyarázta németül Brunner úrnak.
– Jobb szoba, forgós teremtette, – kiáltá nevetve Brunner úr. –
Ott van az emeleten a Milán király egykori szalonja az erkélylyel, he-
he-he.
– Mutassa meg! – szólt közbe hidegen Pantalovics.
Brunner ajkain gúnyos mosoly játszadozott.
– Hát tessék felfáradni. Én nem bánom, megmutathatom, de
tizenöt forint naponta.
– Csinos lehet! – jegyzé meg Pantalovics egyszerüen.
– Hát kivánják megnézni?
– Persze.
Brunner úr nem minden csodálkozás nélkül vezetett fel minket az
emeletre s bizonyos ünnepélyes mozdulattal nyitá ki a történelmi
nevezetsségü szentélyt.
Pantalovics intett a parasztasszonynak:
– Nézd meg, Zsuzsa!
Ő maga unalmasnak találta volna csak egy pillantást is vetni rá.
Zsuzsa kijelentette, hogy a szoba jó s ha két ágyat tesznek is
bele, még mindig igen kényelmesen lehet benne mozogni.
– Alzo bleibt, – mondá ki a végzést Pantalovics György.
– Tizenöt forint naponta, – hangsulyozta Brunner úr még egyszer,
nehogy félreértés forogjon fönn.
– Annyi, annyi, – intett türelmetlenül Pantalovics, – hozassa fel a
málhákat.
Két roppant faláda képezte a málhákat. Brunner úr nem minden
aggodalom nélkül nézegette. Előkelő urak szép bőröndökkel állitanak
be s négy forintos szobákra is alkusznak. Miféle Isten teremtése
lehet ez a Pantalovics?
Elhatározta, hogy szemmel fogja tartani s midőn Pantalovics
félóra mulva orvost hivatott, Brunner úr megvárta az orvost a
lépcsőkön.
– Nos mit mond ön az új vendéghez?
A doktor arcán hideg verejték gyöngyözött.
– Ördöngős fickó; megjártam vele. Azt mondja, a mint
megvizsgáltam: „Ha kigyógyit ön, kap két darab ezrest; ha ki nem
gyógyit és hiába molesztál a patikaszerekkel, lelövöm önt, mint egy
kutyát. Válaszszon!“
– És ön mit választott?
– Hogy kigyógyitom.
– Tehát belement a veszedelembe.
– Eh, ostobaság; ha kigyógyitom, megkapom a két ezrest; ha ki
nem gyógyitom, meghal s következéskép le nem lőhet.
– No, ebben igaza lehet.
Az új lakó nem is jött le aznap vacsorálni a hôtelbe; fenn a
szobában falatoztak a Zsuzsával egy tarisznyából.
Hm, ez különös! Brunner urat nagyon felizgatta a szobalány
ujságolása. Ez a disztelen étkezés. Egy tarisznyából a szolgálóval!
Pfuj! Nem lehet ez úri ember.
E különös dolgokon töprengett Brunner úr még este az ágyában
is. Ha olyan gazdag, hogy két ezer forintot igér a doktornak s
tizenötöt fizet naponta a szobáért, hisz akkor a legjobb ételeket
hozathatná magának. Vagy öltözne-e oly hanyagul, ha valósággal
tömve lenne a tárcája? Brunner úr egész éjjel Pantalovics felől
álmodott, a ki szelindek kutya alakjában ugrándozik előtte és
valahányszor megrázza magát, vagy egyet mozdit a farkán, mindig
egy körmöci arany esik ki belőle.
E csodálatos kutya birtokában jóleső érzésben élt és gazdagodott
Brunner úr, midőn a felesége kegyetlen kézzel felébreszté.
– Hans, kelj föl, öltözz fel. A Nr. 16 megbolondult, irtóztató
patáliákat tesz és rögtön veled kiván beszélni.
Brunner úr összerezzent. Épen Pantalovics volt a Nro. 16.
– Megbolondult? Hogy érted azt, Friderika?
– Hát hogy tombol mérgében, pofozza a cselédeket s követeli,
hogy állitsanak téged eléje.
Brunner úr kedvetlenül kászmálódott fel s sietett a Pantalovics
szobájába.
– Micsoda szobát adott ön nekem? – mennydörgött rá
Pantalovics. – Egész éjjel nem tudtam itt aludni. A szomszéd
szobában szakadatlanul köhögött valaki.
– Igen, igen, a Nro 15-ben egy betegünk van, – dadogta Brunner
úr, – egy járásbiró.
– No, hát ez egyszerüen türhetetlen.
– De mit csináljak, Istenem? – sóhajtott Brunner úr, szemeit,
mint Kádár, égre fölemelve. Ide végre is tüdőbetegek járnak és…
– Hát tegye másüvé. Cserélje el, vagy mit tudom én, mit
csináljon. Legjobb lesz, lökje ki onnan… lökje ki azt az embert.
– De hisz akkor üresen marad a szoba.
– Természetesen és minden esetre ez a legjobb.
– Legjobb? – kérdé Brunner úr bizonyos szemtelen mosolygással.
– Kire a legjobb? Hogy méltóztatik azt érteni?
– Ugy értem, hogy a szoba árát én fizetem.
Brunner majd hanyatt esett a csodálkozástól; de mégsem esett
hanyatt, hanem csak a kezeit dörzsölte.
– Rendben vagyunk, nagyságos uram. – Ez aztán beszéd, forgós
teremtette. Igy beszél egy úr, – dünnyögte magában, mikor a
szobából távozott intézkedni.
Másnap reggel azonban még nagyobb zenebonát csinált
Pantalovics. Csengetett s az első pincért, a ki megjelent meghajitotta
a csizmájával és követelte Brunner urat, hogy azonnal ide jőjjön,
mert le akarja lőni, mint egy átkozott verebet.
Brunner bejött nagy szepegve, Pantalovics fölemelt öklökkel
rohant feléje.
– Megint nem tudtam aludni, – bőgött fel mint egy vadállat, –
megint köhögött valaki a szomszédban.
– Az lehetetlen, – szólt Brunner úr flegmával – a szoba az
uraságodé és üres.
– Itt balról köhögött egész éjjel.
– Ah, balról? A Nr. 17-ben. Ugy már lehetséges.
– Ki cselekedte azt? – orditá Pantalovics.
– Ugyanaz a járásbiró, a kit tegnap volt szerencsém emliteni.
– Megint? Hiszen azt kilökte tegnap?
– Természetesen, eltávolitottam a Nr. 15-ből, mert azt nagyságod
vette ki, de beszállásolta magát a Nr. 17-be, mert az még üresen állt.
Pantalovics a fogait csikorgatta.
– Ön egy infámis ember, hallja! Ha rögtön ki nem hurcolkokik
onnan is az az úr, én megyek el egy más villába. Megértette?
– Igenis, igenis, – makogta a kényelmi tanácsos zavartan. – A mi
a szobából való kihurcolkodást illeti, azt értem, de a mi a szobát
illeti…
– Azt a szobát is én fizetem, – jelentette ki Pantalovics.
Ez megdöbbentette Brunner urat, mert ez már minden fogalmat
felülmult, a mit magának a gavallérságról alkotott. A mi sok, az már
gyanus. Mik ehez képest a legnagyobb gavallérok, a kiket ő ismert,
az osztrák főurak? Azoknak a nagyúri volta legfeljebb abban
nyilvánul, hogy fotográf-masinájuk van s ingyen veszik le a népet;
Pantalovics azonban parancsol és fizet, megfizeti a levegőt, a
virágillatot, a kilátást és még a csendet is. Pantalovics úr valóságos
üstökös a vendégek közt.
Bár még mindig piszkálta Brunner urat némi gyanakodás, mégis
teljes mértékben lenyomta minden egyéni akaratát a szertelen
tisztelet, melyet Pantalovics iránt érzett. Vakon engedelmeskedett
neki, legott elszállásolta a járásbirót és pedig ezuttal önzetlenül, sőt
nagylelküen, mert fent a második emeleten és lent a földszinten is
volt még a Pantalovicsé fölött egy-egy üres szoba, ahonnan esetleg
lehangzott vagy felhangzott volna éjjelenkint az idegbántó
köhécselés, de ő mindezek dacára, az épület másik szárnyába
helyezé el a vérköpős járásbirót. Közvetlen a Horváthyék szobája
mellé. Brunner úr finom lélek volt s úgy tudta a házat vezetni, mint a
hogy egy államférfi vezeti az országot, hogy minden egyes ténye
beszélni látszik a közönséghez. A járásbiró szomszédsága csak
kellemetlen lehetett mindenkire. A Horváthyékhoz való elhelyezés
ténye célzatokat rejt magában. S közelfekvőnek látszott az a föltevés
is, hogy az áthelyezés ebben az alakban a Kürtössy-család intrikáira
vezethető vissza.
Ilyen viszonyok közt fogamzott meg bennem az a terv, hogy
közbelépjek és a gonosz Ponci megbünhődjék, a derék Horváthy-
család pedig elégtételhez jusson. Ehhez pedig egy nálamnál
hatalmasabb munkatárs kellett. Kiszemeltem a sorsot. Mert a sors
néha a maga bolond fejétől is cselekszik, de a leggyakrabban okos
emberek mesterségesen fogják az ekéjük elé, ellátják a
szükségesekkel, és ráhagyják: no most már magadtól csináld
tovább!
Közben a Pantalovics alakja egyre nőtt a villa lakói előtt, mígnem
valóságosan legendáriussá vált, mint az utolsó Cobor grófé, ki
mahagoni fa tüzénél főzte meg angol vendégének a paprikás
gulyáshust, vagy az Eszterházyé, a ki lepuffantotta a tizezer forintos
lovat, mert olyan gebét nem használhat semmire. Mikor ugyanis
Pantalovics kifizette Brunnernek a heti számláját, visszajárt volna az
egyik százasból ötven forint, mire hanyagul intett a kezével: „Oszsza
ki a többit a cselédek közt.“
Forgós teremtette, ez már valami. Ez már tény. És milyen tény.
Brunner úr pedig a tények embere volt s kimondhatlan rajongást
kezdett érezni Pantalovics iránt, – a mi épen jól belevágott
terveimbe.
Egy napon a kis Ponci a darazsakkal foglalkozott. Egyik fészküket
kiásta olyan érdeklődéssel, mint azok, a kik Pompejit és
Herkulanumot hozták fölszinre. Épen a délutáni álmaikat aludták a
villabeli betegek, a kertben nem volt más, csak a Ponci.
No, ez a legkedvezőbb idő.
Leszaladtam egy közeli boltba és megvettem ott a legszebb
bádog trombitát, aztán visszasiettem vele a kerten keresztül, már
messziről rákiáltván a fiucskára:
– Poncikám lelkem, hoztam magának valamit!
Ponci élénken pillantott fel, hogy ki szól hozzá, de láthatólag
megcsappant a kedve, mikor engem ösmert fel a megszólitóban;
nem szaladt felém, mint a gyermekek szoktak ilyenkor, hanem csak
úgy félvállról kérdé:
– Mit?
– Egy szép trombitát.
S ezzel felmutattam a napfényben csillogó bádog játékszert.
Ponci nézte messziről, de meg se mozdult, mintha oda volna
gyökerezve.
– Hát nem jön ide?
Nem felelt és nem jött. A gyermekek ösztöne többet ér, mint az
öregek tapasztalása.
– Ej, ej Ponci! Hát nem kell a trombita? Pedig milyen hangja van!
No, akkor odaviszem én magam.
S mellőzve a kacskaringós utat, egyenest a gyepen siettem az
ajándékkal. Ponci azonban ezalatt egyre hátrált. A jó Isten tudja,
miféle érzés ösztökélte rá.
– Lássa Poncika ez már nem szép; a helyett, hogy megköszönné
az ajándékot, a mit viszek, a helyett, hogy pacsit adna, szökik
előlem, mintha valami harapós farkas volnék.
De beszélhettem én annak. A mennyire közeledtem én hozzá,
annyira távolodott ő tőlem. Egyszer csak ott voltam a
darázsfészeknél, de ő meg elszaladt a halas medencéhez. Úgy
néztünk egymással farkasszemet.
Közben gyönyörködtem a kibontott darázsfészekben, mely
csodálatra ragadhat mindenkit, a ki megnézi. Milyen remekmű! S mi
még oktalanoknak merjük nevezni az állatokat! Milyen nyegleség!
Majdnem az összes művészeteket, az egész ipart az állatoktól
tanultuk – de milyen nehezen. Az állatok ellenben semmit se
tanultak tőlünk, épen annyit tudnak, a mennyit a teremtés utáni első
nap.
A kis darázs már bizonyosan Ádám és Éva idejében tudta a
papirkészitést, az emberi müvészet ellenben még ma sem képes
megadni a kartonnak azt a könnyüséget és erősségét együtt.
Ezredévekig irtunk ónra, kőre, vasra, pedig a papir már készen lógott
a fák gallyain. Csak oda kellett volna nézni. A kis darázs
tarisznyaformában kiakasztotta csodás szövöttjét a fák ágaira. És
milyen tökéletes, milyen finom! Az eső lefut a mázos felületéről s a
madár át nem birja vágni a csőrével. Az ember tapogatódzott,
küzdött a vegytan és technika akadályaival, pedig ott volt az orra
előtt a nagy titok a darázs tarisznyájában. Még a lefolyt utolsó
században is azt hitték egy ideig, hogy papirt csak rongyból lehet
csinálni. A darázs pedig járt, röpködött kevélyen a maga sárga-
fekete dolmánykájában s ujjongva döngte: „No, én növényi anyagból
dolgozom.“
Aztán micsoda családból való! Csupa művészek, csupa gyárosok,
csupa épitészek. És mennyit dolgoznak!
Minden évben egy házat építeni… De mit, egy házat! Egy egész
földalatti várost. Komplikáltat, művészit, mint a Westminster, s ezt
egyetlen darázs építi önerejéből, tótok nélkül. Mérnök, munkás,
pallér, minden ő maga.
Mihelyt a levegő melegedni kezd, üreget keres a földben; ha
talál, annyi mintha ingyen fundushoz jutna; ha nem talál, váj
magának. De hát van-e hozzá csákánya, ásója? Az ugyan nincs, de
adott neki az Isten erős állkapcát, azzal szurkálja ki a szükséges
lyukat. Egy körülfolyó karzat vezet egy-két láb átmérőjű üregbe, hol
az új városnak épülnie kell.
Mindenek előtt fejszére volna szüksége, melylyel a faszálakat
elhasogassa, hogy házának külső falait finom tépésszerű anyagból
megépítse. Fejszéje nincs, de pótolja a tapogató szarva. (Magad
uram, ha fejszéd nincs) s nincs az az ács, a ki ügyesebben dolgoznék
a szekercével, mint ő kelme azzal a szarvval.
De malter is kellenék a falak összeragasztásához. Majszter uram,
vagyis majszterné asszonyom a miatt se jön zavarba, mert a legjobb
malter a nyála. Hozzálát serényen s épiti a falakat, a padlatot, a
boltozatot, azután az erkélyt, ezt a pompás filigrán, félkerek müvet,
melyet tizenkét, csinos, könnyü oszlop tart s mely tele van
hatszegletes apró kamrácskákkal, alól minden kamra kis nyilással.
Egy egész darázs-kaszárnya. Mindenik erkélyen másfél ezer kamara.
Minden erkély után egy sor oszlop következik, aztán megint uj erkély
és megint oszlopok és megint erkélyek hatvanezer lakosra épitett
celákkal.
Mennyi művészet, mennyi pompa, – de mi haszna? Jön a kis
Ponci és kiássa, szétrombolja az egész várost. Hát legyen aztán ilyen
körülmények közt valakinek kedve darázsnak lenni és nem csipni,
nem dongni. Az ördög tartsa meg az egykedvüséget. Csak azért is
dongó, diri-diri-dongó.
– De szép ez a nagy darázsváros, Poncika. Tudok én még annál
egy nagyobbat. Jőjjön csak, megmutatom.
De Ponci makacsul állt meg a szökőkutnál és hogy az alatt se
teljék az idő hiába, az arany-ezüst halakat dobálgatta kövekkel, csak
néha pillantott felém lopva, hogy ott vagyok-e még?
– Hát nem kell a trombita? Szóljon már Ponci. Mert akkor másnak
adom.
Ponci nem felelt, konok dac ült a homlokán és az ajkai körül,
melyeket összeszoritott, a szemeit pedig leszegezte a földre, mint
egy bakonyi zsivány.
– Jól van, nem bánom hát, ha nem jön is; ide teszem a trombitát
az aloé levelére, innen vegye el, ha akarja. Pá, pá, Poncika!
Ezzel ott hagytam a trombitát s a villa felé indultam, hogy a
szobámba menjek. Utközben azonban eszembe jutott, hogy jó lenne
kilesni a fiut, mit fog csinálni, elbujtam tehát egy fenyves gruppban.
Lassan közeledett a darázsfészek helyére s ott megállt kezeit
hátratéve, minden oldalról jól megnézegette a trombitát, mely az
aloé pléh-szinü husos leveléből látszott kezdődni, mintha virágja
lenne. Szép volt, nagyon szép volt, nem birt megválni tőle a
tekintete, de azért még sem mert hozzá nyulni. Nem bizott bennem,
nem hihette, hogy az örömét keresem. Érezte, hogy valami
veszedelem van a trombitában, de nem birt ellentállni.
Két fapálcikát tört a jávorfa galyról s azokat összetéve, mint
csiptetőt, lenyult, fölemelte velök nagy óvatosan a játékszert és igen
csodálkozott, hogy semmi baja sem lett. A játékszer nem lőtt, nem
ugrott ki belőle valami kis ördög, nem frecscsentett semmi mérges
nedvet a szeme közé, egy tökéletesen ártatlan trombita volt, egy
cseppet se rosszabb annál, melylyel Gábriel főangyalt festik, pedig,
ki tudja miért, de ugy gondolta, hogy pokoli meglepetés jön ki
belőle, mint a hogy az némely játékszereknél előfordul; a kettétört
zsemlyéből kiugrik egy egérke, a zöld-selyem káposztafejből kipattan
egy nyul és muzsikálni kezd. Csakhogy ezek mind kedves, bohókás
dolgok. Hanem a trombitából valami vérfagyasztó szörnyeteg bujik ki
és talán föl is falja.
Valóságos örömkiáltásban tört ki, hogy a trombita használható,
mindamellett messze tartotta el magától, mint valami
dinamittöltényt, miközben aláhajolt és ugy nézett be a csövébe. No
az bizony épen csak olyan volt, mint a többi trombitáké. Semmi
gyanús, semmi rendellenes nincsen benne.
Merész elhatározással kezébe vette és bele fujt.
– Trom prom, tru ru, rú rú.
Élesen, hatalmasan bugott és harsogott a mélységes csöndben.
Mert kihalt, hangtalan volt az egész kert. Csak a méhek és a
darazsak zümmögtek a virágokon. No, ezeknek a zöngését
ugyancsak elnyomta a trombita. Mert a kis Ponci mindinkább
beleszeretett a hangjába, fujta lélekszakadtig. Cseresznyétől
maszatos pofácskái kidagadtak, mint két pampuska.
Most már jó kerékvágásban van minden, siettem fel
megelégedetten a szobámba, várni az eredményeket. De már is
mutatkoztak. Pantalovics rohant le velem szemben a lépcsőkön
hálóköntösben, hajadonfővel, majd feltaszitott.
– Brunner! Hej Brunner! Hollá! Brunner!
Hátra fordultam. Brunner úr megszeppenve jelent meg a lépcsők
alján.
– Hallja ezt? – rivall rá Pantalovics. – Hallja azt a trombitát? Meg
kell ettől őrülni. Ki cselekszi ezt?
Brunner úr mindenek előtt lekapta házi sapkáját a nagy
Pantalovics előtt, aztán a ház homlokzata felé szaladt, honnan
betekintett a kertbe.
– Hagyja el, hagyja el, – kiálta könyörgő hangon Poncinak. – Oh,
Szüz Mária, Szüz Mária, ne hagyj el minket!
Ponci azonban most egy hängematteban hanyattfekve és
himbálózva, csak tovább is fújta roppant nagy kedvteléssel, mint Pan
az ő sípját, hogy se nem hallott, se nem látott azon kivül egyebet.
– Ki az az istentelen? – ordítá mind jobban feldühödve
Pantalovics.
– Egy fiúcska, nagyságos uram, egy kis fiúcska, – dadogta
Brunner úr alázatosan.
– No hát, menjen oda és verje meg jól azt a gaz kölyköt.
A kényelmi tanácsos elsápadt.
– Az lehetetlen, lehetetlen. Kürtössy császári és királyi
kamarásnak a fia… egy kamarásnak a fia, egy kamarásé.
Pantalovics elkékült a dühtől. Levegő után kapkodott, mint a
fuldokló.
– Lehetetlen? Mit locsog maga össze-vissza? Hát nincs keze, a
mivel elverje?
– De egy kamarás, egy kamarás fia, a ki maga is valamikor
kamarás lesz.
Pantalovics kiugrott volna talán a bőréből is, ha a nagy zajra oda
nem siet az ápolóné.
– Eredj Zsuzsa és verd meg azt a trombitáló gyereket, de csak a
fejét üsd, hogy meg ne sántuljon.
A Zsuzsa nem volt rest, nem kérette magát, ha egyszer az úr
mondja, – rohant, mint a szél. Félpercre rá aztán megszünt a
trombitahang, mintha ollóval vágták volna el, mély csönd lett utána,
felváltván azt hamar a Ponci jajkiáltásai.
É
Én már akkor fent voltam a szobában és az ablakból néztem,
hogyan páholja Zsuzsa a kapálódzó, rúgó, harapó Poncit, csihi-puhi
üti jobbról, pif-paf üti balról, a hol éri, a Ponci bőg, apját, anyját
hivja rettenetes üvöltő hangján.
A villa betegei megriadva futnak ki szobáikból. Jaj, kit nyúznak?
Hihettek-e szemeiknek, hogy a kis despotát, a Kürtössy Poncit
deklinálja a parasztasszony, az új lakó gazdasszonya? No, ez már
mégis sok. Szent Isten, mi történik, ha a méltóságos kamarás úr
észreveszi?
Szörnyülködtek, de beavatkozni nem mertek. Az egyik Peregi
kisasszony oda akart menni, de az anyja visszatartotta.
– Maradj veszteg Mici, még téged is meg talál ütni és úgy se
tartozol még a családhoz.
– Istenem, istenem – sopánkodott egy öreg asszony (egy
árvaszéki birónak a neje Egerből), – ha ez ötven év előtt történik és
például, ha Bártfán történik, hogy rohanna most elő egy huszár és
hogy vágná le a fejét annak a parasztasszonynak.
– Hja a hely és az idő! – sóhajtott fel egy köszvényes aggastyán
a mankójával hadonászva, – két nagy faktor. De hol lehetnek a
szegény Ponci hozzátartozói?
Valóban attól lehetett félni, hogy a parasztasszony magától is
megelégli a Ponci büntetését s a néző kompánia elesik a legnagyobb
élvezettől, hogy t. i. a kamarás vagy a hadnagy talál előtoppanni s
megtámadván a gazdasszonyt, arra Pantalovics is kicsörtet a gyöpre;
az lenne csak igazi hadd el hadd.
És csakugyan jött Kürtössyné, teljes negligében futott ki
szobájából, nem nézvén se jobbra, se balra, fellökve virágcserepet,
öntöző kannát, furiában rohant, mint a nőstény tigris, ha hallja
kölykének szivettépő orditását. Nem úri asszony többé, vége a
fölszedett társadalmi máznak, most csak anya, s ráveti magát egész
elszántan Zsuzsa asszonyra.
– Huh, te bestia, ereszted el mindjárt a gyermekemet!
S a vézna, törékeny teremtés, a kit a szél is majdnem elfújt,
olyan erővel rázta meg a hatalmas Zsuzsát, hogy az meglepetésében
eleresztette Poncit, a ki szörnyű visitással, a ház felé száguldva
mentette az irháját.
Zsuzsa asszony idegen körmöket érezvén fúródni nyakába, csak
egy percig volt meglepetve; amint megpillantá ellenfelét, fitymálón
mosolyodott el.
– Oh no, kis csutak! Mit akar? Hiszen mindjárt összeroppantom,
mint egy bolhát, ha magához nyúlok. Ugy? Maga az anyja a
gyereknek? No, szült volna inkább egy kopókölyköt. Össze-vissza
harapott a pokolra való. Hanem ereszsze el a torkomat, mert
megtalálom taszitani.
Főlénynyel bánt vele, mint egy nagy medve a menyéttel, de
Kürtössyné nem látott, nem hallott, csak ütötte a kis csontos
kezeivel, a hol érte. Nem igen fájhatott az annak, de azért mégis
megsokalta, megrestelte.
– Ej, menjen a pokolba! Nem szégyenli magát úri asszony létére
verekedni, – s olyat taszitott rajta, hogy az neki tándorodék egy
fának s részint a lökéstől, részint az ijedelemtől vagy a dühtől ájultan
esett össze a gyepen.
Ő
– Mert nagy differencia volt köztünk. Ő hatvanezer forintot igért,
én nyolcvanat kértem.
– Nyolcvanért tehát eladó?
– Oh igen, – szólt Brunner úr türelmetlenül.
– Top – csapta a markát Pantalovics a Brunner úr kezébe, aztán
oda kiáltott a Zsuzsának, a ki az erkélyajtó üvegtábláit törölgette:
– Keresd meg a bugyellárisomat Zsuzsa, ott van valahol a tegnapi
kabátom belső zsebében és fizess ki belőle ennek az úrnak nyolcvan
ezrest!
Brunner úr nagy szemeket meresztett s olyan lélekzetet vett,
mint a harcsa, ha vizet öntenek rá. Csóválta a fejét, szikráztak a
szemei s a mig Zsuzsa asszony egyenként olvasta markába
megnyálazott ujjakkal az ezreseket, csodálkozva motyogta: „Forgós
teremtette, forgós teremtette!“
– Most pedig áttérhetünk egyébre, – mondá Pantalovics, kiverve
a pipája hamvát, – akart ön valamit mondani?
– Oh semmit, semmit.
– Akkor hát rendben vagyunk. Csak tessék leülni és megirni az
adás-vételi szerződést, majd mindjárt behivok két tanút is. A villát
Szabó Zsuzsánna vette meg öntől – minthogy én neki ajándékozom
a vételi összeget. Ön ha tetszik, tovább is megmaradhat itt
házfelügyelőnek, de viszont követeli az új tulajdonos, hogy azok a
népek, tudja azok a Kürtössyék, még ma takarodjanak ki a házából.
Ki is mentek még aznap. A méltóságos kamarás úr most már a
tulajdon kezeivel is jól elnáspángolta a Poncit, a ki miatt a familia
tekintélye ekkora csorbát szenvedett. Csend és béke költözött
ezentúl a Veronába és a kert darazsai, ha az emberekhez hasonlóan
krónikát vezetnek az őket érő nagy eseményekről, bizonyosan ilyes
valamit iktattak be az annálékba: „És ma vonult el területünkről,
illetve a kontinensről ama rettenetes óriás, a ki megtizedelte fajunkat
s romba dönté házainkat, városainkat.“
Lábjegyzetek.
1) Falun a maszlag szúrós bogyóját nevezik a gyerekek
tehénkének, persze olyan joggal, mint a fazekak füleit lovaknak.
Ahol nincs játékos bolt, ott is megvannak azért a játékok.
M. K.
2) A család cimere egy kecske.
M. K.
3) Tó Pozsonymegyében, a magyarországi vadkacsák kedvenc
mulatóhelye – Rivierája.
4) Gyakori eset, hogy az elpusztult anya helyett idegen réce
jelenik meg a fészekben és segit a költést befejezni.
M. K.
Javítások.
1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside
the United States, check the laws of your country in addition to
the terms of this agreement before downloading, copying,
displaying, performing, distributing or creating derivative works
based on this work or any other Project Gutenberg™ work. The
Foundation makes no representations concerning the copyright
status of any work in any country other than the United States.
1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if
you provide access to or distribute copies of a Project
Gutenberg™ work in a format other than “Plain Vanilla ASCII” or
other format used in the official version posted on the official
Project Gutenberg™ website (www.gutenberg.org), you must,
at no additional cost, fee or expense to the user, provide a copy,
a means of exporting a copy, or a means of obtaining a copy
upon request, of the work in its original “Plain Vanilla ASCII” or
other form. Any alternate format must include the full Project
Gutenberg™ License as specified in paragraph 1.E.1.
• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
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.
textbookfull.com