58614
58614
com
OR CLICK BUTTON
DOWNLOAD NOW
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
• •
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
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.
Program Chairs
Malu Castellanos Hewlett-Packard, USA
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
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
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
BIRTE 2017
DCS: A Policy Framework for the Detection of Correlated Data Streams . . . . 191
Rakan Alseghayer, Daniel Petrov, Panos K. Chrysanthis,
Mohamed Sharaf, and Alexandros Labrinidis
1 Introduction
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
Collector
Invoke
Analyzer
Admin Fetch
Results Statistics
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.
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.
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).
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
Invoke
Dashboard Session Detector (Stored procedure)
Sessions
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.
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.
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.
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.
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
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
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
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.
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.
300
295
285
225
Execution Time (msec)
225 215
150
75
0
15 20
Number of concurrent users
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.
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.
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.
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.
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.
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.
VEGETABLES.
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.
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.
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.
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.
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.
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.
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.
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
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
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com