My primary research interests are
component-based software development, distributed systems and
ubiquitous computing. I'm particular interested in building autonomous
infrastructure to allow service composition and system restructuring.
Within the past two decades, the development of raw computing power
coupled with the proliferation of computer devices has grown at
exponential rates. This phenomenal growth, along with the advent of
the Internet has led to a new age of accessibility to people, to
systems, and most importantly, to information. Access to information
becomes omni-present through PCs, hand-held and wireless devices.
While we're all fascinated by this revolution, we ask ourselves how
people will manage their systems effectively with such greatly
increased complexity. To be more specific:
- How to organize a constellation of distributed components into a
federated system?
- How to compose services provided by individual components to
fulfill more sophisticated tasks?
- How to make components interact and coordinate with each other
effectively?
- How to build more intelligent and proactive components?
- How to allow users to transparently access information from
multiple distributed sources?
- How to allow critical computer operations to run with minimum
human interaction?
- How to enforce security and privacy in such systems?
- How to guarantee such systems to be fault-tolerant?
Among these issues component (service) composition and system
adaptation are the most interesting topics to me. With respect to
adaptation, there are two important levels: component-level adaptation
and system-level adaptation. A component should be self-adaptive in
the sense that it must be aware of its environment and surrounding
context, and then act accordingly. It should be able to find and
generate rules for how best to interact with neighboring systems. It
should also know how to make use of available resources or even
negotiate the use of underutilized elements of other systems, changing
both itself and its environment in the process. A system should be
self-adaptive in the sense that it is aware of environmental and
component changes, adjusting component composition or configuring
system architecture dynamically to achieve high dependability based on
the learned knowledge. To me, system-level adaptation is the more
challenging problem, and is what I would particularly like to delve
into.
I'm currently participating in the research and development of
Project RADAR and Project Aura.
RADAR Project
RADAR
(Reflective Agents with Distributed Adaptive Reasoning) is a large
research project funded by DARPA's Cognitive Computing Initiative. Its goal is to develop software-based cognitive personal assistants that
can help people improve productivity in their workplace.
I'm working on the high-level architecture of RADAR under Prof. David
Garlan's guidance. The most significant challenge facing us is how to
enable a variety of heterogeneous agents to coordinate seamlessly and
effectively to accomplish sophisticated tasks. At present I'm
experimenting on a prototype of a key component in the architecture: the
Task Manager, which is intended to manage high-level tasks and coordinate
communications among agents in a personal space.
Aura Project
Aura is a ubiquitous
computing framework allowing computational tasks moving from one
environment to another with minimum user distraction. One of the core
elements in an Aura system is the notion of a "supplier". Each supplier is
an application wrapper with an abstract description of the services the
application provides. I designed and developed a generic framework for
developing Aura suppliers on Windows platform. This framework allows
miscellaneous Windows applications to be easily plugged into an Aura
system. Major design challenges were to create a flexible, asynchronous
communication mechanism, parallelism, portability, and system
extensibility. I'm also participating in the research in context-awareness.
|