\section{Introduction}
\label{intro}

\pmarginpic{mkinhat.ps}{The Author}

Distributed networks of ``Things That Think''\cite{ttt} are far too
rare.  Things That Think is used as a term to include essentially
anything with computation, sensing or actuation capability. Typically,
however, it implies items that have embedded computation, sensing, or
actuation that are not normally thought of as computational or
thinking devices.  Networks of these things are not common, despite
the growing presence of the things themselves.  Distributed software
networks are ubiquitous.  Distributed networks of things, however, are
not.

\par

Domestic environments provide a rich domain in which networked systems
of things can be built.  The kitchen in particular is an area ripe
with devices that could be networked together in a useful manner.
Specifically, a kitchen capable of aiding in the execution of a
recipe, particularly in the planning, instruction, and sequencing of
activities would be very useful.  Further, a natural extension of such
a system would include inventory management to allow questions like
``What can I make with what I've got?'' to be readily answerable.

\par

There are a number of problems associated with building a distributed
network of things, in the kitchen or otherwise, that are not addressed
by either disconnected things or most existing distributed software
systems.  One such problem is a wider range of capabilities of
components of the system.  In most distributed software systems, while
there may be some heterogeneity, most of the participants are similar
computers.  In a network of things, capabilities are much more
variable.  Another problem is that the description of the components
of the system is not necessarily limited to the capabilities accessible
through an API. 

\par

This work will focus on issues of managing a range of
heterogeneous devices, semantic labeling of those devices, and
building a recipe assistant for the kitchen using this infrastructure.
Some of the other issues that are particular to distributed networks
of things will also be discussed.

\subsection{Approach}

A software system and application test bed to ease the construction of
these networks has been built.  This system, called
Hive\cite{hiveweb}, has been developed within the Media Lab by Matthew
Gray,
\marginpic{nelson.ps}{Nelson Minar}
Nelson Minar, Oliver Roup and Raffi Krikorian.  Hive is intended to be
\marginpic{oroup.ps}{Oliver Roup\\
{\small Photo credit: Webb Chappell}}
a flexible, powerful standard architecture to provide connectivity for
distributed networks of things that think.  A system for solving the
above problems will be built into Hive.

\par

Using the Hive system, a networked kitchen was built, and the ``recipe
assistant'' scenario implemented.  Construction of this system
highlighted the strengths and weaknesses of the Hive architecture.
Particularly, the kitchen provided a good test bed for utilization of
Hive's semantic labeling system.

\par

Further deployments of Hive within the MIT Media Laboratory, and
development of other applications altogether, such as the new ``Honey,
I Shrunk the CDs'' system\footnote{See Section \ref{scenarios}} (a
jukebox demo), has allowed evaluation of the utility of the Hive
system.
\par

\subsection{Organization}

This work will cover the background that has led to the exploration of
the networked kitchen and background in distributed computing systems.
It will then describe the Hive system which was developed, and then
how it was applied to the kitchen.  Other applications of the same
infrastructure will also be discussed, followed by an analysis of the
effectiveness of Hive at addressing the problems associated with
building complex systems of ``things that think''.

\subsubsection{Background}

A brief discussion of prior work in the domain of networked kitchens
appears in Section \ref{kitchens}.  This includes prior work at the
Media Lab, commercial development work, and work on the ``Universal
Kitchen'' project at the Rhode Island School of Design.  A description
of other distributed systems that were examined and share qualities
with Hive appears in Section
\ref{distsys}.

\subsubsection{Hive and semantic labeling}

Section \ref{hive} describes the architecture of the Hive system,
including details on cells, agents and shadows.  It also covers the
specifics of the implementation.  Section \ref{semantic} covers the
semantic labeling system used in Hive, where it comes from, and how it
is applied.

\subsubsection{Kitchen demonstration system}

In Section \ref{netkitchen}, details of the kitchen demonstration
system are covered.  The architecture and design of the system, and
details of the implementation are covered.  A comparison to prior work
in the area is made, and the effectiveness of Hive is evaluated for
this application.

\subsubsection{Other scenarios}

Hive has been applied in a number of other scenarios, and some of
these are covered in Section \ref{scenarios}.  The scenarios discussed
include ``Honey, I Shrunk the CDs'', an RF based
location system, and the Hive demonstration system.

\subsubsection{Jini}

While Hive shares many qualities with other distributed systems, it is
more similar to Jini than any other.  These similarities warrant
particular attention.  Section \ref{jini} discusses the similarities,
differences, and how these systems can interact.

\subsubsection{Analysis}

Section \ref{analysis} analyzes the overall effectiveness of Hive,
and identifies lessons learned, and suggests areas for future work.
