100% found this document useful (1 vote)
6 views

Web Application Development with Streamlit: Develop and Deploy Secure and Scalable Web Applications to the Cloud Using a Pure Python Framework 1st Edition Mohammad Khorasani pdf download

The document is a comprehensive guide on web application development using Streamlit, focusing on creating secure and scalable applications with a pure Python framework. It covers various aspects including installation, user interface design, data management, and database integration. The book is authored by Mohammad Khorasani, Mohamed Abdou, and Javier Hernández Fernández and is intended for developers looking to leverage Streamlit for cloud-based applications.

Uploaded by

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

Web Application Development with Streamlit: Develop and Deploy Secure and Scalable Web Applications to the Cloud Using a Pure Python Framework 1st Edition Mohammad Khorasani pdf download

The document is a comprehensive guide on web application development using Streamlit, focusing on creating secure and scalable applications with a pure Python framework. It covers various aspects including installation, user interface design, data management, and database integration. The book is authored by Mohammad Khorasani, Mohamed Abdou, and Javier Hernández Fernández and is intended for developers looking to leverage Streamlit for cloud-based applications.

Uploaded by

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

Web Application Development with Streamlit:

Develop and Deploy Secure and Scalable Web


Applications to the Cloud Using a Pure Python
Framework 1st Edition Mohammad Khorasani
download
https://ebookmeta.com/product/web-application-development-with-
streamlit-develop-and-deploy-secure-and-scalable-web-
applications-to-the-cloud-using-a-pure-python-framework-1st-
edition-mohammad-khorasani/

Download more ebook from https://ebookmeta.com


We believe these products will be a great fit for you. Click
the link to download now, or visit ebookmeta.com
to discover even more!

Secure Web Application Development: A Hands-On Guide


with Python and Django 1st Edition Matthew Baker

https://ebookmeta.com/product/secure-web-application-development-
a-hands-on-guide-with-python-and-django-1st-edition-matthew-
baker/

Web App Development and Real-Time Web Analytics with


Python: Develop and Integrate Machine Learning
Algorithms into Web Apps Nokeri

https://ebookmeta.com/product/web-app-development-and-real-time-
web-analytics-with-python-develop-and-integrate-machine-learning-
algorithms-into-web-apps-nokeri/

Beginner's Guide to Streamlit with Python: Build Web-


Based Data and Machine Learning Applications 1st
Edition Sujay Raghavendra

https://ebookmeta.com/product/beginners-guide-to-streamlit-with-
python-build-web-based-data-and-machine-learning-
applications-1st-edition-sujay-raghavendra/

The American War in Afghanistan: A History 1st Edition


Malkasian

https://ebookmeta.com/product/the-american-war-in-afghanistan-a-
history-1st-edition-malkasian/
Directed Evolution Methods and Protocols Methods in
Molecular Biology 2461 Andrew Currin (Editor)

https://ebookmeta.com/product/directed-evolution-methods-and-
protocols-methods-in-molecular-biology-2461-andrew-currin-editor/

Managing Innovation: Integrating Technological, Market


and Organizational Change 6th Edition Joe Tidd

https://ebookmeta.com/product/managing-innovation-integrating-
technological-market-and-organizational-change-6th-edition-joe-
tidd/

Reassured Love Club Curve Club Curves Series 1st


Edition Jade Royal

https://ebookmeta.com/product/reassured-love-club-curve-club-
curves-series-1st-edition-jade-royal-2/

Practical Leadership in Community Colleges : Navigating


Today's Challenges 1st Edition George R. Boggs

https://ebookmeta.com/product/practical-leadership-in-community-
colleges-navigating-todays-challenges-1st-edition-george-r-boggs/

InHabit People Places and Possessions Cultural


Interactions Studies in the Relationship between the
Arts Antony Buxton (Editor)

https://ebookmeta.com/product/inhabit-people-places-and-
possessions-cultural-interactions-studies-in-the-relationship-
between-the-arts-antony-buxton-editor/
An Unexpected Love A Variation of Jane Austen s Pride
and Prejudice Lily Bernard

https://ebookmeta.com/product/an-unexpected-love-a-variation-of-
jane-austen-s-pride-and-prejudice-lily-bernard/
Web Application
Development with
Streamlit
Develop and Deploy Secure
and Scalable Web Applications
to the Cloud Using a Pure
Python Framework

Mohammad Khorasani
Mohamed Abdou
Javier Hernández Fernández
Web Application Development with Streamlit: Develop and Deploy Secure
and Scalable Web Applications to the Cloud Using a Pure Python Framework

Mohammad Khorasani Mohamed Abdou


Doha, Qatar Cambridge, United Kingdom

Javier Hernández Fernández


Doha, Qatar

ISBN-13 (pbk): 978-1-4842-8110-9 ISBN-13 (electronic): 978-1-4842-8111-6


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

Copyright © 2022 by Mohammad Khorasani, Mohamed Abdou,


Javier Hernández Fernández
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: James Robinson-Prior
Development Editor: James Markham
Coordinating Editor: Jessica Vakili
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233
Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail
[email protected], or visit www.springeronline.com. Apress Media, LLC is a
California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc
(SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail [email protected]; for
reprint, paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook
versions and licenses are also available for most titles. For more information, reference our Print
and eBook Bulk Sales web page at 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 the Github repository: https://github.com/Apress/Web-­Application-
Development-­with-­Streamlit. For more detailed information, please visit http://www.apress.com/
source-­code.
Printed on acid-free paper
To my parents Yeganeh and Daryoush and to
my departed grandparents Ghamar and Reza.
—Mohammad Khorasani
To my family, friends, and the open source community.
—Mohamed Abdou
To my family and friends for their support.
—Javier Hernández Fernández
Table of Contents
About the Authors������������������������������������������������������������������������������xiii

About the Technical Reviewers����������������������������������������������������������xv


Acknowledgments����������������������������������������������������������������������������xvii
Preface����������������������������������������������������������������������������������������������xix
Acronyms������������������������������������������������������������������������������������������xxi
Intended Audience���������������������������������������������������������������������������xxiii
Additional Material������������������������������������������������������������������������� xxvii

Chapter 1: Getting Started with Streamlit��������������������������������������������1


1.1 Why Streamlit?������������������������������������������������������������������������������������������������1
1.1.1 Local vs. the Cloud���������������������������������������������������������������������������������2
1.1.2 A Trend Toward Cloud Computing�����������������������������������������������������������3
1.1.3 History of Web Frameworks in Python���������������������������������������������������5
1.1.4 Flask�������������������������������������������������������������������������������������������������������6
1.1.5 Django����������������������������������������������������������������������������������������������������6
1.1.6 Dash�������������������������������������������������������������������������������������������������������7
1.1.7 Web2Py���������������������������������������������������������������������������������������������������7
1.1.8 The Need for a Pure Python Web Framework�����������������������������������������8
1.1.9 Academic Significance���������������������������������������������������������������������������8
1.2 Firing It Up������������������������������������������������������������������������������������������������������9
1.2.1 Technical Requirements�������������������������������������������������������������������������9
1.2.2 Environment Installation with Anaconda����������������������������������������������10

v
Table of Contents

1.2.3 Downloading and Installing Streamlit���������������������������������������������������15


1.2.4 Streamlit Console Commands��������������������������������������������������������������17
1.2.5 Running Demo Apps�����������������������������������������������������������������������������19
1.2.6 Writing and Testing Code with PyCharm�����������������������������������������������21
1.3 How Streamlit Works������������������������������������������������������������������������������������25
1.3.1 The Streamlit Architecture��������������������������������������������������������������������26
1.3.2 ReactJS in Streamlit�����������������������������������������������������������������������������29
1.4 Summary������������������������������������������������������������������������������������������������������30

Chapter 2: Streamlit Basics����������������������������������������������������������������31


2.1 Creating a Basic Application�������������������������������������������������������������������������31
2.1.1 Generating User Input Forms����������������������������������������������������������������32
2.1.2 Introducing Conditional Flow����������������������������������������������������������������34
2.1.3 Managing and Debugging Errors����������������������������������������������������������36
2.2 Mutating Dataframes������������������������������������������������������������������������������������40
2.2.1 Filter�����������������������������������������������������������������������������������������������������41
2.2.2 Select���������������������������������������������������������������������������������������������������42
2.2.3 Arrange�������������������������������������������������������������������������������������������������44
2.2.4 Mutate��������������������������������������������������������������������������������������������������46
2.2.5 Group By�����������������������������������������������������������������������������������������������48
2.2.6 Merge���������������������������������������������������������������������������������������������������49
2.3 Rendering Static and Interactive Charts�������������������������������������������������������52
2.3.1 Static Bar Chart������������������������������������������������������������������������������������52
2.3.2 Static Line Chart�����������������������������������������������������������������������������������53
2.3.3 Interactive Line Chart���������������������������������������������������������������������������55
2.3.4 Interactive Map�������������������������������������������������������������������������������������57
2.4 Developing the User Interface�����������������������������������������������������������������������58
2.5 Summary������������������������������������������������������������������������������������������������������62

vi
Table of Contents

Chapter 3: Architecting the User Interface�����������������������������������������63


3.1 Designing the Application�����������������������������������������������������������������������������64
3.1.1 Configuring the Page����������������������������������������������������������������������������64
3.1.2 Developing Themes and Color schemes�����������������������������������������������77
3.1.3 Organizing the Page�����������������������������������������������������������������������������81
3.2 Displaying Dynamic Content�������������������������������������������������������������������������85
3.2.1 Creating a Real-Time Progress Bar������������������������������������������������������87
3.3 Provisioning Multipage Applications�������������������������������������������������������������88
3.3.1 Creating Pages�������������������������������������������������������������������������������������88
3.3.2 Creating Subpages�������������������������������������������������������������������������������91
3.4 Modularizing Application Development���������������������������������������������������������94
3.4.1 Example: Developing a Social Network Application�����������������������������95
3.4.2 Best Practices for Folder Structuring�������������������������������������������������101
3.5 Summary����������������������������������������������������������������������������������������������������104

Chapter 4: Data Management and Visualization������������������������������105


4.1 Data Management���������������������������������������������������������������������������������������106
4.1.1 Processing Bytes Data������������������������������������������������������������������������106
4.1.2 Caching Big Data��������������������������������������������������������������������������������108
4.1.3 Mutating Data in Real Time����������������������������������������������������������������111
4.1.4 Advanced and Interactive Data Mutation��������������������������������������������113
4.2 Exploring Plotly Data Visualizations������������������������������������������������������������120
4.2.1 Rendering Plotly in Streamlit��������������������������������������������������������������120
4.2.2 Basic Charts���������������������������������������������������������������������������������������121
4.2.3 Statistical Charts��������������������������������������������������������������������������������125
4.2.4 Time-Series Charts�����������������������������������������������������������������������������127
4.2.5 Geospatial Charts�������������������������������������������������������������������������������128
4.2.6 Animated Visualizations����������������������������������������������������������������������128
4.3 Summary����������������������������������������������������������������������������������������������������131

vii
Table of Contents

Chapter 5: Database Integration�������������������������������������������������������133


5.1 Relational Databases����������������������������������������������������������������������������������133
5.1.1 Introduction to SQL�����������������������������������������������������������������������������134
5.1.2 Connecting a PostgreSQL Database to Streamlit�������������������������������136
5.1.3 Displaying Tables in Streamlit������������������������������������������������������������141
5.2 Nonrelational Databases�����������������������������������������������������������������������������144
5.2.1 Introduction to MongoDB��������������������������������������������������������������������145
5.2.2 Provisioning a Cloud Database�����������������������������������������������������������146
5.2.3 Full-Text Indexing�������������������������������������������������������������������������������150
5.2.4 Querying the Database�����������������������������������������������������������������������152
5.2.5 Displaying Tables in Streamlit������������������������������������������������������������157
5.3 Summary����������������������������������������������������������������������������������������������������160

Chapter 6: Leveraging Backend Servers������������������������������������������161


6.1 The Need for Backend Servers�������������������������������������������������������������������161
6.2 Frontend-Backend Communication������������������������������������������������������������162
6.2.1 HTTP Methods������������������������������������������������������������������������������������163
6.3 Working with JSON Files�����������������������������������������������������������������������������164
6.4 Provisioning a Backend Server�������������������������������������������������������������������165
6.4.1 API Building����������������������������������������������������������������������������������������166
6.4.2 API Testing������������������������������������������������������������������������������������������170
6.5 Multithreading and Multiprocessing Requests�������������������������������������������171
6.6 Connecting Streamlit to a Backend Server�������������������������������������������������174
6.7 Summary����������������������������������������������������������������������������������������������������177

viii
Table of Contents

Chapter 7: Implementing Session State�������������������������������������������179


7.1 Implementing Session State Natively���������������������������������������������������������179
7.1.1 Building an Application with Session State����������������������������������������182
7.2 Introducing Session IDs������������������������������������������������������������������������������185
7.3 Implementing Session State Persistently���������������������������������������������������186
7.4 User Insights�����������������������������������������������������������������������������������������������191
7.4.1 Visualizing User Insights���������������������������������������������������������������������195
7.5 Cookie Management�����������������������������������������������������������������������������������198
7.6 Summary����������������������������������������������������������������������������������������������������202

Chapter 8: Authentication and Application Security������������������������203


8.1 Developing User Accounts��������������������������������������������������������������������������203
8.1.1 Hashing����������������������������������������������������������������������������������������������204
8.1.2 Salting������������������������������������������������������������������������������������������������205
8.2 Verifying User Credentials���������������������������������������������������������������������������207
8.3 Secrets Management����������������������������������������������������������������������������������224
8.4 Anti-SQL Injection Measures with SQLAlchemy������������������������������������������225
8.5 Configuring Gitignore Variables�������������������������������������������������������������������226
8.6 Summary����������������������������������������������������������������������������������������������������227

Chapter 9: Deploying Locally and to the Cloud���������������������������������229


9.1 Exposing Streamlit to the World Wide Web�������������������������������������������������230
9.1.1 Port Forwarding over a Network Gateway������������������������������������������230
9.1.2 HTTP Tunneling Using NGROK�������������������������������������������������������������232
9.2 Deployment to Streamlit Cloud�������������������������������������������������������������������235
9.2.1 One-Click Deployment������������������������������������������������������������������������235
9.2.2 Streamlit Secrets��������������������������������������������������������������������������������238

ix
Table of Contents

9.3 Deployment to Linux�����������������������������������������������������������������������������������240


9.3.1 Native Deployment on a Linux Machine���������������������������������������������240
9.3.2 Deployment with Linux Docker Containers�����������������������������������������243
9.4 Deployment to Windows Server������������������������������������������������������������������246
9.4.1 Establishing a Remote Desktop Connection���������������������������������������247
9.4.2 Opening TCP/IP Ports��������������������������������������������������������������������������249
9.4.3 Anaconda Offline Package Installation�����������������������������������������������253
9.4.4 Adding Anaconda to System Path�������������������������������������������������������254
9.4.5 Running Application as an Executable Batch File�������������������������������256
9.4.6 Running Application As a Persistent Windows Service����������������������257
9.5 Summary����������������������������������������������������������������������������������������������������261

Chapter 10: Building Streamlit Components������������������������������������263


10.1 Introduction to Streamlit Custom Components�����������������������������������������263
10.2 Using ReactJS to Create Streamlit Custom Components��������������������������264
10.2.1 Making a ReactJS Component���������������������������������������������������������265
10.2.2 Using a ReactJS Component in Streamlit�����������������������������������������268
10.2.3 Sending Data to the Custom Component������������������������������������������270
10.2.4 Receiving Data from the Custom Component�����������������������������������273
10.3 Publishing Components As Pip Packages�������������������������������������������������276
10.4 Component in Focus: Extra-Streamlit-­Components����������������������������������280
10.4.1 Stepper Bar��������������������������������������������������������������������������������������280
10.4.2 Bouncing Image��������������������������������������������������������������������������������286
10.4.3 Tab Bar����������������������������������������������������������������������������������������������290
10.4.4 Cookie Manager�������������������������������������������������������������������������������295
10.4.5 Router�����������������������������������������������������������������������������������������������302
10.5 Summary��������������������������������������������������������������������������������������������������307

x
Table of Contents

Chapter 11: Streamlit Use Cases������������������������������������������������������309


11.1 Dashboards and Real-Time Applications��������������������������������������������������309
11.1.1 Temperature Data Recorder Application�������������������������������������������310
11.1.2 Motor Command and Control Application�����������������������������������������316
11.2 Time-Series Applications��������������������������������������������������������������������������321
11.2.1 Date-Time Filter Application�������������������������������������������������������������321
11.2.2 Time-Series Heatmap Application����������������������������������������������������324
11.2.3 Time Synchronization Application�����������������������������������������������������328
11.3 Data Management and Machine Learning Applications����������������������������332
11.3.1 Data Warehouse Application�������������������������������������������������������������332
11.3.2 Advanced Application Development: Machine Learning As a
Service����������������������������������������������������������������������������������������������344
11.4 Summary��������������������������������������������������������������������������������������������������361

Chapter 12: Streamlit at Work����������������������������������������������������������363


12.1 Streamlit in Clean Energy: Iberdrola���������������������������������������������������������363
12.1.1 Visualizing Operational Performance of Wind Farms������������������������365
12.1.2 Wind Turbine Power Curves��������������������������������������������������������������366
12.1.3 Wind Roses���������������������������������������������������������������������������������������369
12.1.4 Heat Maps����������������������������������������������������������������������������������������371
12.1.5 Closing Remarks������������������������������������������������������������������������������372
12.2 Streamlit in Industry: maxon Group����������������������������������������������������������373
12.2.1 Developing a Novel Surgical Scope Adapter System for Minimally
Invasive Laparoscopy�����������������������������������������������������������������������374
12.2.2 Streamlit Command and Control Dashboard������������������������������������377
12.2.3 Closing Remarks������������������������������������������������������������������������������378
12.3 Summary��������������������������������������������������������������������������������������������������379

xi
Table of Contents

Appendix A: Streamlit Application Program Interface���������������������381


A.1 The Streamlit API����������������������������������������������������������������������������������������381
A
 .1.1 Displaying Text�����������������������������������������������������������������������������������381
A
 .1.2 Displaying Data����������������������������������������������������������������������������������397
A
 .1.3 Displaying Charts�������������������������������������������������������������������������������402
A
 .1.4 Input Widgets�������������������������������������������������������������������������������������416
A
 .1.5 Displaying Interactive Widgets�����������������������������������������������������������443
A
 .1.6 Page Structure�����������������������������������������������������������������������������������447
A.1.7 Displaying Status and Progress���������������������������������������������������������451
A
 .1.8 Utilities�����������������������������������������������������������������������������������������������455
A.1.9 Session State Management���������������������������������������������������������������459
A
 .1.10 Data Management����������������������������������������������������������������������������461
A
 .1.11 The Hamburger Menu�����������������������������������������������������������������������467

Bibliography�������������������������������������������������������������������������������������469

Index�������������������������������������������������������������������������������������������������473

xii
About the Authors
Mohammad Khorasani is a hybrid of
an engineer and a computer scientist
with a Bachelor of Science in Mechanical
Engineering from Texas A&M University and a
master’s degree in Computer Science from the
University of Illinois at Urbana-Champaign.
Mohammad specializes in developing and
implementing software solutions for the
advancement of renewable energy systems and services at Iberdrola. In
addition, he develops robotic devices using embedded systems and rapid
prototyping technologies. He is also an avid blogger of STEM-related topics
on Towards Data Science – a Medium publication.
linkedin.com/in/mkhorasani/

Mohamed Abdou is a software engineer with


diverse academic and industrial exposure,
a graduate of Computer Engineering from
Qatar University, and currently an Software
Development Engineer at Amazon. Mohamed
has built a variety of open source tools used by
tens of thousands in the Streamlit community.
He led the first Google Developer Student Club
in Qatar and represented Qatar University in
national and international programming contests. He is a cyber security
enthusiast and was ranked second nationwide in bug bounty hunting in
Qatar in 2020 among under 25-year-­olds.
linkedin.com/in/mohamed-­ashraf-­abdou/

xiii
About the Authors

Javier Hernández Fernández specializes


in the area of technology innovation and
brings over 20 years of practical experience
in overseeing the design and delivery of
technological developments on behalf
of multinational companies in the fields
of IT, telecom, and utilities. He publishes
extensively, speaks at conferences around the
world, and spends his days wading through
piles of academic papers in the hope of finding something interesting.
He holds master’s degrees in both Energy Management and Project
Management, in addition to a BSc in Computer Science from the Faculty of
Engineering of the University of Ottawa.
linkedin.com/in/javier-­hernandezf/

xiv
About the Technical Reviewers
Rosario Moscato has a master’s degree in Electronic Engineering
(Federico II University, Naples) as well as a master’s degree in Internet
Software Design (CEFRIEL, Milan). He also has a Diploma in Apologetics
(Pontifical Athenaeum Regina Apostolorum, Rome) and a master’s
degree in Science and Faith (Pontifical Athenaeum Regina Apostolorum,
Rome). Rosario has gained over 20 years of experience, always
focusing his attention on the development and fine-tuning of the most
innovative technologies in various international companies in Europe
and Asia, covering various highly technical, commercial, and business
development roles.
In recent years, his interest has focused exclusively on artificial
intelligence and data science, pursuing, on one hand, the goal of
enhancing and making every business extremely competitive by
introducing and supporting machine and deep learning technologies
and on the other hand, analyzing the ethical-philosophical implications
deriving from the new scenarios that these disciplines open up.
Rosario has authored two books, and he is a speaker at international
research centers and conferences as well as a trainer and technical/
scientific consultant on the huge and changing world of AI.
Currently, he is working as Senior Data Scientist with one of the biggest
multinational IT companies in the world.

Randy Zwitch is a data science and analytics professional with broad


industry experience in big data and data science. He is also an open
source contributor in the R, Python, and Julia programming language
­communities.

xv
Another Random Scribd Document
with Unrelated Content
it. Said he to himself, “When Tortoise carries it, then the ashes will fall
down.” This he did, so that he might follow to the place where Tortoise
would go.

Next day, Tortoise was up at the same time with the first Ngwai. And at
daybreak, Leopard followed, observing the ground closely with his eyes;
and he saw the ashes. The fellow, at once, went on his journey, striding
quickly, quickly, until he reached to where the great Goat was standing. It
explained to him, as it had to Tortoise, its use, and invited him to enter. Said
he, “O! Mbodi of my father Njambe! open to me the house!” And It opened
the hole. He entered; and he discovered Tortoise cutting meat. Tortoise was
displeased, and said to him, “Chum! is that the way you do?” They cut
pieces of meat, they got ready, and they went back to town.

The next day, although Tortoise was vexed at Leopard, they started together
on their journey; and they arrived at the Goat. They said as before, “O!
Mbodi! Friend! open to us the house!” It opened the aperture; and they
entered. Tortoise warned Leopard, “Chum! Njâ! don’t touch the heart!”
They cut meat. Then Leopard said that he was going to lay hold of the
heart. But Tortoise said, “No!” Leopard cut and cut, and was going on to the
heart. Tortoise again said to him, “Not so!” They went on cutting. Finally
Leopard laid hold of the heart! The Goat at once made a great outcry, “Ma-
a! Mba-a!” and died instantly.

The people of the town that was near by, heard, and they said, “The Mbodi!
what has happened to it? Young men! go ye! Hasten ye! for, that Mbodi is
crying!” They went, and discovered the body of the Goat stretched out.
They went back to the town and told the people that, “The Mbodi is dead!”

While this was going on, as soon as Tortoise inside the body knew that the
Goat was dying, he began to seek for a hiding-place. He said, “I am for the
stomach!” Leopard said, “No! that is the hiding-place of the elder one”
(himself). Then Tortoise said, “I will go and hide in the bowels.” Leopard
said, “That also is the hiding place of the elder.” Then Tortoise said, “Well!
I’m going to hide in the fountain of the water of the belly” (the urinary
bladder). Leopard said, “Yes! that is the share of the younger.” Tortoise
thrust himself in there. Leopard jumped into the stomach.

When the people came, they discovered the Goat lying flat, and they said,
“Tie ye it!” (to carry it away). Others said, “No! let it be butchered here.”
They all said, “Yes!” And they cut it in pieces. They took out the entire
stomach, and laid it aside. They took that fountain, and flung it out in the
bushes.

Concealed by the bushes, Tortoise crawled out of the sac, and, pretending to
be displeased, called out, “Who dashed that dirty water in my face, as I was
coming here, seeking for my fungi here in the forest?” They apologized,
saying. “Chum! we did not know you were in those bushes. But, come, and
join us.” So, he went there; and he, in pretence, exclaimed, “What thing can
so suddenly have killed Friend-Creator his Mbodi there? Alas! But, Imĕ!
what a large stomach that is! Would you say that it was not it that killed
Mbodi? Let us send some children to pierce that stomach. But ye! when ye
shall go to pierce it, first bring spears, then jab the spears through it. I have
not seen such a stomach as that!”

They finished the cutting in pieces; and they gave Tortoise his share of the
animal. He left, bidding them await his return. He went hastily with the
meat to his town, and sat down to rest for only a little while. Then he
rapidly went back again to see what would happen to Leopard.

The family of Njambe had taken that stomach and laid it in the water of a
stream. Then they took spears, and they stabbed it. Leopard, being
wounded, struggled up and down as he tried to emerge from inside the
stomach. The people, when they saw this, shouted, “Aw! lâ! lâ! lâ!” And
there was Leopard lying dead! For, in stabbing that stomach, the spears had
reached Leopard.

Tortoise said to them, “Give me the skin of Leopard!” So they handed it to


him. He went off with it to his house. When it was dried, he took it into his
inner room, and hung it up. He said to his children, “Let no person bring
any of the children of Njâ into this room.”
Before that time, the children of Tortoise and of Leopard always hunted
small animals; and they were accustomed daily to kill rats in their houses.

On another day, the children of Leopard having no meat, and not knowing
that their father was dead said, “A hunt for Betoli tomorrow!” The children
of Tortoise replied, “Yes!”

Early in the next day then, the children of Leopard made ready and called
for those of Tortoise; and they all started together.

They began at first at Leopard’s end of the town; and, going from house to
house, opened the houses and killed rats. They passed on toward Tortoise’s
end of the town, opening houses, and killing rats. When they came to the
room of Tortoise himself, his children said to the others, “No!” The children
of Leopard asked them, “Why?” As they arrived at the door, the children of
Tortoise said, “Our father said that, even for catching rats, we should not
enter that room.” But the children of Leopard broke down the door, and
entered into the room. There they lifted their eyes, and discovered the skin
of their father Leopard hanging! At once, they all hasted out of the house.
But, suppressing their sorrow and indignation, shortly after this, they all
said, “To go to throw wheels on the beach!” (a game; solid wheels, about
eight or ten inches in diameter, and some three inches thick, chopped out of
an enormous tuber). They made ready their little spears, and they all went in
a company. Their challenge was, “To the beach!” These arranged
themselves on one side, and those on the other.

The children of Tortoise began the game, rolling the wheel to the children
of Leopard. These latter, as the wheel rolled by, pierced its center with all
their spears; none failed. The Leopard company shouted in victory. “Boho,
eh?” And the Tortoise company dared them with, “Iwâ!” Then the Leopard
company insultingly retorted, “We are the ones who are accustomed to
sleep with people’s sisters, and continue to eat with them!” (i.e., that they
could commit crimes with impunity, and still be allowed the intimate
friendship of eating together, without the others daring to punish them).
Then the Leopard company bowled the wheel toward the side of the
Tortoise company. These latter pierced the wheel with all their spears; none
missed. The Tortoise company shouted for victory, “Boho! eh?” And the
Leopard company dared them with, “Iwâ!” Then the Tortoise children
shouted boastfully, “We are those who are accustomed to kill people’s
fathers, and hang up their skins, eh?”

At this, the Leopard children began to rage, and joined a fight with the
children of Tortoise.

The children of Tortoise, and himself, and their wives and their children,
fled and scattered over the logs into the stream of water, and hid themselves
in holes, and never came back to town.
TALE 33
The Fights of Mbuma-Tyĕtyĕ and An Origin of the
Leopard
Persons

Mekuku, and Two of His Sons Mbuma- Kâ (Snails)


Tyĕtyĕ and Njâ Ihonga-Honga (A Giant
King Njambu Tooth)
Betoli (Rats) Hova (A Magic Gourd)
Mwamba (Snakes) Tângâ (Horn)
Ngângâlâ (Millepedes) Ibumbu (Bundle of
Kedi (Stinging Ants) Medicine)
Njambu Ya Mekuku (Spirits), and His Kanja (A Bowl)
Town Ikanga (Spear)
Women Hidden in Chests Ngalo (A Magic
Ngwaye (Partridge) Amulet)

NOTE

Ngalo is a powerful fetish-charm. Sitting in a visitor’s lap for a few


moments, is a mode of welcome.

“Njambu” is one of their forms of spelling the name of the Creator; very
commonly used also for human beings. The account of the wrestling-match
is suggestive of the surroundings of a modern athletic field.

Njambu built a Town. He continued there a long time. After he had finished
the town, he married very many wives. After a short time they all of them
bore children. Those births were of many sons. He gave them names:
Among them were, Upuma-mwa-penda (Year-of-doubt), and Njâ (Leopard).

And again, his wives, after a short time, all of them became mothers. This
time, they gave birth to a large number of daughters. He gave them also
names.

His town was full with men and women; they were crowded. And all busy.
They that worked at stakes, went to cut saplings; those that made rattan-
ropes, went to cut the rattan-vine; they that shaped the bamboo for building,
went to cut the bamboo-palms; they that made thatch went to gather the
palm-leaves; they that set up the stakes of the house-frame went to thrust
them into the ground; they who fastened the walls, fastened them; they who
tied thatch on the roof, tied it; they who split the rattan vines for tying, split
them.

The town was full of noise. The children of Njambu kept their father’s town
in motion. They rejoiced in the abundance of people and their force. They
took dowries also for their sisters, and gave them in marriage to young men
of other towns.

Arguments were discussed; stories about White Men were told;


amusements were played; food was eaten; and the sons of Njambu married
wives.

One of Njambu’s sons, Upuma-mwa-penda, said to his mother, “Make me


mekima,” (mashed plantain). His mother asked him, “Where are you going
with the mekima?” He answered, “I’m going to seek a marriage.” And she
said “Good!”

In the morning, he took his rolls of mashed plantains, and started to go on


his journey. He said to his mother, “You must keep my house.” She replied,
“It is well.”

He went on, on, on, until, on the road ahead, he met with two Rats, who
were fighting. He took an ukima-roll, divided it, and gave to them, saying,
“Take ye and eat.” They accepted, and told him, “You shall arrive at the
end.”

He goes on stepping quickly, quickly; and meets two Snakes fighting. He


parted them. He took an ukima-roll and gave to them; they ate. They said to
him, “You shall reach the end.”

He goes on with his journey, until ahead were two Millepedes fighting. He
said to them, “For what are you killing each other?” He parted them, and
gave them an ukima-roll. They took it and said, “You shall reach the end!”

He lay down in the forest at night. At midnight, his mother saw, in her
sleep, something that said, “Go with thy two daughters in the morning, and
take food for Mbuma-Tyĕtyĕ (another name for Upuma-mwa-penda).”

Early in the morning, she awoke her two daughters, and said, “Come! let us
go to follow after your brother; he is still on his way.”

They started, on, on, on, until they found him sitting down in the path. They
brought out the food from their traveling-bag, and they said, “We have
come to give you food.” They prepared the meal, and they ate. And they
slept that night in the forest.

Next morning, they started again, and they walked on, on, on, with their
journey. As they came on their way, they listened ahead, and they heard
something, saying, “Eh! fellows, eh! eh! fellows eh! Nobody shall pass!
Nobody shall pass here!”

When they drew near, they met an immense quantity of Red stinging Ants
spread from the ground up to the tree-tops, entirely closing the way.
Mbuma-tyĕtyĕ and his company said, “Ah! these are they who were
shouting here!” He advanced to the fight, and called to his younger sister,
“Come on!”

She lifted her foot just to tread upon the Ants; and they instantly entirely
covered her. He and his company tried in vain to draw her back. The Ants
shouted, to strengthen themselves. “Eh! fellows, eh!”
He, still fighting, called to the elder sister, “On ahead!” Just as she lifted her
foot, there came all the Tribe of Red Ants, and would have covered her up.
The woman jumped to one side vigorously, and stood there in that spot,
fanning away the sweat of her exertions, pĕ, pĕ, pĕ. She returned again to
the Ants; and they met. She called out, “Ngalo! hot water!” and it appeared.
She took it, and dashed it at the Red Ants. But they all went into their holes;
and came out at another opening, again closing the path. She still stood
there ready to fight; but they covered her, and dragged her behind them.

The Ants shouted over their victory, “Eh! fellows, eh! Today no person
passes here!”

The son called to his mother, “Mother! come on!” His mother said, “My
child! I am unable.” He called, “Ngalo! Fire!” Fire at once appeared.
Having drawn back the corpses of his sisters, he seized the fire, and thrust it
into the nests of the Ants. He thrust it also among the trees. The flame
ignited them; and the surrounding forest burned to ashes with all the trees.
And the Ants were all burned too.

Then he brought his sisters to life, by taking that ashes, and throwing it over
them, and down their throats into their stomachs.

When the day darkened, he said, “Ngalo! a house!” A tent at once appeared,
with a table, and tumblers, and water, and all food. They sat there and ate.
When they finished eating, they set tea on the table. They drank; they talked
of their experiences. When they ended, they said, “Let us lie down
together.” So they lay down for the night.

As the next day was coming, a Partridge gave forth its voice, “Rise! tyâtyâ
lâ! tyâtyâ lâ!” And the day broke also. They wash their faces; they set tea on
the table, and drank it. They folded the tent-house, and swallowed it, (as a
mode of carrying it). They started with their journey, and went conversing
on the way.

As they came along, Something was heard ahead. They listened, and heard
a song. “Gribâmbâ! eh! Gribâmbâ! eh!” Mbuma-tyĕtyĕ and his mother and
sisters kept on going toward the sound, which continued, “Dingâlâ! eh! A
person will not pass! No doubt about it! Dingâlâ! eh! Wherever he comes
from, he can pass here only by coming from above.”

The man and his company approached the source of the song, and
exclaimed, “There it is!” They went on and found the entire tribe of Snails
filling the road hither and yonder. He said to his mother, “What shall we do
with the Kâ Tribe?” They sat down to consider. They decided, “A fight! this
very day!” They sat still, and rested for a while. Then he went ahead and
shouted to his younger sister, “Come!” She called out, “Ngalo! a short
sword!” It appeared. She called again, “A strong cloth!” It appeared, and
she dressed herself with it.

As she approached the Snails, one of them fell on her head with a thud, ndi!
She took the sword, and struck it, ko! The Snails shouted, “We’re nearing
you!” A crowd of them came rapidly, one after another; in a heap, they
entirely covered her, vyâ! And she lay a corpse! The Snails swarmed over
her, and taking her, threw her behind them. They shouted in victory, “Tâkâ!
Dingâlâ! eh!”

Then the elder sister said she was going to help her brother in facing the
Snails. Her mother objected, “You? Stay!” But she replied, “Let me go!”
She girded her body tightly, and then she entered the fight. The Snails
surrounded her. They were about to drag her to their rear, when, she, at the
side of the path, attempted to spring from them. But they swarmed over her.
And she lay a corpse! The mother was crying out, “O! My child!” when the
Snails covered her too.

Mbuma-tyĕtyĕ retreated, to rest himself for a short time, and called out,
“Ngalo! a helmet!” It appeared. He fitted it to his head. He called again,
“Ngalo! a glass of strong drink, and of water too!” It appeared. He asked for
tobacco. It appeared. “Matches!” They appeared. He struck a match, and
smoked. As he thrust the cigar in his mouth, it stimulated him; it told him
things of the future in its clouds of smoke. After he had rested, he stood up,
again for the fight.

The Snails tuned their song:


“Iyâ! Dingâlâ! disabĕte!
Iyâ! Dingâlâ! sâlâlâsâlâ! Disabĕte!
Iyâ! Dingâlâ! Iyâ! Dingâlâ!
Iyâ! Dingâlâ! Sâlâlâsâlâ!
Iyâ! Dingâlâ! Eh! Bamo-eh!”

The Snails, in their fierce charge, killed him, and were about to take away
the corpse; when, his Ngalo returning him to life, he sprang erect, and cried
out, “Ah! my Father Njambu! Dibadi-O!”

And he took up his war-song:—

“Tata Njambu ya milole, milole mi we.


Ta’ Njambu! milole mi we.
Ta’ Njambu! milole mi we.
Milole mi we. Ta’ Njambu!”

All that while, the mother and his sisters were lying dead.

The Snails were shouting in their victory, “Tâkâ!”

Mbuma-tyĕtyĕ took a short broad knife in his hands, and shouted, “Dibadi!”
He girded his body firmly, and stood erect. He called out in challenge, “I’ve
come!” The Snails answered, “You’ve reached the end!”

They fought. The man took his sword. The Snails fell down on him, ndwa!
But the man stood up, and moved forward. He laid hold of a small tree. He
cut it, and whirled it about at the Snails. And the Snails fell down on the
ground, po! But they rose up again flinging themselves upon the man,
ndwa! The man jumped aside crying out, “Ah! My father Njambu! Dibadi-
O!”

He took fire, thrust it among the tribe of Snails, and every one fell down on
the ground, mbwâ!

Then he shaped a leaf into a funnel, and dropped a medicine into the noses
of his mother and sisters. They slowly rose and tried to sit up. He poured
the ashes of the Snails over them, po! They breathed it into their stomachs,
kii! and they came fully to life.

Then they said, “You are safe! Now! for our return home!” He said,
“Good!” And they returned.

Mbuma-tyĕtyĕ continued his own journey, on, on, on, until at a cross-roads,
he found a giant Tooth, as large as a man. Tooth asked, “Where are you
going?” Said he, “I’m going to seek a marriage at a town of Njambu-ya-
Mekuku.” Then, with his axe in hand, he turned aside from the path;
chopped firewood, chop, chop, chop, chop, mbwâ! Then he kindly carried a
lot of it, and presented it to Tooth. He also opened his bag, and taking out
an ukima roll, laid it down at the feet of Tooth; also a bundle of gourd-
seeds, and laid it down; and then he said, “I’m going.” But the giant Tooth,
pleased with him, said to him, “Just wait!”

So, he waited; and, while waiting, said, “Ngalo! a fine house!” It appeared
there. “A table!” There! “Good food!” There! “Fine drink!” There! They
two ate, and drank, and had conversation together.

Tooth said to him, “Where you go, do not fear.” It brought out from its hut a
water-gourd, and said, “I will not show you more, nor will I tell you
anything at all, but this Hova itself will tell you.” Then Tooth said to him,
“Go well!”

The man took the Gourd and clung to it as if it was a treasure.

He started again on his journey, and had gone but a little way, when he
found Kuda-nuts in immense abundance. He took up one, drew his knife,
cracked the nut, and threw the kernel into his mouth. He stooped again, and
was about to pick up another, when the Gourd warned him, “I! I!” So, he
left the nuts.

He came on in his journey, and found in abundance wild Mangoes. He took


one, split it, and bit out a piece; and was about to add another, when the
warning came, “I! I!” So, he left the Mangoes; yet his belly felt full. Still on
his journey, thirst for water seized him at a stream. He took his cup, plunged
it into the water, filled it, drank, and was about to take more, when the
warning said, “I! I!” And he left the water. Yet his belly felt full.

On his journey still, till he came to a large river. There he stood, and
listened, as he heard a boat-song, “Ayĕhĕ! âhĕ! âyĕhĕ! ĕ!” There passed by
the sound of paddles, wom’! wom’! but he saw no person; nor did he see
any canoe. Gourd said to him, “Call!” Then he called out, “Who are these?
Bring me a canoe!” A voice replied, “Who are you?” He answered, “I!” The
canoe came nearer, its crew singing, singing, until it grounded on the beach.
He saw what seemed only a great log! Gourd said to him, “Embark!” He
got in. The crew also (apparently) got in again; for, the sound of paddles
was again heard, worom’! worom’!

Instead of going straight across the river, they pulled far up stream, and then
came all the way down again on the other side. As they came, they were
constantly keeping up the song, until they grounded at the landing-place at
that other side. Still he saw nothing of the invisible boatmen, when he
landed.

Ascending the bank of the stream, he saw a strange new town. He entered
its public reception-house, and sat down. As he was looking for some one to
come, a Horn came and sat on his lap, and then moved away. A Bundle of
Medicine came, sat, and moved away. A Bowl came and sat. A Spear came
and sat. All these Things saluted him. Behold! they were the People of that
Town (in disguise); but he saw none of them.

Gourd said to him, “Come and escort me into the back-yard.” He at once
stepped out; and, when in the back-yard, It said. “Put me down.” (It had
been carried suspended from his shoulder.) He put It down, standing It at
the foot of a plantain-stalk. Gourd making a leaf funnel, dropped something
into his eyes. His eyes suddenly, kaa! were opened, and he saw everything,
and all the people, and the whole street.

Returning to the house, he sat down. Maidens came. Such goodness as you
have scarcely known! Forms lovely to see!
The Chief of the town said, “Make ye food!” It was made at once. Then one
whom he chose was given him for his wife.

She and this young son-in-law were left sitting in the house. The wife began
to weep, saying to herself, “What will be his manner of eating?” (a test to
be applied to him as suitor). The Gourd called him with a voice like the
stroke of a bell, ngĕng! He went out to the Gourd, and It said to him, “When
you shall eat, take one piece of plantain, flesh of the fowl, and then dip one
spoonful of the udika (wild-mango gravy), put them in your mouth; and
thou shalt say unto her, ‘Take; you may remove the food.’ You shall see
what will happen.” He did so. His wife laughed in her heart; and she went
and told her mother, “He is a person of sense.” The towns-people said to
her, “What did he do?” She evasively said to them. “Let us see!”

In the evening, the father-in-law said to him, “You have found us here in the
midst of a work of garden-making for your mother-in-law.” (A man is
always expected to do some work for his wife’s mother.) He said. “That’s
good, Father!”

Gourd called to him, and told him, “It is not a garden; it is an entire forest;
it is not planted; it is all wild country. But, tomorrow, at daylight, early, you
say to your wife that she must go and show you. You must take one young
plantain-set, and a machete, and an axe. When you shall arrive there, then
you shall say to her, ‘Go back!’ And she will go back. Then, you will slash
with the machete, kwa! and leave it. You take also the axe and cut, ka! and
say, ‘Ngunga-O! Mekud’ O! Makako ma dibakĕ man­jeya-O!’ You shall see
what will happen. Then you insert the plantain-set in the ground. Then you
set up a bellows, and work it. And you shall see what will happen.”

(All that Garden-Plan was made by the townspeople in order that he might
weary of the task, and they then find excuse for killing him. For they were
Cannibals.)

At daybreak, he did so. He called his wife. He and she went on until they
came to the chosen spot. Said he, “Go back!” The woman went back. He
did just as he had been directed, as to the clearing, and the felling, the
incantation, and the planting. The plantains bore, and ripened at once. Every
kind of food developed in that very hour.

The man went back to the town, and sat down. They set before him food.

They sent a child to spy the garden. The child returned, excitedly saying,
“Men! the entire forest! with all such foods! only ripe ones!” They said to
him, “You’re telling a falsehood!” And they said, “Let another go and see.”
He went; and returned thence with a ripe plantain held in his hand.

In the evening, the Chief said to him, “Sir! tomorrow, people will have been
filled with hunger for meat. A little pond of your mother-in-law is over
there. Tomorrow it is to be bailed out.” (In order to get the fish that would
be left in the bottom pools.)

Gourd called him, ngĕng! He went to It, and It said, “That is not a pond, it
is a great river, (like the Lobi at Batanga). However, when you shall go, you
must take one log up stream and one log down stream (for a pretence of
dams). You shall see what will happen. Then you must bail only once, and
say, ‘Itata-O!’ You shall see.”

Next morning, he did so. And the whole river was drained; and the fish
were left in the middle, alone. He returned to the town, and sat down. The
people went to see; and, they were frightened at the abundance of fish. For
a whole month, fish were gathered; and fish still were left.

The Chief went to call his townspeople, saying, “We will do nothing to this
fellow. Let him alone; for, you have tried him with every test.” They said,
“Yes; and he has lingered here,” (i.e., was no longer a stranger; and
therefore should not be eaten). But, they said, “Tomorrow there will be only
wrestling.” (This was said deceitfully.)

In the evening, the father-in-law called him, saying, “Mbuma-tyĕtyĕ,


tomorrow there is only wrestling. You have stayed long here. As you are
about to go away with my child, there is left only one thing more that she
wants to see, that is, the wrestling tomorrow.”
Gourd called him, and said to him, “It is not only for wrestling. You know
the part of the village where is the Wrestling-Ground. There is a big pit
there. You will take care if you are near that pit; and you must push them
in.”

In the evening, food was made, and soon it was ready. He and his wife ate,
and finished. They engaged in conversation. They took pleasure over their
love that night.

The next day, in the morning, very early, the drums, both the elimbi and the
common, began promptly to tell things in the street. (The Elimbi is a
specially made drum used to transmit information by a system of signal
strokes. News is thus carried very far and very rapidly.) The Gourd called
him, and handed him a leaf of magic-medicine, to hold in his hand, saying,
“Go; fear not!”

The townspeople began to shout back and forth a song (to arouse
enthusiasm). Two companies ranged on each side of the street, singing.
“Engolongolo! hâ! hâ! Engolongolo! hâ! hâ!”

“Engolongolo! hâ! hâ!


Engolongolo! hâ! hâ!”

Hearing their song as a challenge, the young man went out of the house into
the street. Up to this point, the strongest wrestler of the town, named
Ekwamekwa, was not with them; he was out in the forest, felling trees.

When the towns-people saw the young man standing in the street, they
advanced as many as a hundred all at once. He laid his hands upon them,
and they all went back; he also went back. Soon he advanced again, and his
single opponent advanced. They two laid their hands on each other’s
shoulders. The townspeople began another song, as if in derision. “O! O! A!
O! O! A! O! O! A!”

At once, he seized his opponent, and threw him into the pit. Thereupon, his
father-in-law shouted in commendation, “Iwâ!”
Another one came forward; Mbuma-tyĕtyĕ advanced; and as they met
together, he took him, and threw him into the pit. Again the shout, “Iwâ!”

The sisters of the two men in the pit began to cry. The others said to the
girls, “What are you doing? He shall die today! It is we who shall eat those
entrails today!” (Among cannibals, a choice portion.)

Another one was coming, and, as they met together, again the shout of
derision, “O! O! O! A! O! O! O! A! O! O! O! A!” But, at one fling,
Mbuma-tyĕtyĕ cast him into the pit. “Iwâ” was repeated.

The sister of him who was thrown thus into the pit began to cry. The people
rebuked her, “Mbâbâ! mbâbâ! Join in the singing!”

Another one was coming; Mbuma-tyĕtyĕ advanced; and as they came


together, he lifted him, holding him by the foot. The singers, to encourage
their man, said responsively, “Dikubwe! Dikubwe! Fear not an elephant
with his tusks! Take off! take off!” Mbuma-tyĕtyĕ lifted him, and promptly
pushed him down into the pit, with a thud, ‘kodom’!

The people began to call out anxiously, “Wĕ-e! wĕ-e! O! They are
overcome! They are overcome! O! Some one must go hastily, and call
Ekwamekwa, and tell him that people are being destroyed in the town, and
he must come quickly.”

Some one got up, and ran to call Ekwamekwa, wailing as he went, “Iyâ!
Iyâ! Iyâ! Ekwamekwa, iyâ-O! Come! People are exterminated in the town!”

He heard with one ear (i.e. at once). He snatched up his machete and axe,
saying, “What is it?” The messenger repeated, “Come! a being from above
has destroyed many a one in the town!”

The man Ekwamekwa, full of boasting, said, “Is it possible there is no man
in the town?” He came, already shaking the muscles of his chest, pwâ! pwâ
(a custom with native wrestlers, as a lion his mane). His muscles were
quivering with rage, nyâ! nyâ! nyâ!
The drums, both the elimbi-telegraph and the common, were being beaten,
and were sounding without intermission. The singers were shouting; the
wrestlers’ bodies had perspiration flowing from them. The noise of the
people, of the telegraph drums and other drums, and sticks (sticks beating
time) were rattling kwa! kwa! kwa!

As Ekwamekwa appeared, the women and children raised their shrill


voices. The shouters yelled, “A! lâ! lâ! lâ! â!”

Mbuma-tyĕtyĕ advanced at once. He and Ekwamekwa laid hold of one


another, and alternately pressed each other backward and forward. The one
tried tricks to trip the other, and the other tried the same. Ekwamekwa held
him, and was about to throw him on the ground. The other jumped to one
side, and stood, his muscles quivering, po! po! po! tensely. Ekwamekwa
seized him about the waist and loins. The people all were saying, “Let no
one shout!” (lest Ekwamekwa be confused). They said, “Make no noise! He
is soon going to be eaten!” And it was a woman who said, “Get ready the
kettle!”

Ekwamekwa still held him by the loins. So, they called out, “Down with
him! Down with him!” But Mbuma-tyĕtyĕ shouted, “I’m here!” He put his
foot behind Ekwamekwa’s leg, and lifted him, and threw him into the pit,
kodom!

Then there was a shout of distress by the people, “A! â! â! â!” and
Ekwamekwa called out, “Catch him! catch him!” Mbuma-tyĕtyĕ, lifting his
feet, ran to his father-in-law’s end of the town, and all the men came after
him. His father-in-law protected him, and said to them, “You can do nothing
with this stranger!”

At night, the Chief said to him, “Sir, you may go away tomorrow.”

At daybreak, food was cooked. The Chief Njambu-ya-Mekuku, put his


daughters into large chests. In one was a lame one; another, covered with
skin disease; and another, with a crooked nose; and others, with other
defects in other chests, each in her own chest. But, he put the wife into a
poor chest all dirty outside with droppings of fowls, and human excrement,
and ashes. In it also, he placed a servant and all kinds of fine clothing. Then
said he to Mbuma-tyĕtyĕ, “Choose which chest contains your wife.”

The Gourd at once called him, and It said to him, “Lift me up!” It
whispered to him, “The chest which is covered with dirt and filth, it is the
one which contains your wife. Even if they say, ‘Ha! ha! he has had all his
trouble for nothing; he has left his wife,’ do you nevertheless carry it, and
go on with your journey.”

He came to the spot where the chests were. The Chief said again, “Choose,
from the chests, the one which contains your wife.” Mbuma-tyĕtyĕ picked
up the poor one. They shouted. But, he at once started on his journey, and
on, until he came to the river, stepped into a canoe, paddled to the other
side, landed, and went on, carrying the chest. Almost in an instant (by his
magic Ngalo) he was at the place of the Great Tooth. It asked, “How is it
there?” He replied, “Good!” The Gourd, in leaving, reported to Its mother,
the Tooth, “A fine fellow, that person there!”

He went on with his journey, his feet treading firmly. Almost with one stride
(by aid of his Ngalo), in the twinkling of eyes, he was near the spring at his
own town.

Then he said, “Now let me open the chest here!” On his opening it, a
maiden attended by her servant came stepping out, arrayed in the clothing
which had been placed in the chest for her dress. One’s eyes would ache at
sight of her silks, and the fine form of her person. And you or any other one
could say, “Yes! you are a bride! truly a bride!”

Two young women rose up in the town to go to the spring to dip up water.
They were just about to come to the spring, when they saw their brother and
his wife and her servant. They two went back together rapidly to the town,
saying, “Well! if there isn’t the woman whom Mbuma-tyĕtyĕ has married!
They are two women and himself!”

The town emptied itself to go and meet them on the path. His father took
powder and guns, with which to announce the arrival; and cannon were

You might also like