0% found this document useful (0 votes)
11 views62 pages

58614

Uploaded by

shimadrehsrp
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views62 pages

58614

Uploaded by

shimadrehsrp
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

Download the Full Version of textbook for Fast Typing at textbookfull.

com

Real-Time Business Intelligence and Analytics:


International Workshops, BIRTE 2015, Kohala Coast,
HI, USA, August 31, 2015, BIRTE 2016, New Delhi,
India, September 5, 2016, BIRTE 2017, Munich,
Germany, August 28, 2017, Revised Selected Papers
https://textbookfull.com/product/real-time-business-
Malu Castellanos
intelligence-and-analytics-international-workshops-
birte-2015-kohala-coast-hi-usa-
august-31-2015-birte-2016-new-delhi-india-
september-5-2016-birte-2017-munich-germany/

OR CLICK BUTTON

DOWNLOAD NOW

Download More textbook Instantly Today - Get Yours Now at textbookfull.com


Malu Castellanos
Panos K. Chrysanthis
Konstantinos Pelechrinis (Eds.)
LNBIP 337

Real-Time Business
Intelligence and Analytics
International Workshops
BIRTE 2015, Kohala Coast, HI, USA, August 31, 2015
BIRTE 2016, New Delhi, India, September 5, 2016
BIRTE 2017, Munich, Germany, August 28, 2017
Revised Selected Papers

123
Lecture Notes
in Business Information Processing 337

Series Editors
Wil van der Aalst
RWTH Aachen University, Aachen, Germany
John Mylopoulos
University of Trento, Trento, Italy
Michael Rosemann
Queensland University of Technology, Brisbane, QLD, Australia
Michael J. Shaw
University of Illinois, Urbana-Champaign, IL, USA
Clemens Szyperski
Microsoft Research, Redmond, WA, USA
More information about this series at http://www.springer.com/series/7911
Malu Castellanos Panos K. Chrysanthis
• •

Konstantinos Pelechrinis (Eds.)

Real-Time Business
Intelligence and Analytics
International Workshops
BIRTE 2015, Kohala Coast, HI, USA, August 31, 2015
BIRTE 2016, New Delhi, India, September 5, 2016
BIRTE 2017, Munich, Germany, August 28, 2017
Revised Selected Papers

123
Editors
Malu Castellanos Panos K. Chrysanthis
Teradata University of Pittsburgh
Santa Clara, CA, USA Pittsburgh, PA, USA
Konstantinos Pelechrinis
University of Pittsburgh
Pittsburgh, PA, USA

ISSN 1865-1348 ISSN 1865-1356 (electronic)


Lecture Notes in Business Information Processing
ISBN 978-3-030-24123-0 ISBN 978-3-030-24124-7 (eBook)
https://doi.org/10.1007/978-3-030-24124-7

© Springer Nature Switzerland AG 2019


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.
The use of general descriptive names, registered names, trademarks, service marks, etc. in this publication
does not imply, even in the absence of a specific statement, that such names are exempt from the relevant
protective laws and regulations and therefore free for general use.
The publisher, the authors and the editors are safe to assume that the advice and information in this book are
believed to be true and accurate at the date of publication. Neither the publisher nor the authors or the editors
give a warranty, expressed or implied, with respect to the material contained herein or for any errors or
omissions that may have been made. The publisher remains neutral with regard to jurisdictional claims in
published maps and institutional affiliations.

This Springer imprint is published by the registered company Springer Nature Switzerland AG
The registered company address is: Gewerbestrasse 11, 6330 Cham, Switzerland
Real-Time Business Intelligence and Analytics (BIRTE)

Preface

This LNBIP special volume on the BIRTE workshops serves as the proceedings of the
last two editions of its first decade. Since its inception in 2006, BIRTE evolved its
focus and its name to more accurately capture its scope but kept its acronym. This
volume reflects its new name “Real-Time Business Intelligence & Analytics” and
includes extended versions of selected papers presented in the 2015 and 2016 editions:
The 9th International Workshop on Business Intelligence for the Real-Time Enterprise
(BIRTE 2015) was held on August 31, 2015, in conjunction with the VLDB 2015
Conference that took place during September 1–4, 2015 in Kohala Coast, Hawaii. The
10th International Workshop on Enabling Real-Time Business Intelligence (BIRTE
2016) was held on September 4, 2016, in conjunction with the VLDB 2016 Conference
that took place during September 5–9, 2016 in New Delhi, India.
Following the previous workshop editions, these two editions of the BIRTE
workshop aimed at providing a forum for presentation of the latest research results, new
technology developments, and new applications in the areas of business intelligence
and analytics in the real-time enterprise. To ensure the quality of the program, each
paper was reviewed by three or four reviewers who provided their feedback to authors.
Authors of a conditionally accepted paper had to address the reviewers’ comments and
provide a summary of each improvement done to their paper. All authors had the
opportunity to further improve their papers with the feedback received at the workshop.
The two BIRTE editions presented in this volume were as successful as their
predecessors, with a high-quality program, evidenced by having full room in most
sessions. Both had the traditional structure of a blend of research paper presentations,
keynotes, and invited presentations from industry and academia as well as panel
discussions.
During the first decade, the BIRTE workshops had post-proceedings published after
the event by Springer as LNBIP volumes. Starting with the 11th International Workshop
on Real-Time Business Intelligence and Analytics (BIRTE 2017), which took place on
August 28, 2017, again in conjunction with the VLDB 2017 Conference, held on August
28–September 1, in Munich, Germany, the BIRTE workshop switched to regular pro-
ceedings, published at the time of the workshops (ACM ICPS 2017). This switch to
regular proceedings reflected the feedback from the authors and participants during
BIRTE 2016. However, keeping with the tradition, the presenters of BIRTE 2017 were
invited to submit extended versions of their papers for this LNBIP special issue. The
three selected papers, one from the keynote talk and two research papers, from BIRTE
2017 are included as an extension to the post-proceedings of BIRTE 2015 and 2016.
vi Real-Time Business Intelligence and Analytics (BIRTE)

In the following we present a summary of the BIRTE 2015, BIRTE 2016, and
BIRTE 2017 programs with emphasis on the papers included in this volume.

BIRTE 2015

BIRTE 2015 was organized in four sessions, of which the first session was devoted to the
four accepted research papers. The other three sessions were the keynote talk on
“Real-Time Analytics: The Third Time’s a Charm?” by Michael Franklin, and the invited
talks “Twitter Heron: Stream Processing at Scale” from Tweeter, “High-Availability at
Massive Scale: Building Google’s Data Infrastructure for Ads” from Google, and
“Apache Flink: Scalable Stream and Batch Data Processing” from TU Berlin. The closing
session included the panel on the topic “Can Big Data Platforms EVER Deliver
Real-Time Analytics?” moderated by Guy Lohman. We briefly describe next the four
research papers and the invited paper from Google, which appear in this volume.
The first paper titled “A Federated In-Memory Database System for Life Sciences”
was from the Enterprise Platform and Integration Concepts group at Hasso Plattner
Institute and Max Delrück Center. The authors present their hybrid cloud computing
approach that integrates decentralized computing resources to form a federated
in-memory database system that combines cloud computing with local storage and
processing of highly sensitive data and huge amounts of data that would be too costly
to transfer. The authors illustrate their approach on a real-world life sciences use case.
The second paper “An Integrated Architecture for Real-Time and Historical
Analytics in Financial Services” was a short paper from Datometry Inc. The authors
propose adaptive data virtualization (ADV) as an approach to satisfy the contradicting
requirements of high-speed real-time analytics by some applications like analysis of
ticker data, and scale by other applications like daily reporting. The authors illustrate
how ADV breaks data silos by letting applications use different data management
technologies without the need for database migrations or re-configuration of
applications.
In the third paper, “Processing of Aggregate Continuous Queries in a Distributed
Environment,” the authors from the University of Pittsburgh explore how the sharing of
partial aggregations can be implemented in the challenging environment of distributed
data stream management systems (DSMSs) performing on-line analytics where the
efficient execution of large numbers of aggregate continuous queries (ACQs) is crucial.
They formulate the problem as an optimization that combines sharing of partial
aggregations and assignment to servers to produce high-quality plans that keep the total
cost of execution of ACQs low and balance the load among the computing nodes. The
authors classify, implement, and compare optimizers and present their conclusions.
The fourth paper titled “Collecting and Analyzing User-Behavior Information in
Instant Search Using Relational DBMS” is a short one from the University of
California at Irvine where the authors study how to systematically collect information
about user behaviors when they interact with an instant search engine, especially in a
real-time environment. They present a solution, called RILCA, which uses front-end
techniques, instead of methods based on traditional Web servers, to keep track of rich
Real-Time Business Intelligence and Analytics (BIRTE) vii

information about user activities, a relational DBMS to store and analyze the log
records efficiently, and a dashboard to monitor and analyze log records in real time.
In the invited industrial talk “High-Availability at Massive Scale: Building Google’s
Data Infrastructure for Ads” from Google, the authors described the evolution of the
high availability strategies of the ads infrastructure from the first generation to today’s
approach based on multi-homed systems. These systems run hot in multiple datacenters
all the time, and adaptively move load between datacenters, with the ability to handle
outages of any scale transparently. The authors described their approaches for, and
experiences with, availability and consistency in multi-homed data storage and
processing systems. They shared details of the large-scale streaming systems Mesa and
Photon and a new system, Ubiq, a highly-available multi-homed system, that scales to
extremely high throughput by continuously processing events in small batches in near
real-time.

BIRTE 2016

The 10th BIRTE 2016 was a special workshop edition, celebrating ten years of
bridging academic and industrial innovation, as such it featured three keynote talks in
addition to the traditionally invited talks from academia and industry. The overall
program was organized into five sessions that included the keynotes “A Tale of Quest
for Real-Time Business Intelligence” by Rakesh Agrawal (Data Insight Labs), “Data
Exploration Challenges in the Age of Big Data” by Surajit Chaudhuri (Microsoft) and
“Hybrid Transaction and Analytics Processing (HTAP): State of the Art” by C. Mohan
(IBM); three invited talks and the closing panel which debated the key question, “The
Singularity of Real-Time Analytics, Are We There Yet?” moderated by Panos K.
Chrysanthis; and presentation of two research papers, and one research demo.
This volume includes extended versions of the two research papers and the demo
paper, which covered the broad spectrum from the use of real-time analytics for
recommendations (the PolyRecs system), to enabling real-time analytics over raw
XML data, to scheduling complex analytical workflows executing over multi-engine
environments (the IReS system). It also includes two papers of the invited talks from
Harvard University on “Data Systems That Are Easy to Design, Tune and Use in
Real-Time”, and from Google on “Ubiq: A Scalable and Fault-tolerant Log Processing
Infrastructure”.
In their presentations, the authors of “PolyRecs: Improving Page-View Rates Using
Real-Time Data Analysis” from the University of Athens, Greece, outlined their effort to
enhance the pageview rates of e-content in order to achieve higher market penetration
and gains in advertisements. They presented the design decisions underlying PolyRecs,
which enable PolyRecs to be both effective on-the-fly calculations of what might be
interesting to the browsing individuals at specific points in time as well as produce
accurate results capable of improving the user-experience. They finally shared the
experimental results of the real deployment of PolyRecs, pointing out that PolyRecs is a
domain-agnostic hybrid-recommendation system that successfully functions regardless
of the underlying data and/or content infrastructure.
viii Real-Time Business Intelligence and Analytics (BIRTE)

In the second research paper, titled “Enabling Real Time Analytics over Raw XML
Data,” its authors from Microsoft Bing, IIT Bombay, and Flipkart pointed out that
transforming data from a semi-structured format, such as XML, to a structured one is
often time consuming and inappropriate for real-time analytics. To avoid losing, or
rendering unactionable crucial, time-sensitive insights, they posed the question of how
to expose analytical insights in the raw XML data. They proposed the idea of extracting
complementary information (CI) from the raw semi-structured data repository for a
given user query to enhance users’ ability to better comprehend the original query
response. CI examples include the context of the user query and the hidden patterns in
the underlying XML data. Their solution is based on the node categorization model and
a new ranking function for candidate entity nodes based on the underlying XML data
structure. Crowd-sourced feedback on the CI discovered by their solution showed its
ability to reveal useful CI in real-world XML data repositories with high precision and
recall.
The demo presentation was on the Intelligent Resource Scheduler (IReS) from the
National Technical University of Athens, Greece. The details of the resource allocation,
optimizations and decision making of IReS are described in the developers’ demo
paper titled “Robust and Adaptive Multi-Engine Analytics Using IReS.” During the
demo, the attendees observed how to create, optimize, and execute workflows that
match real use cases over multiple compute and data engines, imposing their preferred
optimization objectives. Furtermore, the attendees had a chance to confirm the
resilience and adaptability of IReS in the presence of failed nodes, unavailable engines,
and load surges.
The paper “Data Systems That Are Easy to Design, Tune and Use in Real-Time”
captures the invited talk by Stratos Idreos, from Harvard University. In his
thought-provoking talk, the speaker discussed the vision of a future where businesses
are driven by explosive amounts of data, where data becomes readily available and its
power can be harnessed by everyone in real-time. He made the point that for this to
happen, it is crucial that data systems be easy to design, tune, and use in real-time, and
then described his group’s efforts towards this vision. These efforts include the
development of (1) adaptive data systems that can adjust to data and access patterns
on-the-fly, (2) self-designing data systems that make it easy to spin-off and test new
data system architectures in near real-time, and (3) curious data systems that make it
easy to explore data in real-time, even if we do not know what queries to ask.
The second invited paper from Google presents “Ubiq: A Scalable and
Fault-Tolerant Log Processing Infrastructure.” This infrastructure has been in
production for Google’s advertising system for many years, and has served as a critical
log processing framework for several dozen pipelines. During his talk, Manpreet Singh,
Ubiq’s lead developer, described Ubiq’s architecture ability to continuously process log
files in real time, while fully tolerating infrastructure degradation and data center-level
outages without any manual intervention. He pointed out that Ubiq guarantees
exactly-once semantics for application pipelines and provides an end-to-end latency of
under a minute.
Real-Time Business Intelligence and Analytics (BIRTE) ix

BIRTE 2017

The overall program of the 11th edition of BIRTE, BIRTE 2017, was organized into
four sessions that included a keynote, an invited talk, five research paper presentations,
an industrial paper presentation, and a closing panel. Extended versions of two of the
research papers and the keynote paper were selected to be included in this volume. We
briefly describe these three papers below.
The paper titled “Towards Interactive Data Exploration” corresponds to the keynote
talk in the workshop under the same title. In this talk, Carsten Binning from TU
Darmstadt and Brown University made the point that even though technology has been
a key enabler of the ongoing big data trend toward datafication of almost every research
field and industry with open-source tools like R and Hadoop and the advent of cheap,
abundant computing and storage in the cloud, the current big data tool set is ill-suited
for interactive data exploration. Consequently, the knowledge discovery process is a
major bottleneck in our data-driven society. He gave an overview of challenges for
interactive data exploration on large data sets and then presented current research
results that revisit the design of existing data management systems, from the query
interface to the underlying hardware, to enable interactive data exploration.
The paper titled “DCS: A Policy Framework for the Detection of Correlated Data
Streams” is an extended version of the paper “Detection of Highly Correlated Live
Data Streams” presented in the workshop. This is a product of a research collaboration.
The authors from the Universities of Pittsburgh, USA, and of Queensland, Australia,
proposed a solution, called DCS (Detection of Correlated Data Streams), which quickly
identifies windows of highly correlated data streams and provides results in real-time.
DCS achieves this by combining priority scheduling, pruning, and early termination to
maximize the detection of correlated pairs within a micro-batch. DCS uses the Pearson
correlation coefficient as a metric of correlation of two sliding windows of data streams
and supports two modes of operation, “cold start” and “warm start.” In the former
mode, the analysis of a micro-batch starts with no prior knowledge of correlated pairs
of streams and initializes the parameters of the priority scheduler PriCe’s utility
function to its default values, whereas in the latter mode, the utility function is ini-
tialized based on the results of the latest micro-batch analysis for deeper exploration.
The second extended research paper reported the results of a collaboration among
University of Toronto, Brown University, Intel Labs, and MIT. In their paper, titled
“Towards Dynamic Data Placement for Polystore Ingestion,” the authors proposed a
streaming ETL architecture to support heterogeneous workloads with data ingestion
and analytical queries, which are executed with strict performance guarantees. Their
prototype system consists of a transactional streaming engine (S-Store), an OLAP
back-end engine (Postgres), and a middleware (Big-DAWG) that controls the data
migration and execution of the queries. Using this prototype, the authors studied the
ingestion performance in terms of latency of various data placement and migration
(Copy and Move) strategies between S-Store and OLAP engines under different mixed
(read and write) ETL workloads.

February 2018 Malu Castellanos


Panos K. Chrysanthis
Organization

BIRTE 2015 and 2016


General Chair
Meichun Hsu Hewlett-Packard, USA

Program Chairs
Malu Castellanos Hewlett-Packard, USA
Panos K. Chrysanthis University of Pittsburgh, USA

Program Committee (BIRTE 2015)


Christof Bornhoevd RMS, USA
Alejandro Buchmann Technische Universität Darmstadt, Germany
Badrish Chandramouli Microsoft Research, USA
Shimin Chen Chinese Academy of Sciences, China
Ben Chin Ooi National University of Singapore, Singapore
Howard Ho IBM, USA
Wolfgang Lehner Dresden University of Technology, Germany
Fatma Ozcan IBM Almaden, USA
Torben B. Pedersen Aalborg University, Denmark
Kostantinos Pelechrinis University of Pittsburgh, USA
Evaggelia Pitoura University of Ioannina, Greece
Karthik Ramasamy Twitter, USA
Elke Rundensteiner Worcester Polytechnic Institute, USA
Mohamed Sharaf Queensland University, Australia
Eric Simon SAP-BO, France
Nesime Tatbul Intel Labs and MIT, USA

Program Committee (BIRTE 2016)


Roger Barga Amazon, USA
Christof Bornhoevd RMS, USA
Alejandro Buchmann Technische Universität Darmstadt, Germany
Shimin Chen Chinese Academy of Sciences, China
Howard Ho IBM, USA
Wolfgang Lehner Dresden University of Technology, Germany
Olga Papaemmanouli Brandeis University, USA
Evaggelia Pitoura University of Ioannina, Greece
Krithi Ramamrithan IIT Bombay, India
Karthik Ramasamy Twitter, USA
Mohamed Sharaf Queensland University, Australia
xii Organization

Eric Simon SAP-BO, France


Nesime Tatbul Intel Labs and MIT, USA

Sponsor and Student Travel Scholarships Chair


Panos K. Chrysanthis University of Pittsburgh, USA

Proceedings Chair
Kostantinos Pelechrinis University of Pittsburgh, USA

Webmaster
Anatoli Shein University of Pittsburgh, USA

Sponsors
HP VERTICA
Google Inc.

BIRTE 2017
General and Program Chairs
Malu Castellanos Hewlett-Packard, USA
Panos K. Chrysanthis University of Pittsburgh, USA

Program Committee (BIRTE 2017)


Stefan Appel Siemens, Germany
Alejandro Buchmann Technische Universität Darmstadt, Germany
Shimin Chen Chinese Academy of Sciences, China
Avrilia Floratou Microsoft, USA
Ashish Gupta Google, USA
Howard Ho IBM Almaden, USA
Wolfgang Lehner Dresden University of Technology, Germany
Marco Mellia Politecnico di Torino, Italy
Themis Palpanas Paris Descartes University, France
Panickos Neophytou NetBeez, USA
Olga Papaemmanouil Brandeis University, USA
Evaggelia Pitoura University of Ioannina, Greece
Mohamed Sharaf Queensland University, Australia
Nesime Tatbul Intel Labs and MIT, USA

Sponsor and Student Travel Scholarships Chair


Panos K. Chrysanthis University of Pittsburgh, USA

Proceedings Chair
Damianos Chatziantoniou Athens University of Economics and Business, Greece
Organization xiii

Webmaster
Anatoli Shein University of Pittsburgh, USA

Sponsors
National Science Foundation
Google Inc.
Contents

BIRTE 2015

RILCA: Collecting and Analyzing User-Behavior Information in Instant


Search Using Relational DBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Taewoo Kim and Chen Li

A Federated In-memory Database System for Life Sciences . . . . . . . . . . . . . 19


Matthieu-P. Schapranow, Cindy Perscheid, Alf Wachsmann,
Martin Siegert, Cornelius Bock, Friedrich Horschig, Franz Liedke,
Janos Brauer, and Hasso Plattner

An Integrated Architecture for Real-Time and Historical Analytics


in Financial Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Lyublena Antova, Rhonda Baldwin, Zhongxian Gu,
and F. Michael Waas

Processing of Aggregate Continuous Queries in a Distributed Environment . . . . 45


Anatoli U. Shein, Panos K. Chrysanthis, and Alexandros Labrinidis

High-Availability at Massive Scale: Building Google’s Data


Infrastructure for Ads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Ashish Gupta and Jeff Shute

BIRTE 2016

Past and Future Steps for Adaptive Storage Data Systems: From Shallow
to Deep Adaptivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Stratos Idreos, Manos Athanassoulis, Niv Dayan, Demi Guo,
Mike S. Kester, Lukas Maas, and Kostas Zoumpatianos

PolyRecs: Improving Page–View Rates Using Real-Time Data Analysis. . . 95


Mihalis Papakonstantinou and Alex Delis

Enabling Real Time Analytics over Raw XML Data . . . . . . . . . . . . . . . . . . 113


Manoj K. Agarwal, Krithi Ramamritham, and Prashant Agarwal

Multi-engine Analytics with IReS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133


Katerina Doka, Ioannis Mytilinis, Nikolaos Papailiou,
Victor Giannakouris, Dimitrios Tsoumakos, and Nectarios Koziris
xvi Contents

Ubiq: A Scalable and Fault-Tolerant Log Processing Infrastructure . . . . . . . . 155


Venkatesh Basker, Manish Bhatia, Vinny Ganeshan, Ashish Gupta,
Shan He, Scott Holzer, Haifeng Jiang, Monica Chawathe Lenart,
Navin Melville, Tianhao Qiu, Namit Sikka, Manpreet Singh,
Alexander Smolyanov, Yuri Vasilevski, Shivakumar Venkataraman,
and Divyakant Agrawal

BIRTE 2017

Towards Interactive Data Exploration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177


Carsten Binnig, Fuat Basık, Benedetto Buratti, Ugur Cetintemel,
Yeounoh Chung, Andrew Crotty, Cyrus Cousins, Dylan Ebert,
Philipp Eichmann, Alex Galakatos, Benjamin Hättasch, Amir Ilkhechi,
Tim Kraska, Zeyuan Shang, Isabella Tromba, Arif Usta,
Prasetya Utama, Eli Upfal, Linnan Wang, Nathaniel Weir,
Robert Zeleznik, and Emanuel Zgraggen

DCS: A Policy Framework for the Detection of Correlated Data Streams . . . . 191
Rakan Alseghayer, Daniel Petrov, Panos K. Chrysanthis,
Mohamed Sharaf, and Alexandros Labrinidis

Towards Dynamic Data Placement for Polystore Ingestion . . . . . . . . . . . . . . 211


Jiang Du, John Meehan, Nesime Tatbul, and Stan Zdonik

Author Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229


BIRTE 2015
RILCA: Collecting and Analyzing
User-Behavior Information in Instant
Search Using Relational DBMS

Taewoo Kim(B) and Chen Li

University of California, Irvine, CA 92697, USA


{taewookim,chenli}@ics.uci.edu

Abstract. An instant-search engine computes answers immediately as


a user types a query character by character. In this paper, we study
how to systematically collect information about user behaviors when
they interact with an instant search engine, especially in a real-time
environment. We present a solution, called RILCA, which uses front-end
techniques to keep track of rich information about user activities. This
information provides more insights than methods based on traditional
Web servers such as Apache. We store the log records in a relational
DBMS system, and leverage the existing powerful capabilities of the
DBMS system to analyze the log records efficiently. We study how to
use a dashboard to monitor and analyze log records in real time. We
conducted experiments on real data sets collected from two live systems
to show the benefits and efficiency of these techniques.

Keywords: Instant search · User-behavior collection · Log analysis

1 Introduction

Instant search is different from traditional search in that it immediately presents


results as a user types in a query. In contrast, traditional search systems show
results only when a user explicitly sends a complete query. For example, if a user
wants to find information about Michael Jackson in an instant-search engine, as
the user types in characters, say “michael”, results will be returned even if the
user does not finish typing the entire query. This search paradigm saves users
not only typing efforts but also time. Google claims that their instant search
saves users an average of two to five seconds per search [1].
It is well known that query log can be analyzed to not only monitor the query
workload on the server, but also obtain rich information about user behaviors
and intentions. In this paper we study how to collect information about user
queries in instant search, and analyze the information effectively and efficiently.
Compared to log records of traditional search engines, the records of instant
search have several unique characteristics. First, in traditional search, each query
received by the server has completed keywords. In instant search, every keystroke
c Springer Nature Switzerland AG 2019
M. Castellanos et al. (Eds.): BIRTE 2015/2016/2017, LNBIP 337, pp. 3–18, 2019.
https://doi.org/10.1007/978-3-030-24124-7_1
4 T. Kim and C. Li

can generate a query and a log record. When doing log analysis, we cannot treat
each log record as a complete query since it can have a query prefix. For example,
suppose a user types in the query “michael” character by character. The process
can generate multiple log records, namely “m”, “mi”, “mic”, “mich”, “micha”,
“michae”, and “michael”. As a consequence, log records of instant search have a
larger volume, with many records corresponding to keyword prefixes. Second, due
to unique characteristic above, it becomes necessary to detect the “boundaries”
between different information needs. In other words, we want to answer the
following question: which of these log records can be regarded as a complete
query that a user intended to type in? Along this line, we want to detect sessions
in the log records corresponding to different information needs of users.
In this paper we study how to tackle these problems with a solution called
“RILCA,” which stands for “Real-time Instant-search Log Collector and Ana-
lyzer.” Figure 1 shows the architecture of this approach. In RILCA, we have a
separate server next to the search engine, and the purpose of this server is to col-
lect rich information about user activities on the results from the search engine.
The server is also used to analyze and visualize the collected log data.

Search engine
Client
(with Javascript code) 1. Query

2. Result
Users

3. Store the log records

Dashboard Log & statistics server

Collector
Invoke
Analyzer
Admin Fetch
Results Statistics

Fig. 1. Architecture of RILCA

Specifically, RILCA uses client-side techniques to collect information about


user activities (Sect. 2), such as search results from the search engine, URLs
clicked by the user, etc. Instead of using an ad hoc solution for storing and ana-
lyzing the collected log data, RILCA uses a relational DBMS to do the storage
RILCA: Collecting and Analyzing User-Behavior Information 5

and analysis. Since many requests will be sent to RILCA server simultaneously,
it is important to process these requests without errors. Since a relational DBMS
provides concurrency control and transaction support, we can utilize these fea-
tures to store our log records in a relational DBMS and use the system for ana-
lytics. Also, we study how to use built-in capabilities of DBMS such as stored
procedures to process and analyze log. In particular, we show how to use SQL
to analyze log records to identify sessions, and the most important query in each
session. This method can not only fully utilize existing indexing and query pro-
cessing functionality of DBMS based on SQL, but also support real-time analysis
on log records. We develop various optimization techniques to improve the effi-
ciency. The analyzed results are displayed on a dashboard, which can be used
by the system administrator to do real-time monitoring and analysis.
We have deployed RILCA to analyze two instant-search engines we developed
in the past few years, namely PSearch1 and iPubmed2 . PSearch is a system that
supports instant search on the directory at UC Irvine, with about 70,000 records.
iPubmed is an instant-search system on more than 24 million medical publica-
tions licensed from MEDLINE. We report our experiences of using RILCA to
do log collection and analysis on these two systems, and conduct experiments to
evaluate the techniques.

1.1 Related Work

Collecting and Analyzing Log Records in Real Time: Log records can
be generated and collected through Web servers such as Apache [3]. These log
records contain access information for the resource on a Web server. They also
contain other information not relevant to the search, such as accessing Cascad-
ing Style Sheets (CSS), static HTML files, unrelated JavaScript files, or image
files. The RILCA approach can collect additional information about user behav-
iors using Javascript. A similar, proprietary approach is taken by a company
called Elicit Search [4], which collects user activities in real time by embedding
a Javascript program on the Web server. This Javascript code sends information
about user activities to a server that stores the data as log records, and analy-
sis is done on the server. Our approach to collecting and analyzing log records
in real time is similar. However, the internal structure and functionality of our
method is different from that of Elicit Search, in that we collect other relevant
event information, and we also use DBMS to do log analysis.
Instant Search Log Analysis: Log analysis of traditional search systems is
a well-studied area [5–8]. On the contrary, instant search log analysis is new.
In [9], the authors showed how to analyze instant search log records by iden-
tifying sessions and query patterns. We extend the session-identification algo-
rithm by collecting and using additional information that is relevant to user
queries. Specifically, our focus is to develop a RDBMS-based method to identify

1
psearch.ics.uci.edu.
2
ipubmed.ics.uci.edu.
6 T. Kim and C. Li

sessions, the most important query in each session, and unique statistics about
log records. We also focus on how to do optimization in this approach (Sect. 3).
Instant-Fuzzy Search: Instant-fuzzy search is studied in [10–12]. The authors
developed a solution by incorporating data structures, namely a trie, an inverted
index, and a forward index. Traversing a trie with a fuzzy method is also
described in [11,12]. This method provides the combined effect of fetching cer-
tain prefixes with a fuzzy search and finding entries that start with the fetched
prefixes.

2 Collecting User Search Activities


In this section we discuss how RILCA collects information about an instant-
search engine and its user behaviors using client-side techniques. We first explain
the limitation of log records in a traditional search server. When a client submits
a request to a search engine, the search server keeps track of information such
as the client’s IP address, date, time, return status, size of returned object, and
accessed URL. While this information is very valuable, it does not include the
“big picture” of the user behavior, when the front end is interacting with multiple
servers, including servers maintained by other organizations. For instance, in the
iPubmed system, after a user types in a few characters, the server returns a list
of publication results. After clicking a result, the user is directed to a page
with detailed information about the publication. This page is generated by an
external server maintained by NIH, which is beyond the control of our team. In
other words, the user behaviors generate log records at multiple servers managed
by different organizations, making it hard to do global information collection and
analysis.
To overcome this limitation, RILCA uses client-side Javascript code to
gather more information about user behaviors. As shown in Fig. 1, we embed
a Javascript program in each Web page returned by the search engine. This step
can be done by adding an HTML “<javascript>” tag in the page that indicates
the path to the Javascript program residing on the RILCA server, so the change
made on the search engine server is minimal. When the initial result page from
the search engine is returned, the embedded program sends to the RILCA server
a log record with relevant information, such as the search query and number
of results. After that, this program monitors interesting user activities in the
browser, such as copying a text string on the page and clicking a URL. For each
event, the program sends a log record to the RILCA server. All these interactions
with the server are happening “behind the scene,” since they can be implemented
using AJAX to minimize the impact on the user search experience. Specifically,
since we send the log data to the RILCA server after the user receives the ini-
tial query results from the search engine, search queries are not blocked by the
logging activities.
Table 1 shows sample log records of Apache and RILCA in the iPubMed
search engine [2]. The Apache log records do not indicate the user actions after
receiving the queries. In the RILCA log records, we can know that the user
RILCA: Collecting and Analyzing User-Behavior Information 7

Table 1. Comparison of search log records produced by Apache and RILCA

Apache (time, query) RILCA (time, query)


20:19:32 imp 20:19:32.324 imp
20:19:32 impro 20:19:32.569 impro
20:19:32 improv 20:19:32.802 improv
20:19:32 improve 20:19:33.034 improve
20:19:33 improve pa 20:19:33.231 improve pa
20:19:33 improve pat 20:19:33.426 improve pat
... ... ... ...
20:19:34 improve patient co 20:19:34.404 improve patient co
20:19:34 improve patient comp 20:19:34.657 improve patient comp
20:19:34 improve patient compli 20:19:34.912 improve patient compli
20:19:34 improve patient complian 20:19:35.157 improve patient complian
20:19:35 improve patient compliance 20:19:35.395 improve patient compliance
20:19:39 improve mepatient compliance 20:19:40.263 improve mepatient compliance
20:19:40 improve medicapatient compliance 20:19:40.705 improve medicapatient
compliance
20:19:40 improve medication patient 20:19:40.970 improve medication patient
compliance compliance
(no more log records) 20:20:34.282 (clicked an outbound link:
http://www.ncbi.nlm.nih.gov/pubmed/
19182563)

clicked an outbound link that guided them to another Web site. This log record
provides more insights about whether the query results included what the user
was looking for. The log records also include the number of results for each query
(not shown in the table).

3 Analyzing Log Records


In this section, we study how to utilize the collected query log data in RILCA.
We first present a dashboard that shows the statistics of user queries, which
can help the system administrator monitor and understand the workload on the
search engine server, as well as gain insights of the performance of the engine.
The next question is how to generate the data for the dashboard efficiently. We
study how to achieve the goal by leveraging the existing query capabilities of
relational DBMS systems.

3.1 Dashboard for Monitoring and Analyzing Search Queries


It is important for the system administrator of the search engine to monitor
the status of the engine and understand the search behaviors of users. Figure 2
shows a dashboard interface that can achieve the goal. It allows the adminis-
trator to specify a time range, then analyze the query records collected during
8 T. Kim and C. Li

Fig. 2. Monitoring user queries using a dashboard

this period and visualize the statistical results. If the administrator clicks the
“Real-time statistics” button, the system will run the computation tasks on the
latest query records, such as the last one hour, 12 h, or one day, and the time
duration is configurable. Compared to dashboards of traditional search engines,
this dashboard is unique in two aspects due to the instant queries from users:
(1) it needs new solutions to identify a session in a search, and (2) it also shows
statistics related to query prefixes.
The dashboard shows the statistics about sessions, time and typing effort
spent per session, and query prefixes. Formally, a session is a sequence of
keystroke queries by a user issued without a major interruption to fulfill a single
information need. For example, suppose a user is looking for a person named
John Doe by typing in the name character by character. After receiving the first
seven letters, the system can find the related record, and the user clicks the cor-
responding link for this person. In this case, the log records of these keystrokes
form a session, indicating the process of finding this relevant answer. A session
is called “successful” if the system can find the answer the user was looking for.
The dashboard shows the number of sessions, number of successful sessions,
and the number of unsuccessful sessions. These numbers tell the administra-
tor how successful the engine is to find right answers expected by the users.
The dashboard includes the average number of keystrokes, the average length of
query strings, and the average duration per session. These numbers indicate how
much time and effort a user spent to find answers. The dashboard also shows the
RILCA: Collecting and Analyzing User-Behavior Information 9

RDBMS

Client Collector Log records


Client
Client

Invoke
Dashboard Session Detector (Stored procedure)

Sessions

Stats Generator (Stored procedures)


Fetch
results
Statistics

Fig. 3. Log analysis flow using a RDBMS

number of unique prefixes and empty-result prefixes. The prefixes with empty
results are very useful to reveal abnormal search behaviors of the engine. As an
example, by using this feature for the PSearch system, we were able to easily
detect a bug in the engine. In particular, we noticed that many empty-result
queries had two spaces in their keywords. By doing an investigation, we found
that the client-side Javascript program had a bug related to how space was han-
dled in keywords. This bug was fixed, and user search experience was improved.
This example shows the value of this feature on the dashboard.

3.2 Generating Dashboard Statistics Using RDBMS

The next question is how to use the collected query log data to generate the
statistics used in the dashboard. Instead of using ad-hoc solutions, RILCA uses
relational database systems (RDBMS) to store and analyze the log data to
achieve the goal. This approach can not only avoid the cost of duplicating the
data at different places (e.g., the storage place and the analyzer module), but
also leverage the powerful capabilities of RDBMS, including the SQL language,
indexing, query processing and optimization.
Figure 3 shows how we use an RDBMS to analyze query log records to gen-
erate tables with statistical information. A module called “Collector” receives
log records from clients, and stores the data into a table called “Log records.”
The following shows the schema of this table. It has a primary key (“logno”),
IP address, agent (browser), and cookie id of the client. It also stores the access
10 T. Kim and C. Li

time that includes the date time and millisecond time. The “operation type”
shows the type of user activity, such as search request, click on a URL, or copy
on the result page. More details of the operation are stored in other attributes
in the table.

CREATE TABLE LogRecord (


logno int unsigned NOT NULL AUTO_INCREMENT,
client_ip varchar(15) NOT NULL,
client_agent varchar(200) DEFAULT NULL,
client_cookieid varchar(50) DEFAULT NULL,
access_datetime datetime NOT NULL,
access_mstime smallint unsigned NOT NULL DEFAULT ’0’,
operation_type tinyint unsigned NOT NULL DEFAULT ’0’,
operation_detail varchar(200) DEFAULT NULL,
query_string varchar(200) NOT NULL,
PRIMARY KEY (logno) );

These records are processed by the “Session Detector” module to find ses-
sions from the log records, and store the results in the “Sessions” table. These
session records are further processed by the “Stats Generator” module to obtain
statistical information to be used by the dashboard. In our implementation of
RILCA on the two live systems, we used 10 stored procedures and 6 functions
for the analysis process.

3.3 Identifying Sessions Using SQL

We will focus on how to use SQL stored procedures to identify sessions from the
raw query log records. We also need to detect whether a session was successful.
There have been many studies on this topic (e.g., [9,13]). The main difference
in this work is how to use SQL to analyze records with query prefixes, and
understand whether those queries were successful or not. Specifically, we mainly
consider newly available, rich information in the log records about user activities,
such a click on a URL, copying a text from the result page, or closing/opening
a new tab of a browser. In our analysis, we view a session as successful when
the user clicked a link in the results, copied a text in the current search results,
or closed the tab within a certain amount of time after the user entered the last
query in the session.
Figure 4 shows the sketch of this process as a SQL stored procedure. It first
declares a cursor on a query that sorts the log records in an ascending order
based on the client IP and access time, so that we can process the records in
the order they were received per IP. For each log record, we compare it with the
previous one. A new session is started when the current IP address is different
from the previous IP address, the time difference between the current record and
the previous one is more than five minutes, or the current record is opening a
new tab in the browser (boxes 1 to 3). Otherwise, a new session is still considered
to be started if the current record is a search request and the previous record
RILCA: Collecting and Analyzing User-Behavior Information 11

was not (box 4), or the current and previous records are both search requests
with dissimilar query strings based on edit distance (box 5). After detecting a
new session has started, we assign a new session ID and insert a new session
record into the “Sessions” table.
The following is part of the stored procedure that includes the cursor decla-
ration and IF statements that are used to identify new sessions.

DECLARE cursor1 CURSOR FOR


SELECT logno, ... FROM LogRecord WHERE
TIMESTAMPDIFF(SECOND, clientaccesstime, currenttime)
<= 500 ... ORDER BY client_ip, clientaccesstime logno;

FETCH cursor1 into c_logno, c_accesstime, ...

// #1. If the IP address of the current log record and


// the previous log record do not match: a new
// session has started
IF (c_client_ip != pre_client_ip) THEN
SET startnewsession = 1; ...

// #2. If the time difference between the current log


// record and the previous log record is greater than
// 5 minutes: a new session has started
ELSEIF ( timestampdiff(SECOND, pre_accesstime,
c_accesstime) > 300 ) THEN
SET startnewsession = 1; ...

// #3. If the current operation is opening a new tab:


// a new session has started
ELSEIF ( c_operationtype = 5 ) THEN
SET startnewsession = 1; ...

// #4. If the previous operation is in (clicking a


// link, copying a text, closing the tab) and the
// current operation is querying: a new session has
// started
ELSEIF ( (pre_operationtype = 2 OR pre_operationtype = 3
OR pre_operationtype=4) AND c_operationtype=1 ) THEN
SET startnewsession = 1; ...

% // #5. If both of the previous and current operation is


% // querying and the two queries are not similar: a new
% // session has been started
% ELSEIF ( pre_operationtype = 1 AND c_operationtype = 1
% AND rawlog_issimilar(pre_operation, c_operation) = 0 )
% THEN
12 T. Kim and C. Li

1
Y
currentRecord.IP != prevRecord.IP
Sort the log records N
2
timediff(currentRecord, Y
Declare a cursor on prevRecord) > 5 min
the log records 3
N
Y
currentRecord.event = opening a tab

Fetch next record as N


currentRecord
4
currentRecord.event = query && Y
prevRecord.event in (clicking a link,
copying a text, closing the tab)

N
currentSessionID += 1
5
currentRecord.event = query && Y currentRecord.sessioniD =
prevRecord.event = query &&
currentSessionID
isSimilar(curR, prevR) = False
Update session table
N
currentRecord.sessionID =
currentSessionID

previousRecord =
currentRecord

Fig. 4. Detecting sessions from log records using a stored procedure

% SET startnewsession = 1; ...

% // #6. Otherwise, keep the current session.


% ELSE
% SET startnewsession = 0; ...

% // #7. If a new session has been started, process


% // the necessary information
% IF (startnewsession = 1) THEN
% SET new_sessionno = current_sessionno + 1; ...

3.4 Optimizing SQL Queries

Our experiences on the two real systems suggested that a simple implementation
of the stored procedures can be slow, especially for large amounts of log records.
To solve the problem, we develop several optimization techniques to improve the
performance.
RILCA: Collecting and Analyzing User-Behavior Information 13

– Splitting tables: For those log records that are already processed by the session
detector, we move them into a separate table. In this way, we can reduce
the size of the table that is used to store newly arrived records and detect
sessions. Similarly, the sessions of those processed log records are also moved
to a separate table. This approach is similar to the idea used in Apache that
stores query log records into different files.
– Using the MEMORY storage for the “Sessions” table: In this way, this table can
be stored in memory for fast access and low latency.
– Database tuning: When detecting sessions, initially we need to declare a cursor
by sorting a large number of log records based on their IP address and access
time. The default DBMS setting may not be efficient for such queries. We can
solve the problem by tuning system parameters such as cache size, buffer-pool
size, log file size, and sort-buffer size, which can greatly affect the performance
of the sorting process.
After identifying each session, we extract the final query as the most impor-
tant query in the session, since a user stopped typing in more keywords after
that. We also add this information to the session-related statistics. According
to [9], 61% of PSearch [14] log records show a so called “L-shaped pattern” such
as “c”, “ca”, “can”, “canc”, “cance”, and “cancer”. In this L-shaped pattern,
a user gradually creates a new query by adding one more character to the pre-
vious query. Therefore, we can choose the most important query in the session
by selecting the final query. There can be some sessions where the length of
the intermediate query is greater than that of the final query. We choose the
final query as the most important query in the session, since the user did not
stop querying after checking the results of the intermediate query. For instance,
the most important query for the session in Table 1 is “improve medication
patient compliance”.

4 Experiments
In this section, we present experimental results of RILCA on the two live instant
search systems. Table 2 shows the data sets. The MEDLINE data set had infor-
mation about 24 million medical publications. We extracted about 1.9 million
records and used them for the experiments. We also collected log records from
the live iPubMed [2] Web server. We first deployed the Javascript code on
iPubMed in September 2013, and since then we collected additional log data
from the RILCA server as well as Apache log records. The PSearch data set
contained information about the UCI directory including their name, e-mail
address, department, and office phone number, all of which were open to the
public. The backend search engine supports instant, error-tolerant search. We
collected log records by embedding a Javascript program on its returned pages.
In addition, we also had log records from its Apache server.
For both systems, we installed a MySQL database on the server to store
and analyze log records. All experiments were done on a server with 94 GB of
RAM and four Intel Xeon CPUs. Each CPU had six cores with a clock speed of
2.93 GHz.
14 T. Kim and C. Li

Table 2. Two data sets

Data set MEDLINE PSearch


Number of query log records 1,004,886 1,026,435
Number of sessions 65,260 102,743
Average character number per query 19.9 9.6
Average word number per query 2.8 1.7

4.1 Generating Query Workloads

To measure the performance of the log collector and session detector, we simu-
lated an environment with multiple concurrent users. We set the number of con-
current users to be 5, 10, 15, and 20, respectively. We used Jmeter to simulate
a user who sent about 14,000 queries sequentially. We used the real PSearch log
records collected by RILCA. Table 3 shows the setting. Note that even though the
number of concurrent users was between 5 and 20, the environment inserted 200
to 500 queries per second with a high insertion rate. For the live PSearch query
session, on average each session had 11.64 keystroke queries with a duration of
20.56 s. Each user on average sent 0.6 queries per second, which corresponds to
the case where 20 users inserted 12 queries per second, not 496 queries per sec-
ond in the simulation setting. Thus, we can say that the simulation environment
was approximately equivalent to a situation where there were 800 concurrent
users in the live system.

Table 3. Query workload for PSearch

User number Query number Duration Inserted record number


per second
5 70,556 352 sec 200
10 141,893 400 sec 354
15 213,598 535 sec 399
20 283,941 572 sec 496

4.2 Log-Collection Overhead on Search Time

We evaluated the overhead of RILCA by measuring the execution time of a query


when the number of concurrent users increased from 15 to 20. The purpose of
this experiment was to check if RILCA can introduce a significant amount of
overhead to a search process. As we can see in Fig. 5, the performance degra-
dation of the search process was small. For instance, when there were 15 con-
current users, RILCA increased the average search time from 215 ms to 225 ms.
RILCA: Collecting and Analyzing User-Behavior Information 15

This low additional overhead is due to the fact that RILCA uses AJAX to do
asynchronous communication with its server. The search time was a bit high
because of the simulated environment with many concurrent users. We observed
a similar minor time increase in the setting where the number of users is smaller
and the search time was lower.

RILCA Disabled RILCA Enabled

300
295
285

225
Execution Time (msec)

225 215

150

75

0
15 20
Number of concurrent users

Fig. 5. RILCA overhead on search performance

4.3 Scalability of Log Analyzer

Figure 6 shows the time of the query analyzer (including the session detector and
statistics generator) on different numbers of log records. (Note that we applied
the optimizations in the experiments, and the effect of each optimization will be
covered in the following subsection.) As the figure shows, when the number of
query records increased, the total analyzer time also increased linearly, with a
constant initial cost. For instance, when there were 82,500 log records with 10
concurrent users, it took about 6.7 s to analyze these records.

4.4 Effect of Optimization Techniques

Performance Improvement with RDBMS Tuning: We did an experiment to show


the effect of DBMS tuning. We first used the default MySQL setting. In this case,
when the number of concurrent users was 5, it took 376 s to analyze 17,000 log
records. After adjusting a few database parameters (cache size, buffer-pool size,
log-file size, and sort-buffer size), the analysis time decreased to 27.8 s to analyze
20,000 log records. Table 4 shows the results of this optimization.
Other documents randomly have
different content
preferable, or half milk and half water. If you want a sour sauce, add
a teaspoonful of vinegar, but do not use milk, it will curdle. A glass
of wine in place of the vinegar is an improvement, especially when
served with boiled trout.

Baked Fish:—Take a fish of not less than three pounds; scrape and
wash it well; prepare stuffing composed of cracker or bread crumbs,
a little salt and pepper, a small lump of butter, seasoned with sage or
poultry dressing, mixed with a very little boiling water; if you have
eggs drop one in and mix thoroughly. Put the stuffing in the cavity
whence the entrails were removed, not too tightly, and sew up the
opening. Rake the hot coals out of the bake-hole, put a thick layer of
green grass (if there should happen to be some mint in it all the
better), over the hot ashes, lay the fish on this, put on another layer
of grass, rake the hot coals over all, and build a fire on top. Bake for
an hour. If you like the flavor put a small onion in the dressing. A
few slices of bacon, laid over the fish before covering, will improve
the flavor.
Small fish may be prepared for the table by baking between the
layers of grass, but it will not take so long to cook them. In fact,
when on a long tramp, in light marching order, I prefer to cook them
this way, rather than to lug a fry pan.

Skewered Fish:—Sharpen a small straight stick and take off the


bark. Thrust this through small fish and slices of bacon alternately,
and hold over the hot coals. They will cook in a few minutes. Look
out that they do not drop off the stick at the last stage of the game.

Broiled Fish:—Take off the heads and split down the back, leaving
the skin over the stomach intact. Lay on the broiler with strips of fat
pork or bacon laid across, and cook over hot coals. Mackerel and
bluefish do not need the fat meat, but they are by no means injured
thereby.

Planked Fish:—This is the quintessence of camp cookery, and is so


easy that it is a wonder that more people do not use the method.
Have a hard wood plank, large enough to hold the fish, laid out flat.
And do not throw away the plank after using; it improves with use.
Split the fish down the back, as for broiling. Tack it to the plank, skin
side down. Skewer on strips of bacon, and stand up before a hot
fire. Be sure to have a good sized piece of bacon on the head end,
so the dripping fat will baste the fish. Cook until you can easily
thrust a sliver into the thickest part of the meat. Take off the plank,
and dress with salt, pepper and butter, and do not be afraid to put
on enough butter. Lay on all you think the state of the supply will
allow, and then shut your eyes and put on another piece. Serve hot.

Baked Fish, Lumberman Style:—Take a fresh caught fish and rub it


in soft clay from the river bank, against the scales and gills. When
the clay is set a little, roll the whole fish in a blanket of clay, till the
body is completely covered. Dry in the heat of the fire for fifteen
minutes; bury in the hot coals and ashes till the clay is hard. Rake
the brick out of the fire and crack it open with the hatchet. The fish
will split in two pieces; the spine can be easily taken out; the
“innards” are shrunk to a little ball, which can be flipped off, and the
scales are stuck on the clay. Dust on a little salt, and you have a
meal fit for—a hungry hunter.

Fried Oysters and Bacon:—(Little Pigs in Blankets):—Cut fat bacon


in very thin slices. Lay on each piece a large oyster, dust on a little
salt and pepper, and fold the oyster inside the bacon, securing it
with a sliver or a wooden toothpick. Heat the fry pan very hot and
drop in the “pigs” and cook about four minutes. The bacon must be
cut as thin as possible and the “pigs” cooked only enough to make
the bacon palatable. Some never eat the bacon at all, but are
contented with the flavor it gives the oysters.

Fried Clams:—Shuck out the clams, selecting the large ones. Roll
them in cracker crumbs or in corn meal, and fry them in deep fat.

Fish Balls:—Take the fish left over from the fry at dinner and pick
out all the bones. Chop up the cold boiled potatoes, in the
proportion of one of fish to two of potato, season with salt to taste;
break in an egg and mix thoroughly. Form into balls or flat
croquettes, and fry in deep fat.

Baked Clams:—Build an oven of rocks, on bottom and sides, top


left open. Build a hot fire and keep it burning till there is a heap of
hot coals and ashes, and the rocks are heated through. Rake out all
the bits of unburned wood which would burn and smoke the bake.
Throw on a layer of rock-weed to cover the ashes; lay the clams on
this, with a few ears of corn for a relish, cover with more weed and
throw an old piece of sail over the heap. Bake till the clams will slip
in the shell. Uncover, and serve with melted butter and vinegar.

EGGS.

When they can be procured, eggs are the refuge for the hurried
meal, or for lunch; but do not run away with the idea that any old
way is right to cook them. A plain boiled egg may be delicious or it
may be a clammy mass. Of course individual taste will govern the
length of time they are cooked. A soft-boiled egg should be cooked 3
minutes, if dropped in boiling water. If wanted for a cold lunch, put
them on in cold water and let them come to a boil, then cook 20
minutes. You will be surprised how mealy and palatable the yolk will
be. Some people have the water boiling furiously, then set off the
fire, drop in the eggs, cover and let them set 6 minutes.

Fried Eggs:—Grease the fry pan, as if for cooking flapjacks. Have


it hissing hot; break the eggs into a cup, one by one, so as to be
sure that they are fresh; turn into the fry pan, and when the white,
which has run out, is congealed, turn it in toward the center. Cook
till it is of the desired consistency. The egg may be turned over, if it
is desired that the yolk be hard. Eggs fried in too much fat will be
leathery and indigestible, but if a little care be used, and the above
directions followed, they may be as easily digested as if soft-boiled.
If egg sandwiches are desired for lunch, put one of the fried eggs
between two slices of bread, flavor with salt and pepper. Have the
size of the sandwich to fit the single egg. This is better than to make
the double egg filling for the whole slice of bread.

Scrambled Eggs:—Break the eggs in a dish, and beat the yolks


and whites well together. Grease the bottom of the fry pan with
butter, drop in the eggs and stir till done. Look out that it does not
stick on at the bottom. Season with salt and pepper, after serving.

Omelette:—Break four eggs into the mixing dish: beat them well,
and season with salt and pepper; rub a tablespoonful of flour in four
times that quantity of milk, till it is smooth; pour into the eggs and
beat all together. Have the fry pan well greased with butter, pour in
the mixture and let it cook till the bottom is well set, and the top will
not run; slip a thin knife under one side and turn one-half over onto
the other. Cook as much as desired, turning occasionally, so that it
will be evenly cooked. Don’t let it burn onto the pan; if it shows
signs of burning before it is sufficiently cooked, drop a little piece of
butter in the spot where the danger lies, and hold off the fire for a
moment.

Ham Omelette:—Mince some boiled ham, season to taste with a


little curry, or other condiments, and lay a large spoonful on the
omelette before you turn the two halves together.
This fancy omelette may be varied in many ways. Minced beef,
lamb, cheese, or even fish like salt cod and smoked halibut, gives
the omelette a distinctive flavor.

Omelette aux Fine Herbes:—Break eight eggs in the stew pan, to


which add a teaspoonful of chopped shallot or mild onion, one of
chopped parsley, half a teaspoonful of salt, a little pepper, and two
large tablespoonfuls of cream; beat them well together. Put two
ounces of butter in the fry pan, set over the fire, and as soon as the
butter has melted, so the egg will not stick, pour in the mixture, and
stir quickly until it begins to set; hold it a moment till a crust forms
on the bottom; turn one-half over the other, and serve. It must not
be done too much.
Fricasseed Eggs:—Boil a half dozen eggs hard and slice them.
Chop very fine a small onion, a little parsley or celery-leaves, and
two or three mushrooms; put a generous lump of butter in the fry
pan, season with salt and pepper; when the butter is melted, lay in
the vegetables and heat thoroughly, but do not brown; add a gill of
milk with a tablespoonful of flour rubbed in for thickening; lay in the
eggs, let it come to a boil, and serve.

VEGETABLES.

All vegetables should be carefully looked over and washed in cold


water. If to be boiled, drop them in boiling water, and if the water in
the kettle gets low during the process, fill up with boiling water,
never with cold. Keep the kettle covered, if possible, and drain off
the water as soon as cooked. Some very strong flavored vegetables
are improved by boiling in two waters. That is, when they are partly
cooked, drain off the water, and fill up with fresh hot water. The
question is often asked, how long shall we boil them? I never found
any hard and fast rule. Perhaps the following table will be of
assistance, but the time is variable. Small potatoes will cook five
minutes quicker than large ones. It is a safe rule to cook until you
can easily stick a splinter in the fleshy parts.

20 to 30
Potatoes, boiled
minutes
Sweet potatoes, boiled 45 minutes
60 to 90
Shell beans, boiled
minutes
String beans, boiled 60 minutes
20 to 40
Green peas, boiled
minutes
10 to 15
Green corn, boiled
minutes
15 to 30
Asparagus, boiled
minutes
Cabbage, dandelions, spinach and other 60 to 90
“greens” minutes
60 to 90
Turnips, parsnips and carrots
minutes
45 to 60
Onions
minutes

Pay the farmer for what you take, or you may find yourself, as well
as the vegetables, in hot water.

Boiled Potatoes:—Wash thoroughly in cold water; cut out all the


decayed parts. Drop them in hot water and boil till you can easily
stick a sliver into the largest. Drain off the water and set one side to
steam. Select all potatoes for a boiling of about the same size, so
one will not be cooked before another, as they are liable to burst
their jackets and become water-soaked or lost. If the potatoes are
very old, peel off the skins, put a handful of salt in the water in
which they are to be boiled; have the water very hot and cook as
quickly as possible.

Mashed Potatoes:—After boiling, peel and mash thoroughly with a


stick or the bottom of a clean bottle. Stir in salt, pepper, butter and
enough milk to make the consistency that of dough.

Baked Potatoes:—Cut off the ends, bury in the hot ashes and
leave there for an hour, or until you can pinch them with the fingers.

Boiled-fried Potatoes:—Peel the skins from cold boiled potatoes


and slice. Have the bottom of the fry pan covered with “screeching
hot” fat. Drop in the slices and stir frequently to prevent burning.
When they are slightly brown they are ready to serve.

Stewed Potatoes:—Cut cold boiled potatoes into small pieces. Put


in the stew pan with enough milk to cover them. Season with salt,
pepper and butter, and stew gently, stirring occasionally, until the
milk is nearly boiled away.
Lyonnaise Potatoes:—One quart cold boiled potatoes cut small,
three tablespoons butter, one of chopped onions and one of chopped
parsley, salt and pepper to taste. Season the potatoes with the salt
and pepper, fry the onions in the butter, and when they are yellow,
add the potatoes; stir with a fork, being careful not to break them;
when hot add the parsley and cook two minutes longer. Serve at
once.

Potato Salad:—Ten medium-sized cold boiled potatoes, cut into


small pieces; one small onion, chopped fine; half a dozen hard
boiled eggs; chop the whites fine, mash the yolks and add to them
one teaspoon each of ground mustard and sugar, one tablespoon of
melted butter, some salt and pepper. Rub all together well and put in
the potatoes, with about four tablespoonfuls of salad dressing. (This
can be purchased in bottles, and will save much trouble in making.)
Add about half a cup of vinegar. If you can get some celery, chop up
about as much as there is of the potato, and mix all together.
Lettuce, kale, parsley or any green salad plant will do instead of the
celery, or the salad plant may be omitted altogether, in which case,
be more sparing of the vinegar in the dressing.

Boiled Green Corn:—The flavor of the corn is better preserved if it


is cooked in the husk. Pull off the outer husk, turn down the inner
leaves, pull off the silk and turn back the inner husk and tie the
ends. Put some salt in the water as soon as it comes to a boil and
drop in the corn. Do not let it stay in longer than is necessary to
make it soft. If one does not wish to cook it this way, follow the
same plan after taking off the husk.

Succotash—(so called): Cut the corn from the cob and shell the
beans. The proportion should be two-thirds corn and one-third
beans. Put into the kettle with a generous piece of pork, and boil till
tender. Take out the pork, drain off the water, add a cup of milk and
a piece of butter the size of an egg, and stir over the fire till it boils
up. Take off the fire and season to taste with salt and pepper.
This is not the real succotash of the south-eastern section of
Massachusetts, where it was first transmitted from the Indian to the
first settlers. Nearly every one of the old colonial families has its
receipt for this dish, and few of them are alike in their detail. They
are all good enough. Suffice it to say that the body is composed of
salt beef, pork, chicken, veal, and in many cases the remnants of the
dinner, whatever it may have been, in the line of meat, saved by the
frugal housewife. Here is one method as given me by one of the old-
time mothers of the Cape.

Cape Cod Succotash:—Boil a piece of salt beef for an hour till the
salt has got soaked out of it. Drain off the water and fill up with
fresh, cold water. Put in some chicken, a piece of pork about a
quarter as big as the beef, and boil till it all comes to pieces. Scrape
off the corn from the cobs and put in with about half as many beans,
and cook till the beans are tender. Season to taste. Of course green
shell beans are what is intended in the above.

Boiled Beets:—Wash the beets, but do not break the skin, for that
will make them bleed, and thus lose some of the sweetness. Put
them in boiling water, enough to cover them, and leave till they are
tender. Drain off the water and drop them in cold water, when the
skin may be easily rubbed off. If there are any left from the meal,
slice them into a shallow dish and cover them with vinegar. This is a
splendid relish.

Pork and Greens:—I am requested to mention the variety of plants


which may be used for this homely dish. No one needs to go hungry
in the country, for the fields are filled with edible plants. Their list
would be legion, but I will mention a few: Dandelion, nettles,
milkweed, spinach, beet-tops, turnip-tops, mustard, narrow dock,
cowslip (marsh marigold), kale, poke, brussels sprouts, cabbage,
purslane, shepherd’s purse, and a myriad others. Any of the above,
cleaned and boiled till tender with a generous piece of pork, and
served with boiled potatoes, is not only satisfying, but is an excellent
corrective for the system. Of course, it is understood that the young
plants or shoots are the portions to be used. You might as well try to
get nourishment from a piece of wood, if you try to use them after
the hard fiber has formed in these plants.

Stewed Tomatoes:—Peel by pouring boiling water over them,


when the skin will easily come off. Cut up in the stew pan, throwing
out the hard and unripe parts. Stew gently until they come to
pieces; season with butter, salt, pepper and a little sugar if desired.

Baked Beans:—This New England dish is almost a sine qua non in


the Eastern woods camp, and is seen nowhere else in its perfection.
Pick over a quart of beans, discarding all poor ones. Parboil until the
skin starts. Drain off the water and throw it far away from the camp,
for it does not smell particularly sweet. Put half the beans in the
bean pot, then a generous junk of fat salt pork, then the rest of the
beans, so that the pork shall be bedded. A little salt and some
molasses, the quantity depending on the taste, will complete the list.
Pour in enough hot water to cover the beans. Put on the cover of
the pot, and set in the hot ashes of the bean hole, just before you
go to bed. Rake the coals over it, put a few sticks on top, so the
ashes will keep hot, and go to bed. In the morning rake out the
bean pot, and you will find them nicely baked, and redolent of that
aroma so dear to every Yankee. If you do not relish it, so much the
worse for you, and so much the better for the rest of the party, for
there will be more for them.

Macaroni:—Break the sticks of macaroni into convenient lengths;


put in the stew pan with hot salted water and cook till tender. Stew
half a can of tomatoes till you can mash them up with the spoon and
pick out the skin and the hard lumps; put in a lump of butter, a little
salt and pepper, and thicken with flour and water, rubbed smooth.
Pour this over the macaroni and serve.

MUSHROOMS.
At the earnest request of a friend, but with fear and trembling at
the possible results, do I include this chapter in these notes. There is
no shadow of doubt that men have gone hungry in the midst of
plenty, from the lack of knowledge of the food that was all around
them. But the average camper, with his meager knowledge of
mycology, generally feels that eating wild mushrooms is much like
living over a powder magazine. If a person of average intelligence
will take the pains so to educate himself that he can surely identify
the edible varieties, and it needs no more than that, there is no
more danger than is present in eating the fish you catch from the
lakes. But if you are not positive that you can identify each specimen
as you gather it, let it go, and confine yourself to those that you do
know are harmless. My experience in this direction has been so
limited, that I am obliged to copy, in most cases, from the
experience of others. There is no space here to go into descriptions
of species, but the literature on the subject is so easily obtainable,
that there seems no need to do so.

Broiled Russula:—Thoroughly clean the top or peel off the skin;


place the cap on a gridiron over a hot fire, gills downward, and heat
through, but do not scorch. Turn over and repeat the process; lay on
a hot plate, gills upward and drop on a piece of butter with a little
salt and pepper.

Vegetable Oyster—A. ostreatus:—This species grows out of the


sides of trees and stumps. Broil the young and tender specimens the
same as in the last instance; or they may be fried in butter, or in
batter, or in fact any way that the real oyster is cooked. As a stew it
is delicious.
The Elm Mushroom, a species of the last named family, is cooked
in the same manner, but the flavor is decidedly that of fish.

Shaggy-mane Coprinus:—Put in a stew pan with a little milk, add a


piece of butter, a little pepper and salt.
Or, put about two ounces of butter in the stew pan with a
teaspoonful of salt and a little pepper, with a slight pinch of
powdered mace or nutmeg. Put in a pint of mushrooms and stew for
a few minutes; then add a little milk and stew for about twenty
minutes, or till they are tender. Thicken the gravy with a little flour
rubbed up in milk.

Stewed Chanterelle:—Soak the mushrooms in milk over night;


chop up some boiled meat, chicken, veal or lamb preferred; mix and
stew till tender; flavor with salt and pepper.

Vegetable Beefsteak:—Slice young specimens and broil over the


coals, the same as you would a nice cut off the rump. Do not spoil it
with too much condiment.

Fried Clavaria:—This delicious fungus is very common and so free


from insect enemies, that pounds of it may be gathered in almost
any woods. Simply fried in the pan with butter or oil, and properly
seasoned, it has furnished an addition to many a meager meal of the
ones who understood its value.

Puff Balls:—Pick out the specimens with white meat (they turn
black as they grow older), fry in butter and serve on toast. They are
as good as eggs.
After you have tried these and have become a confirmed
mycophagist, you will have obtained literature on the subject and
know how to adapt the cooking to the characteristics of the species.

Warning:—Be sure that you have young specimens, clean and free
from the ravages of insects.

DESSERTS.

Rice Pudding:—Boiled rice, about a quart; one can of condensed


milk; one-half cup of sugar or molasses; ground nutmeg or mace to
taste; sufficient water to keep it from burning; one or two eggs, if
you have them: stir together and cook over a slow fire for fifteen
minutes, stirring occasionally to keep from burning. Good, hot or
cold.

Corn-starch Pudding:—Heat three pints of milk to boiling, and


watch it that it does not boil over; have three tablespoonfuls of corn
starch rubbed up in a little cold milk; add two eggs and a little salt,
beat it together, and when the milk is boiling stir the mixture into it.
It will immediately thicken up, when it must be taken from the fire,
turned out into a dish, and set one side to cool. Serve with sugar
and milk.

Tapioca Pudding:—Buy the “minute tapioca”; it saves time. If you


have only the other kind, soak it in milk till it swells up soft. Stir into
a quart of the jelly, or the advertised allowance of the “minute”
brand with enough milk to make the quantity, two eggs, a little salt,
spice to taste, and set over the fire till it comes to a boil. Set off the
fire, and just before serving, put in a dash of lemon juice or ½
teaspoonful of essence of lemon.

Apple Slump:—Fill the kettle half full of sliced and cored apples;
sprinkle on a little spice, one cup of sugar or molasses; cover over
and cook for a few minutes. Prepare a crust the same as for bread
or biscuits, stirring ½ teaspoonful of salt and two of baking powder
into a pint of flour, and wetting with milk or water till it makes a stiff
dough. Lay this dough over the top of the apples, cover and steam
till the crust rises and you can thrust a sliver into the crust without
the dough sticking to it. Set off the fire and keep covered till needed.
Serve with pudding sauce, or with milk and sugar.

Pudding Sauce:—One pint of water in the stew pan; mix three


tablespoonfuls of flour in a little cold water and rub it to a smooth
paste: when the water boils, put in a small lump of butter, a cup of
sugar, a little spice, and when the sugar is dissolved stir in the flour
paste. If the water is boiling when the flour is put in, it will thicken
up into a jelly. Just before serving stir in a little lemon juice or
extract. If this flavor is put in too soon, the savor will evaporate. This
sauce may be made of milk if you have it. If condensed milk is used,
dilute it with water, and do not use so much sugar.

Plain Flour Pudding:—Mix a quart of flour, and a tablespoonful of


baking powder, and a teaspoonful of salt in water enough to make a
thick dough. Dip a cloth bag in hot water, dust the inside with dry
flour, put in the dough, and tie up, leaving room for the pudding to
swell. Place in boiling water enough to cover the bag, and boil for
two hours. Serve with syrup or pudding sauce.

Plum Pudding:—One quart of flour, three-fourths of a pound of


raisins, three-fourths of a pound of fat salt pork well washed and cut
into small pieces, two tablespoonfuls of sugar or a little molasses.
Mix in just sufficient water to wet it well. Some think it is improved
by the addition of a tablespoonful of baking powder stirred into the
flour before mixing. Boil in a bag, as in the case of the plain flour
pudding. The pudding will come out of the bag easier, if it is plunged
into cold water for an instant, as soon as it is taken out of the kettle.
Do not let it set in the bag. All bag-puddings must be kept covered
with water and kept boiling violently all the time they are on the fire.
Also they must be mixed with as little water as possible. Otherwise
they will either be soggy or will be a mush from absorption of the
water in the pot.

Fig Pudding:—Cut 6 figs in pieces, cover with cold water and let it
come to a boil over a slow fire; put into a dish and add 2
teaspoonfuls of sugar. Beat up an egg with a pinch of salt and a
tablespoonful of sugar, one of flour, and stir it into a half pint of
boiling milk. As soon as it thickens, pour the mixture over the figs in
the dish. I have forgotten where I saw this receipt, but I am going to
appropriate it and the author will please accept my thanks right
here, if he sees this, for it is good.

DRINKS.
Coffee:—The finest drink for the camper is good coffee, but there
is more coffee spoiled in making than would drown all the fraternity.
Coffee boiled is coffee spoiled. The simplest method is to put in the
can one tablespoonful of finely ground coffee for each person to be
served, and one more for the pot. When the water is boiling hard,
turn in a cupful for each person and one more for a possible extra.
Cover tight and set where it will keep hot and not boil, for fifteen
minutes. The grounds will settle of their own accord. If wanted in a
hurry, let it set a few minutes and then stir with a clean stick. This
will saturate the grains more quickly, but it is at a slight expense of
aroma.

Black Coffee—(Café noir): Have a percolator or large strainer; put


in one cupful of ground coffee to each quart of water. Have the
water boiling and pour it slowly through the percolator. The surface
of the water should be just above the coffee in the strainer, when
the allowance is in the pot. Keep it hot, but do not let it boil. A good
strainer is made of a piece of gauze sewn on to a ring of wire a little
larger than the mouth of the pot. Keep the pot covered tightly.

Gloria:—Make the same as café noir. Sweeten well and pour a


little fine brandy over the bowl of a spoon, into each cup. Set fire to
the spirit, and when half consumed blow out the fire and drink. A
good quality of brandy must be used or it will not blaze.

Tea:—Use a teaspoonful of tea to each cup. Have the water


boiling, and use fresh water. Put the tea in the pot and pour the
water over it. Let it set for a few minutes, in a warm place, to
“draw.”

And now, in the hopes that these records of camp experiences


may save some unlucky wight, who spoils the dinner because he did
not know how to cook, from the “cobbing” that he richly deserves,
we will close with the line of the poet who had just had a square
meal:
“—But where is the man who can live without dining.”
APPENDIX
SICKNESS IN CAMP

This subject was not forgotten in the design of this little camp
companion, but the danger from the administration of drugs by
incompetent hands is great, and the author felt that a little
knowledge is a dangerous thing, and something that should be
avoided. However, some of the readers have expressed opinions in
the matter, and requested its insertion. In the preparation of a new
edition of the book, a good opportunity presented itself, and a little
advice is herewith offered. The author still advises that a physician
be consulted, if it be possible, not only on account of the danger of
taking a wrong medicine or too much of a proper one, but because
few people are really competent to make a proper diagnosis.
In the list of supplies, a harmless laxative and a convenient
stimulant, both familiar to every one, were included. In the majority
of cases, these, with plenty of hot or cold water, will suffice for a
remedy until proper medical advice can be obtained. It is considered
only common sense that a convalescent or semi-invalid would come
provided with remedies furnished by his medical adviser; but it is the
unexpected that confronts us, and it is hoped that the same
common sense may be used in such cases.
Illness in camp is generally due to one of three causes: injuries,
disturbances of the digestive functions, or exposure. In the first
case, accidents are generally due to carelessness, and perhaps in
the other cases the same fact may be true; so, perhaps, the advice
to observe proper precautions and keep well, may be thoroughly
applicable.
Dislocations and broken bones are the province of the surgeon;
but if the reader thinks he will ever need the knowledge, “First Aid to
the Injured” is easily acquired before leaving for camp.
Simple cuts sometimes become inflamed, and should, then, be
kept wet with cold water bandages. If a disinfectant is needed,
Seiler’s Antiseptic Tablets are preferable to either Carbolic Acid or
Corrosive Sublimate, both of which are exceedingly dangerous.
Burns and scalds should be bandaged and kept wet with cold
water. A poultice of scraped raw potato will relieve inflammation.
Sprinkle flour over the surface of the wound. Especially remember
that it is needful to keep the air from the inflamed surface, therefore
do not remove the bandages often. For Sunburn, apply linseed oil
and limewater (Carron-oil). Bruises and sprains should be treated
with hot water, applied with a cloth as hot as can be borne. I have
used Haynes’ Arabian Balsam for many years and it has seldom
failed. It works more quickly than the hot water and is more
convenient when on a tramp.
Blistered feet are a nuisance and may generally be avoided by
using proper foot-wear and ordinary attention to cleanliness. If a
blister come, prick it, wash with hot water and cover with a tallowed
cloth. Rub the inside of the sock with dry soap.
For choking, a sharp blow between the shoulders will usually
dislodge the obstruction. If a fishbone lodges, which cannot be
reached, swallow a bit of dry bread. A gargle of vinegar is said to
soften a fishbone, but I have never tried it.
Stings and bites of insects are more troublesome than dangerous,
and the irritation will generally be alleviated by salt and water.
Pennyroyal leaves will allay irritation and also keep away the pests.
Ivy or dogwood poison will generally yield to any astringent wash
like soda or ashes. An infusion of the leaves and twigs of the
Spicebush, when it can be obtained, will cure the worst case. For
inflamed eyes, use hot water bandages.
Nosebleed can generally be stopped by dashing cold water on the
back of the neck. If serious, plug the nostrils to form a clot; but see
that the blood does not run down the throat to cause suffocation. If
the case is obstinate, put the feet in a pail of warm water and add
hot water to it until it is unbearable.
Among the digestive troubles, disturbance of the bowels due to
change of water and diet is the most common. In the case of
constipation, a good dose of physic, followed by plenty of fresh
water, will generally suffice. For this purpose a dose of Salts is as
good as anything. Or mix a teaspoonful of Cream of Tartar with as
much sugar, put in a glass of water, stir it well and drink. If taken
before breakfast or on an empty stomach, relief will ensue in a short
time. If the bowels are loose, a dose of Rhubarb will generally
suffice as well as for the contrary condition. The principal point to be
gained in any case of bowel disturbance is to clear the tract of any
fermenting matter. If a diarrhœa becomes troublesome, make an
infusion of blackberry vines and roots. I have found the running
variety best. But be very careful not to check too quickly or a worse
condition may be induced.
Occasionally a case of ptomaine poisoning appears, which may be
caused by canned goods, especially if you are not careful to empty
the can at once. Clear the bowels thoroughly and feed on milk and
eggs for a day. If the patient does not recover at once, consult a
doctor.
Headache is generally due to a disordered stomach, but may be
induced by a cold or by getting over-heated. In the first case a dose
of physic, and a good night’s sleep, will effect a cure; the ordinary
treatment for a cold will fix the second; and in the last case, pack
the head in ice or very cold water. If the patient gets stupid and
breathless, take him into the shade, strip the upper body, douche
the head with cold water and fan vigorously to induce respiration.
Heartburn (so called) is a common result of too much fatty food,
and the handiest remedy is to pound up a little charcoal, mix with
water and drink. Another troublesome result of a disordered
stomach is the eruption known as Hives. Wash with saleratus and
water, and take Cream of Tartar as directed in a former paragraph.
Do not put on any greasy salve.
Exposure or carelessness in changing the clothing often results in
what is commonly called a “cold.” A few hot drinks and a night under
warm blankets will usually bring relief; but if it get troublesome,
drink plenty of hot water or tea, wrap in blankets and sweat it out. If
the stomach revolts at the hot water, make an infusion of the leaves
and twigs of the snapwood (Benzoin odoriferum) or of checkerberry
leaves (Gaultheria procumbens). When the disturbance is seated in
the bowels, it often results in a colic, for which there is nothing
better than black-pepper tea. Pour hot water over a teaspoonful of
pepper to make a large cupful and drink as hot as possible. The
remedy is nearly as bad as the disease, but not as fatal.
Neuralgia may generally be eased by cloths wrung out in hot
water and applied to the affected part. If in a tooth that is decayed,
a hot raisin will often soothe the pain. In earache apply a roasted
onion as hot as can be borne. I cannot recommend any of the
popular headache remedies. They should never be used except by a
physician, and even in that case are often dangerous. I shall not
explain this as it may be considered libel by the doctor.
If there is sore throat, a cold water bandage will generally relieve
it by the next morning. For an aggravating cough an infusion of
Mullein leaves (Verbascum) drunk freely will afford relief. Nothing is
really necessary except to allay irritation and hot water slowly sipped
will often be sufficient.
A combination of exposure, indigestion and fatigue, that often
comes to the camper, sometimes results in an inflammation of the
pleura, indicated by an excruciating pain in the side. This may be
allayed by a mustard plaster. Watch that it does not blister; for in
camp that may prove very serious.
Muscular cramps generally affect the legs, and in this case, get the
feet warm, rub the part affected briskly, and straighten out the toes,
forcibly if necessary. Hot stones wrapped in cloth or even cloths
wrung out in hot water will serve to warm the feet.
If a medicine case is considered necessary, a box containing the
following materials is suggested, in addition to the remedies
mentioned on page 15.

Cream-of-Tartar.
Carron-oil (Linseed oil and Limewater).
A small vial of 1/8 grain Morphine pills.
Package of Seiler’s Antiseptic Tablets.
Roll of bandages.
I cannot recommend Carbolic Acid nor Corrosive Sublimate as
antiseptics. The tablets are better and perfectly safe.
Above all, mix all remedies with common sense. If you carry
drugs, be sure to know their action before you start from home.
The suggestion was made that I give instructions for the use of
Nature’s Remedies as found in the herbs and bushes, which would
be very apropos if it were not for the fact that it would require a
special botanical knowledge, instruction in which has no place here,
and more time would be required in preparation than can usually be
spared in camp. As well, an amount of space which the publisher
would probably hesitate to provide. A few of them, however, are
very useful and generally easily obtained. If a person has the
necessary botanical knowledge, a remedy for any illness could, I
have no doubt, be readily obtained near at hand in almost any
camp; and if the reader wishes to charge his mind with the subject,
the following list, with the aid of a little previous study, may be
valuable.
Ginger-bush; spice-bush (Benzoin odoriferum) will break up a
cold, relieve the irritation of ivy or dogwood poison, and incidentally
cure the worst case of erysipelas. Steep the leaves and twigs in
water and apply internally, externally and eternally.
Checkerberry; boxberry; teaberry (Gaultheria procumbens) will
make a pleasant drink that will help break up a cold or cure
indigestion. It is a fact, however, that almost any aromatic herb, (not
poisonous), will make a good tea, the principal effect being due to
the hot water.
Climbing wax-work root (Celastrus scandens) seethed in lard, will
make a salve that will prove almost magical in case of burns either
of fire or sun.
Bayberry root (Myrica cerifera) or Barberry bark (Berberis vulgaris)
makes a good gargle for sore mouth or a wash for inflamed eyes. Do
not be alarmed if you swallow a little of the infusion, it will do you
good.
Blackberry root (Rubus Villosus) is valuable for bowel complaints.
Boneset or thoroughwort (Eupatorium) cures a cold; but be
careful not to use too freely.
Dandelion root (Taraxacum dens-leonis) stimulates the appetite
and aids digestion.
High-bush Cranberry bark; Cramp-wood (Viburnum opulus) is
used for cramps in the stomach and bowels.
Mullein (Verbascum thapsus) allays an aggravating cough.
Partridge-berry vines (Mitchella repens) relieves retention of the
urine.
Pennyroyal (Hedeoma pulegioides) is a remedy for the stomach-
ache or wind in the bowels.
Yarrow (Achillea millefolium) or Prickly-ash berries (Xanthoxylum)
is a remedy for ague.
Of the common household materials, pepper-tea is a convenient
irritant for bowel trouble. Mustard poultice is too well known to need
comment. A roasted onion is a good poultice for a boil or abscess,
and a poultice of tobacco leaves, generally common in any camp,
will serve to apply to boils, stings, poisonous bites, etc. Use this
latter carefully for it is a powerful poison, and the external
application may produce an unpleasant result.
The preparation of these remedies is usually by infusion, which
should be prepared from a handful of the leaves, bark or roots,
placed in a dish and about a pint of boiling water turned over it,
allowed to stand in a warm place to simmer for a time and drank
warm generally.
Sweet Fern (Comptonia asplenifolia); Wild Cherry (Prunus
Virginiana) bark or fruit; Hardhack or Steeple-bush (Spiraea
tomentosa); or Mountain Cranberry (Arctostaphylos uva-ursi) are all
remedies for diarrhœa which may be used on occasion. Nearly any
astringent is useful in this case, but should be used only when the
case refuses to yield to the action of a cathartic.
Poplar bark (Populus tremuloides); Spearmint (Mentha viridis) or
almost any kind of mint which may be found in the nearest low land;
or Button-bush (Cephalanthus occidentalis) will serve as a febrifuge
in case of a severe cold from exposure.
Gold-thread (Coptis trifolia) which is usually common in swamps:
or Oak bark (Quercus sp.) are valuable in checking the canker or
sore mouth which often comes after a diet of salt meats.
Witch Hazel (Hamamelis virginica) is a common remedy for
irritated skin and many other ills, but I have never seen that it did
much good other than to lubricate the surface.
Sweet-flag root (Acorus calamus) relieves the pressure of wind in
the stomach and bowels, due generally to fermentation. This is a
disagreeable condition and I have known obstinate cases to be
cured by nibbling a bit of the root occasionally.
Labrador tea (Ledum latifolium) when the camper is far enough
north to find it, makes a pleasant drink and is preferable to coffee or
“store” tea. It is tonic and pectoral, giving the habitual user a
sensation of comfort and cleanliness of the system.
INDEX.
Apple slump, 106

Bacon, fried, 76
Bags, for holding food, 20
sleeping, 19
Baker, 18
Batter-cakes, 61
Barbecue, dressing, 79
meat, 78
Beans boiled, 95
baked, 101
soup, 72
Bean-hole, 101
Bedding, 14
Beds, 36
canvas, 38
browse, 37
pole, 37
Beef, boiled, 77
Beets, boiled, 99
Black flies, 43
Blankets, 19
Boots, 20
Broiler, 15
Bread, baked, 60
frying-pan, 40, 61

Cakes, batter, 61
oatmeal, 62
rice, 62
spider, 61
Camp beds, 37
fire, 38
making, 33-35
permanent, 12
shelters, 22
temporary night, 53
Canvas clothing, 20
Cat-fish, cleaning, 49
Cereals, cooking, 64
Chowder, clam, 71
fish, 69
Southern style, 69
Daniel Webster, 70
Chanterelle, stewed, 104
Chimney to log house, 32
Clams, baked, 90
chowder, 71
fried, 89
Clavaria, fried, 104
Clothes, 14, 20
Coffee, black, 109
can, 17
Gloria, 110
to make, 109
Companions, choice of, 33
Compass, use of, 52
local variation, 52
Cooking in camp, 59
utensils, 15
Coprinus, shaggy mane, 104
Corn, boiled green, 98
meal mush, 63
Curry of rabbit, 82

Desserts, 105

Eggs, boiled, 91
fricasseed, 93
fried, 91
on hash, 79
omelette, 92
sandwiches, 91
scrambled, 92

Fils-d’une-chienne, 65
Fire, camp, 38-41
cooking, 38
on rainy day, 41
Firearms, 13
Fireplace, 38-39
Fish balls, 90
bag, 45
baked, 86-88
boiled, 85
broiled, 87
care of, 45
cleaning, 44
cooking, 84
fried, 85
knife, 46
planked, 88
preparing, 84
sauce, 86
skewered, 87
spoiled, danger from, 49
Flapjacks, 61
Food, cooking, 59
preparation, 21
quantity needed, 15-16
Fricassee partridge, 83
Fried bacon, 76
bread, 61
clavaria, 104
eggs, 79-91
fish, 85
ham, 76
meats, 18-75
mush, 63
potatoes, 96
pork, 75
rabbit, 81
squirrel, 80
sausages, 77
Frypan, 17

Game, cooking, 79
dressing for food, 80
Grouse roasted in clay, 82
fricassee, 83
Ham and eggs, 76
Hashed, meat, 78
Hats, 20
Health, care of, 20, 35, 50
Hornpouts, cleaning, 49
Hut, built of logs, 29

Insect repellent, 43

Kettle, 16
Knife for cleaning fish, 46

Lean-to camps, 27-28


Liquor in camp, 36
Lob-scouse, 68
Lost in the woods, 51
searching for, 54

Macaroni, 102
Meat, barbecued, 78
cooking of, 73
dark, cooking, 74
white, cooking, 74
Mosquito netting, 42
repellent, 42-43
Mush, 63
Mushrooms, 102
broiled, 103
Elm, 103
selection of, 102-105
Nessmuk, 12

Omelette, egg, 92
ham, 93
aux fine herbes, 93
Outfits for camping, 11
for permanent camp, 15
for trip on foot, 14
Oven, 18, 41
Oysters fried with bacon, 89
stew, 73
vegetable, 103

Paymaster, 34
Perch, yellow, dressing, 47
white, dressing, 48
fried, 85
Pickerel, dressing, 48
Pillow, 19
Pork, broiled, 76
choice of, 76
chops, 75
fried, 75
and greens, 100
Potatoes, baked, 96
boiled, 95
boiled-fried, 96
lyonnaise, 97
mashed, 96
salad, 97
stewed, 96
Preparing for camp, 33
Pudding, apple, 106
corn-starch, 105
fig, 108
flour, 107
plum, 108
rice, 105
sauce, 107
tapioca, 106
Puff-balls, fried, 105
“Punkey dope”, 43

Quail, roasted, 81

Rabbit, curry, 82
fried, 81
Rain, effect on tent, 23
building fire in, 41
Rations for camp, 15-16
Rice, boiled, 63
pudding, 105
Roasting in the ashes, 18
Roast grouse, 82
meat in clay, 82
Rubber blanket, 19
Russula, broiled, 103

Salad, vegetable, 100


potato, 97
Sausages, fried, 77
Shelters, 22
Size of party, 34
Skunk stew, 67
preparing for cooking, 68
Sleeping bag, 19
Soups, bean, 72
pea, 72
turtle, 67
meat, 65
Spider-cake, 61
Squirrel, 67, 73, 80
Steaks, broiling, 74
vegetable, 104
Stew, beef, 65
camp, 65
oyster, 73
rabbit, 66
skunk, 67
tomato, 100
venison, 66
Succotash, 98
Cape Cod style, 99
Supplies, list of, 15-21

Tapioca pudding, 106


Tea, 110
Tent, A, 23
dog, 26
effect of rain on, 23
pitching, 24
shanty, 24
wall, 23
Toast, milk, 64
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

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

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like