I currently work on social computing and human-computer interaction in Stanford's Mobisocial and HCI groups. My Ph.D. thesis explores novel applications for the digital life-logs that millions of consumers are collecting. These applications are demonstrated in a system called Muse which helps people look back and reflect on the years or decades past, using their email archives. Muse is also being deployed by Stanford to provide researchers and the public access to the email archives of eminent individuals that are hosted in its libraries.
In addition, we have designed novel "experience-infused" applications that provide new experiences for users using the power of automatic recall from their archives. The personalized Experience-infused Browser is one example; the Slant custom search engine is another.
In a previous career, I worked on creating new methods to make computer systems more reliable. Broadly, my thesis was that hardware design can be improved by using many of the innovative ideas in the software engineering world; and software can be made more robust using the rigorous methods of hardware engineering. Here are 4 examples ideas (the first three were developed when I was with the microprocessor division at Sun Microsystems, and the last one at Stanford for my Masters').
- Verification of multiprocessor systems
- TSOtool is a program that helps in verifying the correctness of
shared memory multiprocessors. It has exposed bugs in
every Sun microprocessor designed in the last few years, and in 2004, was awarded Scott Mcnealy's chairman's
award for innovation, the highest recognition for technical achievement at Sun.
- Formal verification
One of the obstacles to using formal verification (model checking) technologies
during hardware design is the need to manually write down properties to be
verified. IODINE is a system that mines design simulations to automatically infer useful invariants.
- Fast and accurate simulation
We developed a technique to checkpoint
architectural state of a program on a fast processor simulator (written in, say, C)
and restart it on a hardware (Verilog) model of the processor.
It was used successfully to predict performance of the picoJava
and UltraJava (MAJC) processors, and moreover exposed deep design bugs
before tapeout. (IEEE Micro Paper)
- Automated Debugging
- DIDUCE (developed with my advisor, Monica Lam) is a debugging tool based on inferring dynamic invariants from program runs. "Presumed invariants" from DIDUCE can be used in in a variety of ways. One way is to turn these invariants into assertions or warnings to give programmers insight into what's wrong - or at least, unusual - when a large Java program is running.
Pet peeves and what's cool
Bhimsen Joshi: tributes
Suman Sangam, an ecological farm on the outskirts of Dharwad, India.
RISKS is sometimes funny, sometimes sad, and always a good storehouse for ideas on problem detection.